#Область ОписаниеПеременных
&НаКлиенте
Перем ТекущаяСтрокаМетаданных;
#КонецОбласти
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты) Экспорт
Если ИдентификаторКоманды = "ОткрытьФормуРедактированияРегистрации" Тогда
Если ПараметрОбъектРегистрации <> Неопределено Тогда
ПараметрыФормыРегистрации = Новый Структура;
ПараметрыФормыРегистрации.Вставить("ОбъектРегистрации", ПараметрОбъектРегистрации);
ПараметрыФормыРегистрации.Вставить("ТаблицаРегистрации", ПараметрТаблицаРегистрации);
ОткрытьФорму(ИмяЭтойФормы + "Форма.УзлыРегистрацииОбъекта", ПараметрыФормыРегистрации);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
ПроверитьВерсиюИРежимСовместимостиПлатформы();
ПараметрТаблицаРегистрации = Неопределено;
ПараметрОбъектРегистрации = Неопределено;
ОткрытиеСУзломПараметром = Ложь;
ТекущийОбъект = ЭтотОбъект();
ИмяЭтойФормы = ПолучитьИмяФормы();
Если Параметры.ДополнительнаяОбработкаСсылка = Неопределено Тогда
УзелОбменаСсылка = Параметры.УзелОбмена;
Параметры.Свойство("ЗапрещеноВыбиратьУзелОбмена", ЗапрещеноВыбиратьУзелОбмена);
ОткрытиеСУзломПараметром = Истина;
Иначе
Если ТипЗнч(Параметры.ОбъектыНазначения) = Тип("Массив") И Параметры.ОбъектыНазначения.Количество() > 0 Тогда
ОбъектНазначения = Параметры.ОбъектыНазначения[0];
Тип = ТипЗнч(ОбъектНазначения);
Если ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) Тогда
УзелОбменаСсылка = ОбъектНазначения;
ОткрытиеСУзломПараметром = Истина;
Иначе
Описание = ТекущийОбъект.ХарактеристикиПоМетаданным(ОбъектНазначения.Метаданные());
Если Описание.ЭтоСсылка Тогда
ПараметрОбъектРегистрации = ОбъектНазначения;
ИначеЕсли Описание.ЭтоНабор Тогда
ПараметрТаблицаРегистрации = Описание.ИмяТаблицы;
ПараметрОбъектРегистрации = Новый Структура;
Для Каждого Измерение Из ТекущийОбъект.ИзмеренияНабораЗаписей(ПараметрТаблицаРегистрации) Цикл
ТекИмя = Измерение.Имя;
ПараметрОбъектРегистрации.Вставить(ТекИмя, ОбъектНазначения.Отбор[ТекИмя].Значение);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Иначе
ВызватьИсключение СтрЗаменить(
НСтр("ru = 'Некорректные параметры объектов назначения открытия команды ""%1""'"),
"%1", Параметры.ИдентификаторКоманды);
КонецЕсли;
КонецЕсли;
ТекущийОбъект.ПрочитатьНастройки();
ТекущийОбъект.ПрочитатьПризнакиПоддержкиБСП();
ТекущийОбъект.ПрочитатьПризнакиПоддержкиБСД();
ЭтотОбъект(ТекущийОбъект);
Если ПараметрОбъектРегистрации <> Неопределено Тогда
Возврат;
КонецЕсли;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.Основная;
Параметры.Свойство("ИменаСкрываемыхМетаданных", Объект.ИменаСкрываемыхМетаданных);
ДополнитьИменаСкрываемыхМетаданных();
Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаПустая;
Параметры.Свойство("ЗапрещеноВыбиратьУзелОбмена", ЗапрещеноВыбиратьУзелОбмена);
НаименованиеУзлаПланаОбмена = Строка(УзелОбменаСсылка);
ЗаполнитьДополнительнуюИнформацию();
Если Не ПроконтролироватьНастройки() И ОткрытиеСУзломПараметром Тогда
ТекстСообщения = СтрЗаменить(
НСтр("ru = 'Для ""%1"" редактирование регистрации объектов недоступно.'"),
"%1", НаименованиеУзлаПланаОбмена);
ВызватьИсключение ТекстСообщения;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
Если ЗакрытьФормуБезусловно Тогда
Возврат;
КонецЕсли;
Если ДлительнаяОперацияЗапущена Тогда
Отказ = Истина;
Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеФормыЗавершение", ЭтотОбъект);
ПоказатьВопрос(Оповещение, НСтр("ru = 'Прервать выполнение регистрации данных?'"), РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Если ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
Если ДлительнаяОперацияЗапущена Тогда
ЗавершитьВыполнениеДлительнойОперации(ФоновоеЗаданиеИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если Не (ТипЗнч(ИсточникВыбора) = Тип("ФормаКлиентскогоПриложения")
И ИсточникВыбора.КлючУникальности = КлючУникальностиФормыВыбораРезультатаЗапроса) Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура")
Или (Не ВыбранноеЗначение.Свойство("ДействиеВыбора"))
Или (Не ВыбранноеЗначение.Свойство("ДанныеВыбора"))
Или ТипЗнч(ВыбранноеЗначение.ДействиеВыбора) <> Тип("Булево")
Или ТипЗнч(ВыбранноеЗначение.ДанныеВыбора) <> Тип("Строка") Тогда
Ошибка = НСтр("ru = 'Неожиданный результат выбора из консоли запросов'");
Иначе
Ошибка = КонтрольСсылокДляВыбораЗапросом(ВыбранноеЗначение.ДанныеВыбора);
КонецЕсли;
Если Ошибка <> "" Тогда
ПоказатьПредупреждение(,Ошибка);
Возврат;
КонецЕсли;
Если ВыбранноеЗначение.ДействиеВыбора Тогда
Текст = НСтр("ru = 'Зарегистрировать результат запроса
|на узле ""%1""?'");
Иначе
Текст = НСтр("ru = 'Отменить регистрацию результата запроса
|на узле ""%1""?'");
КонецЕсли;
Текст = СтрЗаменить(Текст, "%1", Строка(УзелОбменаСсылка));
ЗаголовокВопроса = НСтр("ru = 'Подтверждение'");
Оповещение = Новый ОписаниеОповещения("ОбработкаВыбораЗавершение", ЭтотОбъект, Новый Структура);
Оповещение.ДополнительныеПараметры.Вставить("ВыбранноеЗначение", ВыбранноеЗначение);
ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ИзменениеРегистрацииОбменаДаннымиОбъекта" Тогда
ЗаполнитьКоличествоРегистрацийВДереве();
ОбновитьСодержимоеСтраницы();
ИначеЕсли ИмяСобытия = "ИзменениеДанныхУзлаОбмена" И УзелОбменаСсылка = Параметр Тогда
УстановитьЗаголовокНомеровСообщений();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
ТекущийОбъект = ЭтотОбъект();
ТекущийОбъект.СохранитьНастройки();
ЭтотОбъект(ТекущийОбъект);
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
Если ПараметрОбъектРегистрации <> Неопределено Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.УзелОбмена) Тогда
УзелОбменаСсылка = Параметры.УзелОбмена;
Иначе
УзелОбменаСсылка = Настройки["УзелОбменаСсылка"];
ВерсияДанных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОбменаСсылка, "ВерсияДанных");
Если УзелОбменаСсылка <> Неопределено
И ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(УзелОбменаСсылка))
И ПустаяСтрока(ВерсияДанных) Тогда
УзелОбменаСсылка = Неопределено;
КонецЕсли;
КонецЕсли;
ПроконтролироватьНастройки();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура УзелОбменаСсылкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекИмяФормы = ИмяЭтойФормы + "Форма.ВыборУзлаПланаОбмена";
ТекПараметры = Новый Структура("МножественныйВыбор, НачальноеЗначениеВыбора", Ложь, УзелОбменаСсылка);
ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура УзелОбменаСсылкаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если УзелОбменаСсылка <> ВыбранноеЗначение Тогда
УзелОбменаСсылка = ВыбранноеЗначение;
ПодключитьОбработчикОжидания("ОбработкаВыбораУзлаОбмена", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УзелОбменаСсылкаПриИзменении(Элемент)
ОбработкаВыбораУзлаОбменаСервер();
РазвернутьДеревоМетаданных();
ОбновитьСодержимоеСтраницы();
КонецПроцедуры
&НаКлиенте
Процедура УзелОбменаСсылкаОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ВариантОтбораПоНомеруСообщенияПриИзменении(Элемент)
УстановитьОтборыВДинамическихСписках();
ОбновитьСодержимоеСтраницы();
КонецПроцедуры
&НаКлиенте
Процедура ВариантыСпискаОбъектовПриСменеСтраницы(Элемент, ТекущаяСтраница)
ОбновитьСодержимоеСтраницы(ТекущаяСтраница);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоМетаданных
&НаКлиенте
Процедура ДеревоМетаданныхПометкаПриИзменении(Элемент)
ИзменениеПометки(Элементы.ДеревоМетаданных.ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоМетаданныхПриАктивизацииСтроки(Элемент)
Если Элементы.ДеревоМетаданных.ТекущаяСтрока <> ТекущаяСтрокаМетаданных Тогда
ТекущаяСтрокаМетаданных = Элементы.ДеревоМетаданных.ТекущаяСтрока;
ПодключитьОбработчикОжидания("НастроитьРедактированиеИзменений", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокКонстант
&НаКлиенте
Процедура СписокКонстантПриАктивизацииСтроки(Элемент)
ДоступностьКоманды = Элементы.СписокКонстант.ВыделенныеСтроки.Количество() > 0;
Элементы.ПоказатьРезультатВыгрузки.Доступность = ДоступностьКоманды;
КонецПроцедуры
&НаКлиенте
Процедура СписокКонстантОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Результат = ДобавитьРегистрациюНаСервере(Истина, ВыбранноеЗначение);
Элементы.СписокКонстант.Обновить();
ЗаполнитьКоличествоРегистрацийВДереве();
СообщитьОРезультатахРегистрации(Результат);
Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") И ВыбранноеЗначение.Количество() > 0 Тогда
Элемент.ТекущаяСтрока = ВыбранноеЗначение[0];
Иначе
Элемент.ТекущаяСтрока = ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокСсылок
&НаКлиенте
Процедура СписокСсылокПриАктивизацииСтроки(Элемент)
ДоступностьКоманды = Элементы.СписокСсылок.ВыделенныеСтроки.Количество() > 0;
Элементы.ПоказатьРезультатВыгрузки.Доступность = ДоступностьКоманды;
КонецПроцедуры
&НаКлиенте
Процедура СписокСсылокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущаяСсылка = ТекущиеДанныеСпискаСсылок().Ссылка;
Если Не ЗначениеЗаполнено(ТекущаяСсылка)
Или Не ЗначениеЗаполнено(СписокСсылокИмяТаблицы) Тогда
Возврат;
КонецЕсли;
СтруктураПараметров = Новый Структура("Ключ, ТолькоПросмотр", ТекущаяСсылка, Истина);
Если ЭтоГруппа(ТекущаяСсылка) Тогда
ОткрытьФорму(СписокСсылокИмяТаблицы + ".ФормаГруппы", СтруктураПараметров, ЭтотОбъект);
Иначе
ОткрытьФорму(СписокСсылокИмяТаблицы + ".ФормаОбъекта", СтруктураПараметров, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЭтоГруппа(Ссылка)
ОбъектМетаданных = Ссылка.ПолучитьОбъект().Метаданные();
Если (Метаданные.Справочники.Содержит(ОбъектМетаданных) Или Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных))
И ОбъектМетаданных.Иерархический
И ОбъектМетаданных.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда
Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда
ИмяТаблицы = "Справочник." + ОбъектМетаданных.Имя;
Иначе
ИмяТаблицы = "ПланВидовХарактеристик." + ОбъектМетаданных.Имя;
КонецЕсли;
Иначе
Возврат Ложь;
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| Таблица.Ссылка КАК Ссылка
|ИЗ
| #Таблица КАК Таблица
|ГДЕ
| Таблица.ЭтоГруппа
| И Таблица.Ссылка = &Ссылка";
ТекстЗапрос = СтрЗаменить(ТекстЗапроса, "#Таблица", ИмяТаблицы);
Запрос = Новый Запрос(ТекстЗапрос);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура СписокСсылокОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ОбработкаВыбораДанных(Элемент, ВыбранноеЗначение);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокНаборовЗаписей
&НаКлиенте
Процедура СписокНаборовЗаписейПриАктивизацииСтроки(Элемент)
ДоступностьКоманды = Элементы.СписокНаборовЗаписей.ВыделенныеСтроки.Количество() > 0;
Элементы.ПоказатьРезультатВыгрузки.Доступность = ДоступностьКоманды;
КонецПроцедуры
&НаКлиенте
Процедура СписокНаборовЗаписейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыЗаписи = СтруктураКлючаНабораЗаписей(Элемент.ТекущиеДанные);
Если ПараметрыЗаписи <> Неопределено Тогда
ОткрытьФорму(ПараметрыЗаписи.ИмяФормы, Новый Структура(ПараметрыЗаписи.Параметр, ПараметрыЗаписи.Значение));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокНаборовЗаписейОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ОбработкаВыбораДанных(Элемент, ВыбранноеЗначение);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ДобавитьРегистрациюОдногоОбъекта(Команда)
Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
Возврат;
КонецЕсли;
ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница;
Если ТекСтр = Элементы.СтраницаКонстанты Тогда
ДобавитьРегистрациюКонстантыВСписке();
ИначеЕсли ТекСтр = Элементы.СтраницаСписокСсылок Тогда
ДобавитьРегистрациюВСписокСсылок();
ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда
ДобавитьРегистрациюВНаборЗаписейОтбор();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюОдногоОбъекта(Команда)
Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
Возврат;
КонецЕсли;
ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница;
Если ТекСтр = Элементы.СтраницаКонстанты Тогда
УдалитьРегистрациюКонстантыВСписке();
ИначеЕсли ТекСтр = Элементы.СтраницаСписокСсылок Тогда
УдалитьРегистрациюИзСпискаСсылок();
ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда
УдалитьРегистрациюВНабореЗаписей();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюОтбор(Команда)
Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
Возврат;
КонецЕсли;
ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница;
Если ТекСтр = Элементы.СтраницаСписокСсылок Тогда
ДобавитьРегистрациюВСписокОтбор();
ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда
ДобавитьРегистрациюВНаборЗаписейОтбор();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюОтбор(Команда)
Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
Возврат;
КонецЕсли;
ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница;
Если ТекСтр = Элементы.СтраницаСписокСсылок Тогда
УдалитьРегистрациюВСпискеОтбор();
ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда
УдалитьРегистрациюВНабореЗаписейОтбор();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуРегистрацииНаУзлах(Команда)
Если ЗапрещеноВыбиратьУзелОбмена Тогда
Возврат;
КонецЕсли;
Данные = ПолучитьТекущийОбъектРедактирования();
Если Данные <> Неопределено Тогда
ТаблицаРегистрации = ?(ТипЗнч(Данные) = Тип("Структура"), СписокНаборовЗаписейИмяТаблицы, "");
ОткрытьФорму(ИмяЭтойФормы + "Форма.УзлыРегистрацииОбъекта",
Новый Структура("ОбъектРегистрации, ТаблицаРегистрации, ОповещатьОбИзменениях",
Данные, ТаблицаРегистрации, Истина), ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьРезультатВыгрузки(Команда)
ТекущаяСтраница = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница;
Результат = Новый Массив;
Если ТекущаяСтраница = Элементы.СтраницаКонстанты Тогда
ЭлементФормы = Элементы.СписокКонстант;
Для Каждого Строка Из ЭлементФормы.ВыделенныеСтроки Цикл
ТекДанные = ЭлементФормы.ДанныеСтроки(Строка);
Результат.Добавить(Новый Структура("ФлагТипа, Данные", 1, ТекДанные.МетаПолноеИмя));
КонецЦикла;
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаНаборЗаписей Тогда
СписокИзмерений = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы);
ЭлементФормы = Элементы.СписокНаборовЗаписей;
Префикс = "СписокНаборовЗаписей";
Для Каждого Элемент Из ЭлементФормы.ВыделенныеСтроки Цикл
ТекДанные = Новый Структура();
Данные = ЭлементФормы.ДанныеСтроки(Элемент);
Для Каждого Имя Из СписокИзмерений Цикл
Если Данные.Свойство(Префикс + Имя) Тогда
ТекДанные.Вставить(Имя, Данные[Префикс + Имя]);
КонецЕсли;
КонецЦикла;
Результат.Добавить(Новый Структура("ФлагТипа, Данные", 2, ТекДанные));
КонецЦикла;
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаСписокСсылок Тогда
ЭлементФормы = Элементы.СписокСсылок;
Для Каждого Элемент Из ЭлементФормы.ВыделенныеСтроки Цикл
ТекДанные = ЭлементФормы.ДанныеСтроки(Элемент);
Результат.Добавить(Новый Структура("ФлагТипа, Данные", 3, ТекДанные.Ссылка));
КонецЦикла;
Иначе
Возврат;
КонецЕсли;
Если Результат.Количество() > 0 Тогда
Текст = ТекстСериализации(Результат);
ЗаголовокТекста = НСтр("ru = 'Результат стандартной выгрузки (РИБ)'");
Текст.Показать(ЗаголовокТекста);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьНомераСообщений(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ТекИмяФормы = ИмяЭтойФормы + "Форма.НомераСообщенийУзлаПланаОбмена";
ТекПараметры = Новый Структура("УзелОбменаСсылка", УзелОбменаСсылка);
ОткрытьФорму(ТекИмяФормы, ТекПараметры, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюКонстанты(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ДобавитьРегистрациюКонстантыВСписке();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюКонстанты(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
УдалитьРегистрациюКонстантыВСписке();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюСсылки(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ДобавитьРегистрациюВСписокСсылок();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюУдаленияОбъекта(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ДобавитьРегистрациюУдаленияОбъектаВСписокСсылок();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюСсылки(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
УдалитьРегистрациюИзСпискаСсылок();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюСсылкиПодбор(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ДобавитьРегистрациюВСписокСсылок(Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюСсылкиОтбор(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ДобавитьРегистрациюВСписокОтбор();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюСсылкиОтбор(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
УдалитьРегистрациюВСпискеОтбор();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюАвтоОбъектов(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ДобавитьРегистрациюВыделенныхОбъектов(Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюАвтоОбъектов(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
УдалитьРегистрациюВыделенныхОбъектов(Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюВсехОбъектов(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ДобавитьРегистрациюВыделенныхОбъектов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюВсехОбъектов(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
УдалитьРегистрациюВыделенныхОбъектов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюНабораЗаписейОтбор(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ДобавитьРегистрациюВНаборЗаписейОтбор();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюНабораЗаписей(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
УдалитьРегистрациюВНабореЗаписей();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюНабораЗаписейОтбор(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
УдалитьРегистрациюВНабореЗаписейОтбор();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьВсеДанные(Команда)
ЗаполнитьКоличествоРегистрацийВДереве();
ОбновитьСодержимоеСтраницы();
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюРезультатаЗапроса(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ОперацияСРезультатамиЗапроса(Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюРезультатаЗапроса(Команда)
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ОперацияСРезультатамиЗапроса(Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуНастроек(Команда)
ОткрытьФормуНастроекОбработки();
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьНомерСообщенияОбъекта(Команда)
Если Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаКонстанты Тогда
РедактироватьНомерСообщенияКонстанты();
ИначеЕсли Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаСписокСсылок Тогда
РедактироватьНомерСообщенияСсылки();
ИначеЕсли Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаНаборЗаписей Тогда
РедактироватьНомерСообщенияСписокНаборов()
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗарегистрироватьИОМИПредопределенные(Команда)
ЗаголовокВопроса = НСтр("ru = 'Подтверждение'");
ТекстВопроса = СтрЗаменить(
НСтр("ru = 'Зарегистрировать данные для восстановления подчиненного узла РИБ
|на узле ""%1""?'"),
"%1", УзелОбменаСсылка);
Оповещение = Новый ОписаниеОповещения("ЗарегистрироватьИОМЗавершение", ЭтотОбъект);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ПодтвердитьЗакрытиеФормыЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если Не РезультатВопроса = КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
ЗакрытьФормуБезусловно = Истина;
Закрыть();
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокСсылокНомерСообщения.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокСсылок.НеВыгружалось");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СветлоСерый);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не выгружалось'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокКонстантНомерСообщения.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокКонстант.НеВыгружалось");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СветлоСерый);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не выгружалось'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокНаборовЗаписейНомерСообщения.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокНаборовЗаписей.НеВыгружалось");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СветлоСерый);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не выгружалось'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоМетаданныхКоличествоИзмененийСтрокой.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоМетаданных.КоличествоИзменений");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ТемноСерый);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Нет изменений'"));
КонецПроцедуры
&НаКлиенте
Процедура ЗарегистрироватьИОМЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
СообщитьОРезультатахРегистрации(ЗарегистрироватьИОМИПредопределенныеНаСервере() );
ЗаполнитьКоличествоРегистрацийВДереве();
ОбновитьСодержимоеСтраницы();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбораЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат
КонецЕсли;
ВыбранноеЗначение = ДополнительныеПараметры.ВыбранноеЗначение;
Если Объект.ДоступнаРегистрацияАсинхронно Тогда
ПараметрыФоновогоЗадания = ПодготовитьПараметрыИзмененияРегистрации(ВыбранноеЗначение.ДействиеВыбора,
ДополнительныеПараметры.Свойство("БезУчетаАвторегистрации") И ДополнительныеПараметры.БезУчетаАвторегистрации,
Неопределено);
ПараметрыФоновогоЗадания.Вставить("ДанныеАдрес", ВыбранноеЗначение.ДанныеВыбора);
ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыФоновогоЗадания);
Иначе
СообщитьОРезультатахРегистрации(ИзменитьРегистрациюРезультатаЗапросаСервер(ВыбранноеЗначение.ДействиеВыбора, ВыбранноеЗначение.ДанныеВыбора));
ЗаполнитьКоличествоРегистрацийВДереве();
ОбновитьСодержимоеСтраницы();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьНомерСообщенияКонстанты()
ТекДанные = Элементы.СписокКонстант.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("РедактироватьНомерСообщенияКонстантыЗавершение", ЭтотОбъект, Новый Структура);
Оповещение.ДополнительныеПараметры.Вставить("МетаПолноеИмя", ТекДанные.МетаПолноеИмя);
НомерСообщения = ТекДанные.НомерСообщения;
Подсказка = НСтр("ru = 'Номер отправленного'");
ПоказатьВводЧисла(Оповещение, НомерСообщения, Подсказка);
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьНомерСообщенияКонстантыЗавершение(Знач НомерСообщения, Знач ДополнительныеПараметры) Экспорт
Если НомерСообщения = Неопределено Тогда
Возврат;
КонецЕсли;
СообщитьОРезультатахРегистрации(ИзменитьНомерСообщенияНаСервере(НомерСообщения, ДополнительныеПараметры.МетаПолноеИмя));
Элементы.СписокКонстант.Обновить();
ЗаполнитьКоличествоРегистрацийВДереве();
КонецПроцедуры
&НаКлиенте
Функция ДополнительныеПараметрыРедактированияНомераСообщения(Ссылка)
Возврат Новый Структура("Ссылка", Ссылка);
КонецФункции
&НаКлиенте
Процедура РедактироватьНомерСообщенияСсылки()
ТекДанные = ТекущиеДанныеСпискаСсылок();
Если ТекДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения(
"РедактироватьНомерСообщенияСсылкиЗавершение",
ЭтотОбъект,
ДополнительныеПараметрыРедактированияНомераСообщения(ТекДанные.Ссылка));
НомерСообщения = ТекДанные.НомерСообщения;
Подсказка = НСтр("ru = 'Номер отправленного'");
ПоказатьВводЧисла(Оповещение, НомерСообщения, Подсказка);
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьНомерСообщенияСсылкиЗавершение(Знач НомерСообщения, Знач ДополнительныеПараметры) Экспорт
Если НомерСообщения = Неопределено Тогда
Возврат;
КонецЕсли;
СообщитьОРезультатахРегистрации(ИзменитьНомерСообщенияНаСервере(НомерСообщения, ДополнительныеПараметры.Ссылка));
Элементы.СписокСсылок.Обновить();
ЗаполнитьКоличествоРегистрацийВДереве();
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьНомерСообщенияСписокНаборов()
ТекДанные = Элементы.СписокНаборовЗаписей.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("РедактироватьНомерСообщенияСписокНаборовЗавершение", ЭтотОбъект, Новый Структура);
ДанныеСтроки = Новый Структура;
ИменаКлючей = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы);
Для Каждого Имя Из ИменаКлючей Цикл
Если ТекДанные.Свойство("СписокНаборовЗаписей" + Имя) Тогда
ДанныеСтроки.Вставить(Имя, ТекДанные["СписокНаборовЗаписей" + Имя]);
КонецЕсли;
КонецЦикла;
Оповещение.ДополнительныеПараметры.Вставить("ДанныеСтроки", ДанныеСтроки);
НомерСообщения = ТекДанные.НомерСообщения;
Подсказка = НСтр("ru = 'Номер отправленного'");
ПоказатьВводЧисла(Оповещение, НомерСообщения, Подсказка);
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьНомерСообщенияСписокНаборовЗавершение(Знач НомерСообщения, Знач ДополнительныеПараметры) Экспорт
Если НомерСообщения = Неопределено Тогда
Возврат;
КонецЕсли;
СообщитьОРезультатахРегистрации(ИзменитьНомерСообщенияНаСервере(
НомерСообщения, ДополнительныеПараметры.ДанныеСтроки, СписокНаборовЗаписейИмяТаблицы));
Элементы.СписокНаборовЗаписей.Обновить();
ЗаполнитьКоличествоРегистрацийВДереве();
КонецПроцедуры
&НаКлиенте
Процедура НастроитьРедактированиеИзменений()
НастроитьРедактированиеИзмененийСервер(ТекущаяСтрокаМетаданных);
ТекущаяСтраницаСписка = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница;
Если ТекущаяСтраницаСписка <> Элементы.СтраницаКонстанты
И ТекущаяСтраницаСписка <> Элементы.СтраницаСписокСсылок
И ТекущаяСтраницаСписка <> Элементы.СтраницаНаборЗаписей Тогда
Элементы.ПоказатьРезультатВыгрузки.Доступность = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РазвернутьДеревоМетаданных()
Для Каждого Строка Из ДеревоМетаданных.ПолучитьЭлементы() Цикл
Элементы.ДеревоМетаданных.Развернуть( Строка.ПолучитьИдентификатор() );
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьЗаголовокНомеровСообщений()
Текст = НСтр("ru = '№ отправленного %1, № принятого %2'");
Данные = ПрочитатьНомераСообщений();
Текст = СтрЗаменить(Текст, "%1", Формат(Данные.НомерОтправленного, "ЧДЦ=0; ЧН="));
Текст = СтрЗаменить(Текст, "%2", Формат(Данные.НомерПринятого, "ЧДЦ=0; ЧН="));
Элементы.ФормаРедактироватьНомераСообщений.Заголовок = Текст;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбораУзлаОбмена()
ОбработкаВыбораУзлаОбменаСервер();
КонецПроцедуры
&НаСервере
Процедура ОбработкаВыбораУзлаОбменаСервер()
УстановитьЗаголовокНомеровСообщений();
ПрочитатьДеревоМетаданных();
ЗаполнитьКоличествоРегистрацийВДереве();
Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаПустая;
МетаПланОбменаУзла = УзелОбменаСсылка.Метаданные();
ЗаполнитьДополнительнуюИнформацию();
Если Объект.ДоступнаРаботаРИБ
И (ПланыОбмена.ГлавныйУзел() = Неопределено)
И МетаПланОбменаУзла.РаспределеннаяИнформационнаяБаза Тогда
Элементы.ФормаЗарегистрироватьИОМИПредопределенные.Видимость = Истина;
Иначе
Элементы.ФормаЗарегистрироватьИОМИПредопределенные.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СообщитьОРезультатахРегистрации(Результаты)
Команда = Результаты.Команда;
Если ТипЗнч(Команда) = Тип("Булево") Тогда
Если Команда Тогда
ЗаголовокПредупреждения = НСтр("ru = 'Регистрация изменений:'");
ТекстПредупреждения = НСтр("ru = 'Зарегистрировано %1 изменений из %2
|на узле ""%0""'");
Иначе
ЗаголовокПредупреждения = НСтр("ru = 'Отмена регистрации:'");
ТекстПредупреждения = НСтр("ru = 'Отменена регистрация %1 изменений
|на узле ""%0"".'");
КонецЕсли;
Иначе
ЗаголовокПредупреждения = НСтр("ru = 'Изменение номера сообщения:'");
ТекстПредупреждения = НСтр("ru = 'Номер сообщения изменен на %3
|у %1 объекта(ов)'");
КонецЕсли;
ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%0", УзелОбменаСсылка);
ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%1", Формат(Результаты.Успешно, "ЧН=0;"));
ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%2", Формат(Результаты.Всего, "ЧН=0;"));
ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%3", Команда);
Предупреждением = Результаты.Всего <> Результаты.Успешно;
Если Предупреждением Тогда
ПоказатьПредупреждение(, ТекстПредупреждения, , ЗаголовокПредупреждения);
Иначе
ПоказатьОповещениеПользователя(ЗаголовокПредупреждения,
ПолучитьНавигационнуюСсылку(УзелОбменаСсылка),
ТекстПредупреждения,
Элементы.СкрытаяКартинкаИнформация32.Картинка);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьФормуВыбораРезультатаЗапроса()
ТекущийОбъект = ЭтотОбъект();
ТекущийОбъект.ПрочитатьНастройки();
ЭтотОбъект(ТекущийОбъект);
Проверка = ТекущийОбъект.ПроверитьКорректностьНастроек();
ЭтотОбъект(ТекущийОбъект);
Если Проверка.НастройкаАдресВнешнейОбработкиЗапросов <> Неопределено Тогда
Возврат Неопределено;
ИначеЕсли ПустаяСтрока(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов) Тогда
Возврат Неопределено;
ИначеЕсли НРег(Прав(СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов), 4)) = ".epf" Тогда
Возврат Неопределено;
Иначе
Обработка = Обработки[ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов].Создать();
ИдентификаторФормы = ".Форма";
КонецЕсли;
Возврат Обработка.Метаданные().ПолноеИмя() + ИдентификаторФормы;
КонецФункции
&НаКлиенте
Процедура ДобавитьРегистрациюКонстантыВСписке()
ТекИмяФормы = ИмяЭтойФормы + "Форма.ВыборКонстанты";
ТекПараметры = Новый Структура();
ТекПараметры.Вставить("УзелОбмена",УзелОбменаСсылка);
ТекПараметры.Вставить("МассивИменМетаданных",СтруктураИменМетаданных.Константы);
ТекПараметры.Вставить("МассивПредставлений",СтруктураПредставленийМетаданных.Константы);
ТекПараметры.Вставить("МассивАвторегистрации",СтруктураАвторегистрацииМетаданных.Константы);
ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокКонстант);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюКонстантыВСписке()
Элемент = Элементы.СписокКонстант;
СписокПредставлений = Новый Массив;
СписокИмен = Новый Массив;
Для Каждого Строка Из Элемент.ВыделенныеСтроки Цикл
Данные = Элемент.ДанныеСтроки(Строка);
СписокПредставлений.Добавить(Данные.Наименование);
СписокИмен.Добавить(Данные.МетаПолноеИмя);
КонецЦикла;
Количество = СписокИмен.Количество();
Если Количество = 0 Тогда
Возврат;
ИначеЕсли Количество = 1 Тогда
Текст = НСтр("ru = 'Отменить регистрацию ""%2""
|на узле ""%1""?'");
Иначе
Текст = НСтр("ru = 'Отменить регистрацию выбранных констант
|на узле ""%1""?'");
КонецЕсли;
Текст = СтрЗаменить(Текст, "%1", УзелОбменаСсылка);
Текст = СтрЗаменить(Текст, "%2", СписокПредставлений[0]);
ЗаголовокВопроса = НСтр("ru = 'Подтверждение'");
Оповещение = Новый ОписаниеОповещения("УдалитьРегистрациюКонстантыВСпискеЗавершение", ЭтотОбъект, Новый Структура);
Оповещение.ДополнительныеПараметры.Вставить("СписокИмен", СписокИмен);
ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , ,ЗаголовокВопроса);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюКонстантыВСпискеЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
СообщитьОРезультатахРегистрации(УдалитьРегистрациюНаСервере(Истина, ДополнительныеПараметры.СписокИмен));
Элементы.СписокКонстант.Обновить();
ЗаполнитьКоличествоРегистрацийВДереве();
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюВСписокСсылок(ЭтоПодбор = Ложь)
ТекИмяФормы = СписокСсылокИмяТаблицы + ".ФормаВыбора";
ТекПараметры = Новый Структура();
ТекПараметры.Вставить("РежимВыбора", Истина);
ТекПараметры.Вставить("МножественныйВыбор", Истина);
ТекПараметры.Вставить("ЗакрыватьПриВыборе", ЭтоПодбор);
ТекПараметры.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы);
ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокСсылок);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюУдаленияОбъектаВСписокСсылок()
Ссылка = СсылкаДляУдаленияОбъекта();
ОбработкаВыбораДанных(Элементы.СписокСсылок, Ссылка);
КонецПроцедуры
&НаСервере
Функция СсылкаДляУдаленияОбъекта(Знач УникальныйИдентификатор = Неопределено)
Описание = ЭтотОбъект().ХарактеристикиПоМетаданным(СписокСсылокИмяТаблицы);
Если УникальныйИдентификатор = Неопределено Тогда
Возврат Описание.Менеджер.ПолучитьСсылку();
КонецЕсли;
Возврат Описание.Менеджер.ПолучитьСсылку(УникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура ДобавитьРегистрациюВСписокОтбор()
ТекИмяФормы = ИмяЭтойФормы + "Форма.ВыборОбъектовОтбором";
ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы",
Истина,
СписокСсылокИмяТаблицы);
ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокСсылок);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюВСпискеОтбор()
ТекИмяФормы = ИмяЭтойФормы + "Форма.ВыборОбъектовОтбором";
ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы",
Ложь,
СписокСсылокИмяТаблицы);
ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокСсылок);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюИзСпискаСсылок()
Элемент = Элементы.СписокСсылок;
СписокУдаления = Новый Массив;
Для Каждого Строка Из Элемент.ВыделенныеСтроки Цикл
Данные = Элемент.ДанныеСтроки(Строка);
СписокУдаления.Добавить(Данные.Ссылка);
КонецЦикла;
Количество = СписокУдаления.Количество();
Если Количество = 0 Тогда
Возврат;
ИначеЕсли Количество = 1 Тогда
Текст = НСтр("ru = 'Отменить регистрацию ""%2""
|на узле ""%1""?'");
Иначе
Текст = НСтр("ru = 'Отменить регистрацию выбранных объектов
|на узле ""%1""?'");
КонецЕсли;
Текст = СтрЗаменить(Текст, "%1", УзелОбменаСсылка);
Текст = СтрЗаменить(Текст, "%2", СписокУдаления[0]);
ЗаголовокВопроса = НСтр("ru = 'Подтверждение'");
Оповещение = Новый ОписаниеОповещения("УдалитьРегистрациюИзСпискаСсылокЗавершение", ЭтотОбъект, Новый Структура);
Оповещение.ДополнительныеПараметры.Вставить("СписокУдаления", СписокУдаления);
ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюИзСпискаСсылокЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
СообщитьОРезультатахРегистрации(УдалитьРегистрациюНаСервере(Истина, ДополнительныеПараметры.СписокУдаления));
Элементы.СписокСсылок.Обновить();
ЗаполнитьКоличествоРегистрацийВДереве();
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюВНаборЗаписейОтбор()
ТекИмяФормы = ИмяЭтойФормы + "Форма.ВыборОбъектовОтбором";
ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы",
Истина,
СписокНаборовЗаписейИмяТаблицы);
ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокНаборовЗаписей);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюВНабореЗаписей()
СтруктураДанных = "";
ИменаКлючей = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы);
Для Каждого Имя Из ИменаКлючей Цикл
СтруктураДанных = СтруктураДанных + "," + Имя;
КонецЦикла;
СтруктураДанных = Сред(СтруктураДанных, 2);
Данные = Новый Массив;
Элемент = Элементы.СписокНаборовЗаписей;
Для Каждого Строка Из Элемент.ВыделенныеСтроки Цикл
ТекДанные = Элемент.ДанныеСтроки(Строка);
ДанныеСтроки = Новый Структура;
Для Каждого Имя Из ИменаКлючей Цикл
ИмяКолонки = "СписокНаборовЗаписей" + Имя;
Если ТекДанные.Свойство(ИмяКолонки) Тогда
ДанныеСтроки.Вставить(Имя, ТекДанные[ИмяКолонки]);
КонецЕсли;
КонецЦикла;
Данные.Добавить(ДанныеСтроки);
КонецЦикла;
Если Данные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Выбор = Новый Структура();
Выбор.Вставить("ИмяТаблицы",СписокНаборовЗаписейИмяТаблицы);
Выбор.Вставить("ДанныеВыбора",Данные);
Выбор.Вставить("ДействиеВыбора",Ложь);
Выбор.Вставить("СтруктураПолей",СтруктураДанных);
ОбработкаВыбораДанных(Элементы.СписокНаборовЗаписей, Выбор);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюВНабореЗаписейОтбор()
ТекИмяФормы = ИмяЭтойФормы + "Форма.ВыборОбъектовОтбором";
ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы",
Ложь,
СписокНаборовЗаписейИмяТаблицы);
ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокНаборовЗаписей);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюВыделенныхОбъектов(БезУчетаАвторегистрации = Истина)
Данные = ПолучитьВыбранныеИменаМетаданных(БезУчетаАвторегистрации);
Количество = Данные.МетаИмена.Количество();
Если Количество = 0 Тогда
Данные = ПолучитьИменаМетаданныхТекущейСтроки(БезУчетаАвторегистрации);
КонецЕсли;
Текст = НСтр("ru = 'Зарегистрировать %1 для выгрузки на узле ""%2""?
|
|Изменение регистрации большого количества объектов может занять продолжительное время.'");
Текст = СтрЗаменить(Текст, "%1", Данные.Описание);
Текст = СтрЗаменить(Текст, "%2", УзелОбменаСсылка);
ЗаголовокВопроса = НСтр("ru = 'Подтверждение'");
Оповещение = Новый ОписаниеОповещения("ДобавитьРегистрациюВыделенныхОбъектовЗавершение", ЭтотОбъект, Новый Структура);
Оповещение.ДополнительныеПараметры.Вставить("МетаИмена", Данные.МетаИмена);
Оповещение.ДополнительныеПараметры.Вставить("БезУчетаАвторегистрации", БезУчетаАвторегистрации);
ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьРегистрациюВыделенныхОбъектовЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Если Объект.ДоступнаРегистрацияАсинхронно Тогда
ПараметрыФоновогоЗадания = ПодготовитьПараметрыИзмененияРегистрации(Истина, ДополнительныеПараметры.БезУчетаАвторегистрации,
ДополнительныеПараметры.МетаИмена);
ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыФоновогоЗадания);
Иначе
Результат = ДобавитьРегистрациюНаСервере(ДополнительныеПараметры.БезУчетаАвторегистрации,
ДополнительныеПараметры.МетаИмена);
ЗаполнитьКоличествоРегистрацийВДереве();
ОбновитьСодержимоеСтраницы();
СообщитьОРезультатахРегистрации(Результат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюВыделенныхОбъектов(БезУчетаАвторегистрации = Истина)
Данные = ПолучитьВыбранныеИменаМетаданных(БезУчетаАвторегистрации);
Количество = Данные.МетаИмена.Количество();
Если Количество = 0 Тогда
Данные = ПолучитьИменаМетаданныхТекущейСтроки(БезУчетаАвторегистрации);
КонецЕсли;
Текст = НСтр("ru = 'Отменить регистрацию %1 для выгрузки на узле ""%2""?
|
|Изменение регистрации большого количества объектов может занять продолжительное время.'");
ЗаголовокВопроса = НСтр("ru = 'Подтверждение'");
Текст = СтрЗаменить(Текст, "%1", Данные.Описание);
Текст = СтрЗаменить(Текст, "%2", УзелОбменаСсылка);
Оповещение = Новый ОписаниеОповещения("УдалитьРегистрациюВыделенныхОбъектовЗавершение", ЭтотОбъект, Новый Структура);
Оповещение.ДополнительныеПараметры.Вставить("МетаИмена", Данные.МетаИмена);
Оповещение.ДополнительныеПараметры.Вставить("БезУчетаАвторегистрации", БезУчетаАвторегистрации);
ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРегистрациюВыделенныхОбъектовЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Если Объект.ДоступнаРегистрацияАсинхронно Тогда
ПараметрыФоновогоЗадания = ПодготовитьПараметрыИзмененияРегистрации(Ложь, ДополнительныеПараметры.БезУчетаАвторегистрации,
ДополнительныеПараметры.МетаИмена);
ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыФоновогоЗадания);
Иначе
СообщитьОРезультатахРегистрации(УдалитьРегистрациюНаСервере(ДополнительныеПараметры.БезУчетаАвторегистрации,
ДополнительныеПараметры.МетаИмена));
ЗаполнитьКоличествоРегистрацийВДереве();
ОбновитьСодержимоеСтраницы();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыФоновогоЗадания)
ДлительнаяОперацияЗапущена = Истина;
ВидДлительнойОперации = ?(ПараметрыФоновогоЗадания.Команда, Истина, Ложь);
ПодключитьОбработчикОжидания("СтраницаДлительнойОперации", 0.1, Истина);
Результат = ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыФоновогоЗадания);
Если Результат = Неопределено Тогда
ДлительнаяОперацияЗапущена = Ложь;
ТекстПредупреждения = НСтр("ru = 'При запуске фонового задания с целью изменения регистрации произошла ошибка.'");
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат;
КонецЕсли;
ОбщийМодульДлительныеОперацииКлиент = ОбщийМодульДлительныеОперацииКлиент();
Если Результат.Статус = "Выполняется" Тогда
ПараметрыОжидания = ОбщийМодульДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ПараметрыОжидания.ВыводитьСообщения = Истина;
ОповещениеОЗавершении = Новый ОписаниеОповещения("ЗавершениеФоновогоЗадания", ЭтотОбъект);
ОбщийМодульДлительныеОперацииКлиент.ОжидатьЗавершение(Результат, ОповещениеОЗавершении, ПараметрыОжидания);
Иначе
ФоновоеЗаданиеРезультатВыполнения = Результат;
ПодключитьОбработчикОжидания("РезультатВыполненияФоновогоЗадания", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтраницаДлительнойОперации()
Если НЕ ДлительнаяОперацияЗапущена Тогда
Возврат;
КонецЕсли;
Если ВидДлительнойОперации Тогда
СтатусОперации = НСтр("ru = 'Выполняется регистрация изменений. Пожалуйста, подождите.'");
Иначе
СтатусОперации = НСтр("ru = 'Выполняется отмена регистрации изменений. Пожалуйста, подождите.'");
КонецЕсли;
Элементы.СтатусДлительнойОперации.Заголовок = СтатусОперации;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.Ожидание;
КонецПроцедуры
&НаКлиенте
Процедура ЗавершениеФоновогоЗадания(Результат, ДополнительныеПараметры) Экспорт
ФоновоеЗаданиеРезультатВыполнения = Результат;
РезультатВыполненияФоновогоЗадания();
КонецПроцедуры
&НаКлиенте
Процедура РезультатВыполненияФоновогоЗадания()
ФоновоеЗаданиеПолучитьРезультатНаСервере();
ДлительнаяОперацияЗапущена = Ложь;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.Основная;
ТекущийЭлемент = Элементы.ДеревоМетаданных;
Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СообщениеОбОшибке;
Сообщение.Сообщить();
КонецЕсли;
Если Не ФоновоеЗаданиеРезультатВыполнения = Неопределено Тогда
Если ФоновоеЗаданиеРезультатВыполнения.Свойство("ДополнительныеДанныеРезультата")
И ФоновоеЗаданиеРезультатВыполнения.ДополнительныеДанныеРезультата.Свойство("Команда") Тогда
СообщитьОРезультатахРегистрации(ФоновоеЗаданиеРезультатВыполнения.ДополнительныеДанныеРезультата);
ЗаполнитьКоличествоРегистрацийВДереве();
ОбновитьСодержимоеСтраницы();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыФоновогоЗадания)
МодульДлительныеОперации = ОбщийМодульДлительныеОперации();
ПараметрыВыполнения = МодульДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.ДополнительныйРезультат = Ложь;
Если ПараметрыФоновогоЗадания.Свойство("ДанныеАдрес") Тогда
Результат = ПолучитьИзВременногоХранилища(ПараметрыФоновогоЗадания.ДанныеАдрес);
Результат= Результат[Результат.ВГраница()];
Данные = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка");
ПараметрыФоновогоЗадания.Вставить("Данные", Данные);
КонецЕсли;
ИмяПроцедуры = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя() + ".МодульОбъекта.ВыполнитьИзменениеРегистрации";
Результат = МодульДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыФоновогоЗадания, ПараметрыВыполнения);
ФоновоеЗаданиеИдентификатор = Результат.ИдентификаторЗадания;
ФоновоеЗаданиеАдресХранилища = Результат.АдресРезультата;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ФоновоеЗаданиеПолучитьРезультатНаСервере()
Если ФоновоеЗаданиеРезультатВыполнения <> Неопределено Тогда
ФоновоеЗаданиеРезультатВыполнения.Вставить("ДополнительныеДанныеРезультата", Новый Структура);
СообщениеОбОшибке = "";
ТиповоеПредставлениеОшибки = НСтр("ru = 'При изменении регистрации произошла ошибка. Подробности см. в журнале регистрации'");
Если ФоновоеЗаданиеРезультатВыполнения.Статус = "Ошибка" Тогда
СообщениеОбОшибке = ФоновоеЗаданиеРезультатВыполнения.ПодробноеПредставлениеОшибки;
Иначе
РезультатВыполненияВФоне = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища);
Если РезультатВыполненияВФоне = Неопределено Тогда
СообщениеОбОшибке = ТиповоеПредставлениеОшибки;
Иначе
ФоновоеЗаданиеРезультатВыполнения.ДополнительныеДанныеРезультата = РезультатВыполненияВФоне;
УдалитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ФоновоеЗаданиеАдресХранилища = Неопределено;
ФоновоеЗаданиеИдентификатор = Неопределено;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗавершитьВыполнениеДлительнойОперации(ИдентификаторЗадания)
МодульДлительныеОперации = ОбщийМодульДлительныеОперации();
МодульДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания);
КонецПроцедуры
&НаКлиенте
Функция ОбщийМодульДлительныеОперацииКлиент()
Модуль = Вычислить("ДлительныеОперацииКлиент");
Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
ВызватьИсключение НСтр("ru = 'Общий модуль ""ДлительныеОперацииКлиент"" не найден.'");
КонецЕсли;
Возврат Модуль;
КонецФункции
&НаСервереБезКонтекста
Функция ОбщийМодульДлительныеОперации()
Если Метаданные.ОбщиеМодули.Найти("ДлительныеОперации") <> Неопределено Тогда
Модуль = Вычислить("ДлительныеОперации");
Иначе
Модуль = Неопределено;
КонецЕсли;
Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
ВызватьИсключение НСтр("ru = 'Общий модуль ""ДлительныеОперации"" не найден.'");
КонецЕсли;
Возврат Модуль;
КонецФункции
&НаКлиенте
Функция ДополнительныеПараметрыОбработкиВыбораДанных()
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Действие");
ДополнительныеПараметры.Вставить("ТаблицаФормы");
ДополнительныеПараметры.Вставить("Данные");
ДополнительныеПараметры.Вставить("ИмяТаблицы");
ДополнительныеПараметры.Вставить("Ссылка");
Возврат ДополнительныеПараметры;
КонецФункции
&НаКлиенте
Процедура ОбработкаВыбораДанных(ТаблицаФормы, ВыбранноеЗначение)
Ссылка = Неопределено;
Тип = ТипЗнч(ВыбранноеЗначение);
Если Тип = Тип("Структура") Тогда
Если Не (ВыбранноеЗначение.Свойство("ИмяТаблицы")
И ВыбранноеЗначение.Свойство("ДействиеВыбора")
И ВыбранноеЗначение.Свойство("ДанныеВыбора")) Тогда
Возврат;
КонецЕсли;
ИмяТаблицы = ВыбранноеЗначение.ИмяТаблицы;
Действие = ВыбранноеЗначение.ДействиеВыбора;
Данные = ВыбранноеЗначение.ДанныеВыбора;
Иначе
ИмяТаблицы = Неопределено;
Действие = Истина;
Если Тип = Тип("Массив") Тогда
Данные = ВыбранноеЗначение;
Иначе
Данные = Новый Массив;
Данные.Добавить(ВыбранноеЗначение);
КонецЕсли;
Если Данные.Количество() = 1 Тогда
Ссылка = Данные[0];
КонецЕсли;
КонецЕсли;
Если Действие Тогда
Результат = ДобавитьРегистрациюНаСервере(Истина, Данные, ИмяТаблицы);
ТаблицаФормы.Обновить();
ЗаполнитьКоличествоРегистрацийВДереве();
СообщитьОРезультатахРегистрации(Результат);
ТаблицаФормы.ТекущаяСтрока = Ссылка;
Возврат;
КонецЕсли;
Если Ссылка = Неопределено Тогда
Текст = НСтр("ru = 'Отменить регистрацию выбранных объектов
|на узле ""%1?'");
Иначе
Текст = НСтр("ru = 'Отменить регистрацию ""%2""
|на узле ""%1?'");
КонецЕсли;
Текст = СтрЗаменить(Текст, "%1", УзелОбменаСсылка);
Текст = СтрЗаменить(Текст, "%2", Ссылка);
ЗаголовокВопроса = НСтр("ru = 'Подтверждение'");
ДополнительныеПараметры = ДополнительныеПараметрыОбработкиВыбораДанных();
ДополнительныеПараметры.Действие = Действие;
ДополнительныеПараметры.ТаблицаФормы = ТаблицаФормы;
ДополнительныеПараметры.Данные = Данные;
ДополнительныеПараметры.ИмяТаблицы = ИмяТаблицы;
ДополнительныеПараметры.Ссылка = Ссылка;
Оповещение = Новый ОписаниеОповещения("ОбработкаВыбораДанныхЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , ,ЗаголовокВопроса);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбораДанныхЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Если Объект.ДоступнаРегистрацияАсинхронно Тогда
ПараметрыФоновогоЗадания = ПодготовитьПараметрыИзмененияРегистрации(Ложь, Истина, ДополнительныеПараметры.Данные,
ДополнительныеПараметры.ИмяТаблицы);
ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыФоновогоЗадания);
Иначе
Результат = УдалитьРегистрациюНаСервере(Истина, ДополнительныеПараметры.Данные, ДополнительныеПараметры.ИмяТаблицы);
ДополнительныеПараметры.ТаблицаФормы.Обновить();
ЗаполнитьКоличествоРегистрацийВДереве();
СообщитьОРезультатахРегистрации(Результат);
КонецЕсли;
ДополнительныеПараметры.ТаблицаФормы.ТекущаяСтрока = ДополнительныеПараметры.Ссылка;
КонецПроцедуры
&НаСервере
Процедура ОбновитьСодержимоеСтраницы(Страница = Неопределено)
ТекСтр = ?(Страница = Неопределено, Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница, Страница);
Если ТекСтр = Элементы.СтраницаСписокСсылок Тогда
Элементы.СписокСсылок.Обновить();
ИначеЕсли ТекСтр = Элементы.СтраницаКонстанты Тогда
Элементы.СписокКонстант.Обновить();
ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда
Элементы.СписокНаборовЗаписей.Обновить();
ИначеЕсли ТекСтр = Элементы.СтраницаПустая Тогда
Строка = Элементы.ДеревоМетаданных.ТекущаяСтрока;
Если Строка <> Неопределено Тогда
Данные = ДеревоМетаданных.НайтиПоИдентификатору(Строка);
Если Данные <> Неопределено Тогда
НастроитьПустуюСтраницу(Данные.Наименование, Данные.МетаПолноеИмя);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПолучитьТекущийОбъектРедактирования()
ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница;
Если ТекСтр = Элементы.СтраницаСписокСсылок Тогда
Данные = ТекущиеДанныеСпискаСсылок();
Если Данные <> Неопределено Тогда
Возврат Данные.Ссылка;
КонецЕсли;
ИначеЕсли ТекСтр = Элементы.СтраницаКонстанты Тогда
Данные = Элементы.СписокКонстант.ТекущиеДанные;
Если Данные <> Неопределено Тогда
Возврат Данные.МетаПолноеИмя;
КонецЕсли;
ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда
Данные = Элементы.СписокНаборовЗаписей.ТекущиеДанные;
Если Данные <> Неопределено Тогда
Результат = Новый Структура;
Измерения = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы);
Для Каждого Имя Из Измерения Цикл
Если Данные.Свойство("СписокНаборовЗаписей" + Имя) Тогда
Результат.Вставить(Имя, Данные["СписокНаборовЗаписей" + Имя]);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Результат;
КонецЕсли;
Возврат Неопределено;
КонецФункции
&НаКлиенте
Функция ТекущиеДанныеСпискаСсылок()
Возврат Элементы.СписокСсылок.ТекущиеДанные;
КонецФункции
&НаКлиенте
Процедура ОткрытьФормуНастроекОбработки()
ТекИмяФормы = ИмяЭтойФормы + "Форма.Настройки";
ОткрытьФорму(ТекИмяФормы, , ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОперацияСРезультатамиЗапроса(КомандаОперации)
ТекИмяФормы = ПолучитьФормуВыбораРезультатаЗапроса();
Если ТекИмяФормы <> Неопределено Тогда
Если КомандаОперации Тогда
Текст = НСтр("ru = 'Регистрация изменений результата запроса'");
Иначе
Текст = НСтр("ru = 'Отмена регистрации изменений результата запроса'");
КонецЕсли;
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", Текст);
СтруктураПараметров.Вставить("ДействиеВыбора", КомандаОперации);
СтруктураПараметров.Вставить("РежимВыбора", Истина);
СтруктураПараметров.Вставить("ЗакрыватьПриВыборе", Ложь);
Если Не ЗначениеЗаполнено(КлючУникальностиФормыВыбораРезультатаЗапроса) Тогда
КлючУникальностиФормыВыбораРезультатаЗапроса = Новый УникальныйИдентификатор;
КонецЕсли;
ОткрытьФорму(ТекИмяФормы, СтруктураПараметров, ЭтотОбъект, КлючУникальностиФормыВыбораРезультатаЗапроса);
Возврат;
КонецЕсли;
Текст = НСтр("ru = 'В настройках не указана обработка для выполнения запросов.
|Настроить сейчас?'");
ЗаголовокВопроса = НСтр("ru = 'Настройки'");
Оповещение = Новый ОписаниеОповещения("ОперацияСРезультатамиЗапросаЗавершение", ЭтотОбъект);
ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса);
КонецПроцедуры
&НаКлиенте
Процедура ОперацияСРезультатамиЗапросаЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
ОткрытьФормуНастроекОбработки();
КонецПроцедуры
&НаСервере
Функция ОбработатьКавычкиВСтроке(Строка)
Возврат СтрЗаменить(Строка, """", """""");
КонецФункции
&НаСервере
Функция ЭтотОбъект(ТекущийОбъект = Неопределено)
Если ТекущийОбъект = Неопределено Тогда
Возврат РеквизитФормыВЗначение("Объект");
КонецЕсли;
ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект");
Возврат Неопределено;
КонецФункции
&НаСервере
Функция ПолучитьИмяФормы(ТекущийОбъект = Неопределено)
Возврат ЭтотОбъект().ПолучитьИмяФормы(ТекущийОбъект);
КонецФункции
&НаСервере
Процедура ИзменениеПометки(Строка)
ЭлементДанных = ДеревоМетаданных.НайтиПоИдентификатору(Строка);
ЭтотОбъект().ИзменениеПометки(ЭлементДанных);
КонецПроцедуры
&НаСервере
Процедура ПрочитатьДеревоМетаданных()
Данные = ЭтотОбъект().СформироватьСтруктуруМетаданных(УзелОбменаСсылка);
МетаДерево = Данные.Дерево;
Для Каждого ЭлементСписка Из Объект.ИменаСкрываемыхМетаданных Цикл
УдалитьСтрокиДереваЗначенийМетаданных(ЭлементСписка.Значение, МетаДерево.Строки);
КонецЦикла;
ЗначениеВРеквизитФормы(МетаДерево, "ДеревоМетаданных");
СтруктураАвторегистрацииМетаданных = Данные.СтруктураАвторегистрации;
СтруктураПредставленийМетаданных = Данные.СтруктураПредставлений;
СтруктураИменМетаданных = Данные.СтруктураИмен;
КонецПроцедуры
&НаСервере
Процедура УдалитьСтрокиДереваЗначенийМетаданных(Знач МетаПолноеИмя, СтрокиДерева)
Если ПустаяСтрока(МетаПолноеИмя) Тогда
Возврат;
КонецЕсли;
Фильтр = Новый Структура("МетаПолноеИмя", МетаПолноеИмя);
Для Каждого СтрокаУдаления Из СтрокиДерева.НайтиСтроки(Фильтр, Ложь) Цикл
СтрокиДерева.Удалить(СтрокаУдаления);
Если СтрокиДерева.Количество() = 0 Тогда
РодительскаяСтрока = СтрокиДерева.Родитель;
Если РодительскаяСтрока.Родитель <> Неопределено Тогда
РодительскаяСтрока.Родитель.Строки.Удалить(РодительскаяСтрока);
Возврат;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаДерева Из СтрокиДерева Цикл
УдалитьСтрокиДереваЗначенийМетаданных(МетаПолноеИмя, СтрокаДерева.Строки);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ФорматироватьКоличествоИзменений(Строка)
Строка.КоличествоИзмененийСтрокой = Формат(Строка.КоличествоИзменений, "ЧН=0;") + " / " + Формат(Строка.КоличествоНеВыгруженных, "ЧН=0;");
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьКоличествоРегистрацийВДереве()
Данные = ЭтотОбъект().ПолучитьКоличествоИзменений(СтруктураИменМетаданных, УзелОбменаСсылка);
Фильтр = Новый Структура("МетаПолноеИмя, УзелОбмена", Неопределено, УзелОбменаСсылка);
Нули = Новый Структура("КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных", 0,0,0);
Для Каждого Корень Из ДеревоМетаданных.ПолучитьЭлементы() Цикл
СуммаКорень = Новый Структура("КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных", 0,0,0);
Для Каждого Группа Из Корень.ПолучитьЭлементы() Цикл
СуммаГруппа = Новый Структура("КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных", 0,0,0);
СписокУзлов = Группа.ПолучитьЭлементы();
Если СписокУзлов.Количество() = 0 И СтруктураИменМетаданных.Свойство(Группа.МетаПолноеИмя) Тогда
Для Каждого МетаИмя Из СтруктураИменМетаданных[Группа.МетаПолноеИмя] Цикл
Фильтр.МетаПолноеИмя = МетаИмя;
Найдено = Данные.НайтиСтроки(Фильтр);
Если Найдено.Количество() > 0 Тогда
Строка = Найдено[0];
СуммаГруппа.КоличествоИзменений = СуммаГруппа.КоличествоИзменений + Строка.КоличествоИзменений;
СуммаГруппа.КоличествоВыгруженных = СуммаГруппа.КоличествоВыгруженных + Строка.КоличествоВыгруженных;
СуммаГруппа.КоличествоНеВыгруженных = СуммаГруппа.КоличествоНеВыгруженных + Строка.КоличествоНеВыгруженных;
КонецЕсли;
КонецЦикла;
Иначе
Для Каждого Узел Из СписокУзлов Цикл
Фильтр.МетаПолноеИмя = Узел.МетаПолноеИмя;
Найдено = Данные.НайтиСтроки(Фильтр);
Если Найдено.Количество() > 0 Тогда
Строка = Найдено[0];
ЗаполнитьЗначенияСвойств(Узел, Строка, "КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных");
СуммаГруппа.КоличествоИзменений = СуммаГруппа.КоличествоИзменений + Строка.КоличествоИзменений;
СуммаГруппа.КоличествоВыгруженных = СуммаГруппа.КоличествоВыгруженных + Строка.КоличествоВыгруженных;
СуммаГруппа.КоличествоНеВыгруженных = СуммаГруппа.КоличествоНеВыгруженных + Строка.КоличествоНеВыгруженных;
Иначе
ЗаполнитьЗначенияСвойств(Узел, Нули);
КонецЕсли;
ФорматироватьКоличествоИзменений(Узел);
КонецЦикла;
КонецЕсли;
ЗаполнитьЗначенияСвойств(Группа, СуммаГруппа);
СуммаКорень.КоличествоИзменений = СуммаКорень.КоличествоИзменений + Группа.КоличествоИзменений;
СуммаКорень.КоличествоВыгруженных = СуммаКорень.КоличествоВыгруженных + Группа.КоличествоВыгруженных;
СуммаКорень.КоличествоНеВыгруженных = СуммаКорень.КоличествоНеВыгруженных + Группа.КоличествоНеВыгруженных;
ФорматироватьКоличествоИзменений(Группа);
КонецЦикла;
ЗаполнитьЗначенияСвойств(Корень, СуммаКорень);
ФорматироватьКоличествоИзменений(Корень);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ИзменитьРегистрациюРезультатаЗапросаСервер(Команда, Адрес)
Результат = ПолучитьИзВременногоХранилища(Адрес);
Результат= Результат[Результат.ВГраница()];
Данные = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка");
Если Команда Тогда
Возврат ДобавитьРегистрациюНаСервере(Истина, Данные);
КонецЕсли;
Возврат УдалитьРегистрациюНаСервере(Истина, Данные);
КонецФункции
&НаСервере
Функция КонтрольСсылокДляВыбораЗапросом(Адрес)
Результат = ?(Адрес = Неопределено, Неопределено, ПолучитьИзВременногоХранилища(Адрес));
Если ТипЗнч(Результат) = Тип("Массив") Тогда
Результат = Результат[Результат.ВГраница()];
Если Результат.Колонки.Найти("Ссылка") = Неопределено Тогда
Возврат НСтр("ru = 'В последнем результате запроса отсутствует колонка ""Ссылка""'");
КонецЕсли;
Иначе
Возврат НСтр("ru = 'Ошибка получения данных результата запроса'");
КонецЕсли;
Возврат "";
КонецФункции
&НаСервере
Процедура НастроитьРедактированиеИзмененийСервер(ТекущаяСтрока)
Если ТекущаяСтрока = Неопределено Тогда
ИмяТаблицы = "";
Наименование = ДеревоМетаданных.ПолучитьЭлементы()[0].Наименование;
ТекущийОбъект = Неопределено;
Иначе
Данные = ДеревоМетаданных.НайтиПоИдентификатору(ТекущаяСтрока);
Если Данные = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяТаблицы = Данные.МетаПолноеИмя;
Наименование = Данные.Наименование;
ТекущийОбъект = ЭтотОбъект();
КонецЕсли;
Если ПустаяСтрока(ИмяТаблицы) Тогда
Мета = Неопределено;
Иначе
Мета = ТекущийОбъект.МетаданныеПоПолномуИмени(ИмяТаблицы);
КонецЕсли;
Если Мета = Неопределено Тогда
НастроитьПустуюСтраницу(Наименование, ИмяТаблицы);
НовСтраница = Элементы.СтраницаПустая;
ИначеЕсли Мета = Метаданные.Константы Тогда
НастроитьСписокКонстант();
НовСтраница = Элементы.СтраницаКонстанты;
ИначеЕсли ТипЗнч(Мета) = Тип("КоллекцияОбъектовМетаданных") Тогда
НастроитьПустуюСтраницу(Наименование, ИмяТаблицы);
НовСтраница = Элементы.СтраницаПустая;
ИначеЕсли Метаданные.Константы.Содержит(Мета) Тогда
НастроитьСписокКонстант(ИмяТаблицы, Наименование);
НовСтраница = Элементы.СтраницаКонстанты;
ИначеЕсли Метаданные.Справочники.Содержит(Мета)
Или Метаданные.Документы.Содержит(Мета)
Или Метаданные.ПланыВидовХарактеристик.Содержит(Мета)
Или Метаданные.ПланыСчетов.Содержит(Мета)
Или Метаданные.ПланыВидовРасчета.Содержит(Мета)
Или Метаданные.БизнесПроцессы.Содержит(Мета)
Или Метаданные.Задачи.Содержит(Мета) Тогда
НастроитьСписокСсылок(ИмяТаблицы, Наименование);
НовСтраница = Элементы.СтраницаСписокСсылок;
Иначе
Измерения = ТекущийОбъект.ИзмеренияНабораЗаписей(ИмяТаблицы);
Если Измерения <> Неопределено Тогда
НастроитьНаборЗаписей(ИмяТаблицы, Измерения, Наименование);
НовСтраница = Элементы.СтраницаНаборЗаписей;
Иначе
НастроитьПустуюСтраницу(Наименование, ИмяТаблицы);
НовСтраница = Элементы.СтраницаПустая;
КонецЕсли;
КонецЕсли;
Элементы.СтраницаКонстанты.Видимость = Ложь;
Элементы.СтраницаСписокСсылок.Видимость = Ложь;
Элементы.СтраницаНаборЗаписей.Видимость = Ложь;
Элементы.СтраницаПустая.Видимость = Ложь;
Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = НовСтраница;
НовСтраница.Видимость = Истина;
НастроитьВидимостьКомандОбщегоМеню();
КонецПроцедуры
&НаСервере
Процедура НастроитьСписокСсылок(ИмяТаблицы, Наименование)
СвойстваСписка = СтруктураСвойствДинамическогоСписка();
СвойстваСписка.ДинамическоеСчитываниеДанных = Истина;
СвойстваСписка.ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаИзменений.Ссылка КАК Ссылка,
| ТаблицаИзменений.НомерСообщения КАК НомерСообщения,
| ВЫБОР
| КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК НеВыгружалось,
| ОсновнаяТаблица.Ссылка КАК СсылкаОбъекта
|ИЗ
| &ИмяТаблицыМетаданныхИзменения КАК ТаблицаИзменений
| ЛЕВОЕ СОЕДИНЕНИЕ &ИмяТаблицыМетаданных КАК ОсновнаяТаблица
| ПО ТаблицаИзменений.Ссылка = ОсновнаяТаблица.Ссылка
|ГДЕ
| ТаблицаИзменений.Узел = &ВыбранныйУзел";
СвойстваСписка.ТекстЗапроса = СтрЗаменить(СвойстваСписка.ТекстЗапроса, "&ИмяТаблицыМетаданныхИзменения", ИмяТаблицы + ".Изменения");
СвойстваСписка.ТекстЗапроса = СтрЗаменить(СвойстваСписка.ТекстЗапроса, "&ИмяТаблицыМетаданных", ИмяТаблицы);
УстановитьСвойстваДинамическогоСписка(Элементы.СписокСсылок, СвойстваСписка);
СписокСсылок.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка);
СписокСсылокИмяТаблицы = ИмяТаблицы;
Мета = ЭтотОбъект().МетаданныеПоПолномуИмени(ИмяТаблицы);
ТекЗаголовок = Мета.ПредставлениеОбъекта;
Если ПустаяСтрока(ТекЗаголовок) Тогда
ТекЗаголовок = Наименование;
КонецЕсли;
Элементы.СписокСсылокСсылкаПредставление.Заголовок = ТекЗаголовок;
КонецПроцедуры
&НаСервере
Процедура НастроитьСписокКонстант(ИмяТаблицы = Неопределено, Наименование = "")
Если ИмяТаблицы = Неопределено Тогда
Имена = СтруктураИменМетаданных.Константы;
Представления = СтруктураПредставленийМетаданных.Константы;
Авторегистрация = СтруктураАвторегистрацииМетаданных.Константы;
Иначе
Имена = Новый Массив;
Имена.Добавить(ИмяТаблицы);
Представления = Новый Массив;
Представления.Добавить(Наименование);
Индекс = СтруктураИменМетаданных.Константы.Найти(ИмяТаблицы);
Авторегистрация = Новый Массив;
Авторегистрация.Добавить(СтруктураАвторегистрацииМетаданных.Константы[Индекс]);
КонецЕсли;
ШаблонТекстаЗапроса =
"ВЫБРАТЬ
| &ИндексКартинкиАвторегистрация КАК ИндексКартинкиАвторегистрация,
| 2 КАК ИндексКартинки,
| ""&ПользовательскоеПредставлениеКонстанты"" КАК Наименование,
| ""&ИмяТаблицыМетаданныхПредставление"" КАК МетаПолноеИмя,
| ТаблицаИзменений.НомерСообщения КАК НомерСообщения,
| ВЫБОР
| КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК НеВыгружалось
|ИЗ
| &ИмяТаблицыМетаданных КАК ТаблицаИзменений
|ГДЕ
| ТаблицаИзменений.Узел = &ВыбранныйУзел";
Текст = "";
Для Индекс = 0 По Имена.ВГраница() Цикл
Имя = Имена[Индекс];
Если НЕ ПустаяСтрока(Текст) Тогда
Текст = Текст + Символы.ПС + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + Символы.ПС;
КонецЕсли;
ТекстПодзапроса = СтрЗаменить(ШаблонТекстаЗапроса, "&ИндексКартинкиАвторегистрация", Формат(Авторегистрация[Индекс], "ЧН=; ЧГ="));
ТекстПодзапроса = СтрЗаменить(ТекстПодзапроса, "&ПользовательскоеПредставлениеКонстанты", ОбработатьКавычкиВСтроке(Представления[Индекс]));
ТекстПодзапроса = СтрЗаменить(ТекстПодзапроса, "&ИмяТаблицыМетаданныхПредставление", Имя);
ТекстПодзапроса = СтрЗаменить(ТекстПодзапроса, "&ИмяТаблицыМетаданных", ПодставитьПараметрыВСтроку("%1.Изменения", Имя));
Текст = Текст + ТекстПодзапроса;
КонецЦикла;
СвойстваСписка = СтруктураСвойствДинамическогоСписка();
СвойстваСписка.ДинамическоеСчитываниеДанных = Истина;
ИтоговыйТекстЗапроса =
"ВЫБРАТЬ
| ИндексКартинкиАвторегистрация,
| ИндексКартинки,
| МетаПолноеИмя,
| НеВыгружалось,
| Наименование,
| НомерСообщения
|{ВЫБРАТЬ
| ИндексКартинкиАвторегистрация,
| ИндексКартинки,
| Наименование,
| МетаПолноеИмя,
| НомерСообщения,
| НеВыгружалось}
|ИЗ
| &ТекстВложенногоЗапроса КАК Данные
|{ГДЕ
| Наименование,
| НомерСообщения,
| НеВыгружалось}";
ИтоговыйТекстЗапроса = СтрЗаменить(ИтоговыйТекстЗапроса, "&ТекстВложенногоЗапроса", ПодставитьПараметрыВСтроку("(%1)", Текст));
СвойстваСписка.ТекстЗапроса = ИтоговыйТекстЗапроса;
УстановитьСвойстваДинамическогоСписка(Элементы.СписокКонстант, СвойстваСписка);
ЭлементыСписка = СписокКонстант.Порядок.Элементы;
Если ЭлементыСписка.Количество() = 0 Тогда
Элемент = ЭлементыСписка.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
Элемент.Поле = Новый ПолеКомпоновкиДанных("Наименование");
Элемент.Использование = Истина;
КонецЕсли;
СписокКонстант.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка);
КонецПроцедуры
&НаСервере
Процедура НастроитьПустуюСтраницу(Наименование, ИмяТаблицы = Неопределено)
Если ИмяТаблицы = Неопределено Тогда
ТекстКоличеств = "";
Иначе
Дерево = РеквизитФормыВЗначение("ДеревоМетаданных");
Строка = Дерево.Строки.Найти(ИмяТаблицы, "МетаПолноеИмя", Истина);
Если Строка <> Неопределено Тогда
ТекстКоличеств = НСтр("ru = 'Зарегистрировано объектов: %1
|Выгружено объектов: %2
|Не выгружено объектов: %3'");
ТекстКоличеств = СтрЗаменить(ТекстКоличеств, "%1", Формат(Строка.КоличествоИзменений, "ЧДЦ=0; ЧН="));
ТекстКоличеств = СтрЗаменить(ТекстКоличеств, "%2", Формат(Строка.КоличествоВыгруженных, "ЧДЦ=0; ЧН="));
ТекстКоличеств = СтрЗаменить(ТекстКоличеств, "%3", Формат(Строка.КоличествоНевыгруженных, "ЧДЦ=0; ЧН="));
КонецЕсли;
КонецЕсли;
Текст = НСтр("ru = '%1.
|
|%2
|Для регистрации или отмены регистрации обмена данными на узле
|""%3""
|выберите тип объекта слева в дереве метаданных и воспользуйтесь
|командами ""Зарегистрировать"" или ""Отменить регистрацию""'");
Текст = СтрЗаменить(Текст, "%1", Наименование);
Текст = СтрЗаменить(Текст, "%2", ТекстКоличеств);
Текст = СтрЗаменить(Текст, "%3", УзелОбменаСсылка);
Элементы.ДекорацияПустаяСтраница.Заголовок = Текст;
КонецПроцедуры
&НаСервере
Процедура НастроитьНаборЗаписей(ИмяТаблицы, Измерения, Наименование)
ТекстВыбора = "";
Префикс = "СписокНаборовЗаписей";
Для Каждого Строка Из Измерения Цикл
Имя = Строка.Имя;
ТекстВыбора = ТекстВыбора + ",ТаблицаИзменений." + Имя + " КАК " + Префикс + Имя + Символы.ПС;
Строка.Имя = Префикс + Имя;
КонецЦикла;
СвойстваСписка = СтруктураСвойствДинамическогоСписка();
СвойстваСписка.ДинамическоеСчитываниеДанных = Истина;
СвойстваСписка.ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаИзменений.НомерСообщения КАК НомерСообщения,
| ВЫБОР
| КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК НеВыгружалось
|
| " + ТекстВыбора + "
|ИЗ
| " + ИмяТаблицы + ".Изменения КАК ТаблицаИзменений
|ГДЕ
| ТаблицаИзменений.Узел = &ВыбранныйУзел";
УстановитьСвойстваДинамическогоСписка(Элементы.СписокНаборовЗаписей, СвойстваСписка);
СписокНаборовЗаписей.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка);
ЭтотОбъект().ДобавитьКолонкиВТаблицуФормы(
Элементы.СписокНаборовЗаписей,
"НомерСообщения, НеВыгружалось,
|Порядок, Отбор, Группировка, СтандартнаяКартинка, Параметры, УсловноеОформление",
Измерения,
Элементы.СписокНаборовЗаписейГруппаИзмерений);
СписокНаборовЗаписейИмяТаблицы = ИмяТаблицы;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтборПоНомеруСообщения(ДинамоСписок, Вариант)
Поле = Новый ПолеКомпоновкиДанных("НеВыгружалось");
ЭлементыСписка = ДинамоСписок.Отбор.Элементы;
Индекс = ЭлементыСписка.Количество();
Пока Индекс > 0 Цикл
Индекс = Индекс - 1;
Элемент = ЭлементыСписка[Индекс];
Если Элемент.ЛевоеЗначение = Поле Тогда
ЭлементыСписка.Удалить(Элемент);
КонецЕсли;
КонецЦикла;
ЭлементОтбора = ЭлементыСписка.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Поле;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Ложь;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
Если Вариант = 1 Тогда
ЭлементОтбора.ПравоеЗначение = Ложь;
ЭлементОтбора.Использование = Истина;
ИначеЕсли Вариант = 2 Тогда
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НастроитьВидимостьКомандОбщегоМеню()
ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница;
Если ТекСтр = Элементы.СтраницаКонстанты Тогда
Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Истина;
Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Ложь;
Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Истина;
Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Ложь;
ИначеЕсли ТекСтр = Элементы.СтраницаСписокСсылок Тогда
Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Истина;
Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Истина;
Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Истина;
Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Истина;
ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда
Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Истина;
Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Ложь;
Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Истина;
Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Ложь;
Иначе
Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Ложь;
Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Ложь;
Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Ложь;
Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция МассивИменКлючейНабораЗаписей(ИмяТаблицы, ПрефиксИмен = "")
Результат = Новый Массив;
Измерения = ЭтотОбъект().ИзмеренияНабораЗаписей(ИмяТаблицы);
Если Измерения <> Неопределено Тогда
Для Каждого Строка Из Измерения Цикл
Результат.Добавить(ПрефиксИмен + Строка.Имя);
КонецЦикла;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция МенеджерПоМетаданным(ИмяТаблицы)
Описание = ЭтотОбъект().ХарактеристикиПоМетаданным(ИмяТаблицы);
Если Описание <> Неопределено Тогда
Возврат Описание.Менеджер;
КонецЕсли;
Возврат Неопределено;
КонецФункции
&НаСервере
Функция ТекстСериализации(Сериализация)
ОбработкаОбъект = ЭтотОбъект();
Текст = Новый ТекстовыйДокумент;
Запись = Новый ЗаписьXML;
Для Каждого Элемент Из Сериализация Цикл
Запись.УстановитьСтроку("UTF-16");
Значение = Неопределено;
Если Элемент.ФлагТипа = 1 Тогда
Менеджер = МенеджерПоМетаданным(Элемент.Данные);
Значение = Менеджер.СоздатьМенеджерЗначения();
ИначеЕсли Элемент.ФлагТипа = 2 Тогда
Менеджер = МенеджерПоМетаданным(СписокНаборовЗаписейИмяТаблицы);
Значение = Менеджер.СоздатьНаборЗаписей();
Для Каждого ИмяЗначение Из Элемент.Данные Цикл
ОбработкаОбъект.УстановитьЗначениеЭлементаОтбора(Значение.Отбор, ИмяЗначение.Ключ, ИмяЗначение.Значение);
КонецЦикла;
Значение.Прочитать();
ИначеЕсли Элемент.ФлагТипа = 3 Тогда
Значение = Элемент.Данные.ПолучитьОбъект();
Если Значение = Неопределено Тогда
Значение = Новый УдалениеОбъекта(Элемент.Данные);
КонецЕсли;
КонецЕсли;
ЗаписатьXML(Запись, Значение);
Текст.ДобавитьСтроку(Запись.Закрыть());
КонецЦикла;
Возврат Текст;
КонецФункции
&НаСервере
Функция УдалитьРегистрациюНаСервере(БезУчетаАвторегистрации, Удаляемые, ИмяТаблицы = Неопределено)
ПараметрыРегистрации = ПодготовитьПараметрыИзмененияРегистрации(Ложь, БезУчетаАвторегистрации, Удаляемые, ИмяТаблицы);
Возврат ЭтотОбъект().ВыполнитьИзменениеРегистрации(ПараметрыРегистрации);
КонецФункции
&НаСервере
Функция ДобавитьРегистрациюНаСервере(БезУчетаАвторегистрации, Добавляемые, ИмяТаблицы = Неопределено)
ПараметрыРегистрации = ПодготовитьПараметрыИзмененияРегистрации(Истина, БезУчетаАвторегистрации, Добавляемые, ИмяТаблицы);
Возврат ЭтотОбъект().ВыполнитьИзменениеРегистрации(ПараметрыРегистрации);
КонецФункции
&НаСервере
Функция ИзменитьНомерСообщенияНаСервере(НомерСообщения, Данные, ИмяТаблицы = Неопределено)
ПараметрыРегистрации = ПодготовитьПараметрыИзмененияРегистрации(НомерСообщения, Истина, Данные, ИмяТаблицы);
Возврат ЭтотОбъект().ВыполнитьИзменениеРегистрации(ПараметрыРегистрации);
КонецФункции
&НаСервере
Функция ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, МетаИмяГруппа = Неопределено, МетаИмяУзел = Неопределено)
Если МетаИмяГруппа = Неопределено И МетаИмяУзел = Неопределено Тогда
Текст = НСтр("ru = 'все объекты %1 по выбранной иерархии вида'");
ИначеЕсли МетаИмяГруппа <> Неопределено И МетаИмяУзел = Неопределено Тогда
Текст = "%2 %1";
ИначеЕсли МетаИмяГруппа = Неопределено И МетаИмяУзел <> Неопределено Тогда
Текст = НСтр("ru = 'все объекты %1 по выбранной иерархии вида'");
Иначе
Текст = НСтр("ru = 'все объекты типа ""%3"" %1'");
КонецЕсли;
Если БезУчетаАвторегистрации Тогда
ТекстФлага = "";
Иначе
ТекстФлага = НСтр("ru = 'с признаком авторегистрации'");
КонецЕсли;
Представление = "";
Для Каждого КлючЗначение Из СтруктураПредставленийМетаданных Цикл
Если КлючЗначение.Ключ = МетаИмяГруппа Тогда
Индекс = СтруктураИменМетаданных[МетаИмяГруппа].Найти(МетаИмяУзел);
Представление = ?(Индекс = Неопределено, "", КлючЗначение.Значение[Индекс]);
Прервать;
КонецЕсли;
КонецЦикла;
Текст = СтрЗаменить(Текст, "%1", ТекстФлага);
Текст = СтрЗаменить(Текст, "%2", НРег(МетаИмяГруппа));
Текст = СтрЗаменить(Текст, "%3", Представление);
Возврат СокрЛП(Текст);
КонецФункции
&НаСервере
Функция ПолучитьИменаМетаданныхТекущейСтроки(БезУчетаАвторегистрации)
Строка = ДеревоМетаданных.НайтиПоИдентификатору(Элементы.ДеревоМетаданных.ТекущаяСтрока);
Если Строка = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Результат = Новый Структура("МетаИмена, Описание",
Новый Массив, ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации));
МетаИмя = Строка.МетаПолноеИмя;
Если ПустаяСтрока(МетаИмя) Тогда
Результат.МетаИмена.Добавить(Неопределено);
Иначе
Родитель = Строка.ПолучитьРодителя();
МетаРодительИмя = Родитель.МетаПолноеИмя;
Если ПустаяСтрока(МетаРодительИмя) Тогда
Если СтруктураИменМетаданных.Свойство(МетаИмя) Тогда
Результат.МетаИмена = СтруктураИменМетаданных[МетаИмя];
Иначе
Результат.МетаИмена.Добавить(МетаИмя);
КонецЕсли;
Результат.Описание = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Строка.Наименование);
Иначе
Результат.МетаИмена.Добавить(МетаИмя);
Результат.Описание = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, МетаРодительИмя, МетаИмя);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ПолучитьВыбранныеИменаМетаданных(БезУчетаАвторегистрации)
Результат = Новый Структура("МетаИмена, Описание",
Новый Массив, ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации));
Для Каждого Корень Из ДеревоМетаданных.ПолучитьЭлементы() Цикл
Если Корень.Пометка = 1 Тогда
Результат.МетаИмена.Добавить(Неопределено);
Возврат Результат;
КонецЕсли;
КоличествоЧастичных = 0;
КоличествоГрупп = 0;
КоличествоУзлов = 0;
Для Каждого Группа Из Корень.ПолучитьЭлементы() Цикл
Если Группа.Пометка = 0 Тогда
Продолжить;
ИначеЕсли Группа.Пометка = 1 Тогда
КоличествоГрупп = КоличествоГрупп + 1;
ОписаниеГруппы = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Группа.Наименование);
Если Группа.ПолучитьЭлементы().Количество() = 0 Тогда
МассивАвто = СтруктураАвторегистрацииМетаданных[Группа.МетаПолноеИмя];
МассивИмен = СтруктураИменМетаданных[Группа.МетаПолноеИмя];
Для Индекс = 0 По МассивИмен.ВГраница() Цикл
Если БезУчетаАвторегистрации Или МассивАвто[Индекс] = 2 Тогда
Результат.МетаИмена.Добавить(МассивИмен[Индекс]);
ОписаниеУзла = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Группа.МетаПолноеИмя, МассивИмен[Индекс]);
КонецЕсли;
КонецЦикла;
Продолжить;
КонецЕсли;
Иначе
КоличествоЧастичных = КоличествоЧастичных + 1;
КонецЕсли;
Для Каждого Узел Из Группа.ПолучитьЭлементы() Цикл
Если Узел.Пометка = 1 Тогда
Если БезУчетаАвторегистрации Или Узел.Авторегистрация = 2 Тогда
Результат.МетаИмена.Добавить(Узел.МетаПолноеИмя);
ОписаниеУзла = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Группа.МетаПолноеИмя, Узел.МетаПолноеИмя);
КоличествоУзлов = КоличествоУзлов + 1;
КонецЕсли;
КонецЕсли
КонецЦикла;
КонецЦикла;
Если КоличествоГрупп = 1 И КоличествоЧастичных = 0 Тогда
Результат.Описание = ОписаниеГруппы;
ИначеЕсли КоличествоГрупп = 0 И КоличествоУзлов = 1 Тогда
Результат.Описание = ОписаниеУзла;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Функция ПрочитатьНомераСообщений()
РеквизитыЗапроса = "НомерОтправленного, НомерПринятого";
Данные = ЭтотОбъект().ПолучитьПараметрыУзлаОбмена(УзелОбменаСсылка, РеквизитыЗапроса);
Возврат Данные;
КонецФункции
&НаСервере
Процедура ОбработатьЗапретИзмененияУзла()
ОперацииРазрешены = Не ЗапрещеноВыбиратьУзелОбмена;
Если ОперацииРазрешены Тогда
Элементы.УзелОбменаСсылка.Видимость = Истина;
Заголовок = НСтр("ru = 'Регистрация изменений для обмена данными'");
Иначе
Элементы.УзелОбменаСсылка.Видимость = Ложь;
Заголовок = СтрЗаменить(НСтр("ru = 'Регистрация изменений для обмена с ""%1""'"), "%1", Строка(УзелОбменаСсылка));
КонецЕсли;
Элементы.ФормаОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены;
Элементы.СписокКонстантКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены;
Элементы.СписокСсылокКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены;
Элементы.СписокНаборовЗаписейКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены;
КонецПроцедуры
&НаСервере
Функция ПроконтролироватьНастройки()
Результат = Истина;
ТекущийОбъект = ЭтотОбъект();
Если УзелОбменаСсылка <> Неопределено И ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(УзелОбменаСсылка)) Тогда
ДопустимыеУзлыОбмена = ТекущийОбъект.СформироватьДеревоУзлов();
ИмяПлана = УзелОбменаСсылка.Метаданные().Имя;
Если ДопустимыеУзлыОбмена.Строки.Найти(ИмяПлана, "ПланОбменаИмя", Истина) = Неопределено Тогда
УзелОбменаСсылка = Неопределено;
Результат = Ложь;
ИначеЕсли УзелОбменаСсылка = ПланыОбмена[ИмяПлана].ЭтотУзел() Тогда
УзелОбменаСсылка = Неопределено;
Результат = Ложь;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ОбработкаВыбораУзлаОбменаСервер();
КонецЕсли;
ОбработатьЗапретИзмененияУзла();
УстановитьОтборыВДинамическихСписках();
Возврат Результат;
КонецФункции
&НаСервере
Процедура УстановитьОтборыВДинамическихСписках()
УстановитьОтборПоНомеруСообщения(СписокКонстант, ВариантОтбораПоНомеруСообщения);
УстановитьОтборПоНомеруСообщения(СписокСсылок, ВариантОтбораПоНомеруСообщения);
УстановитьОтборПоНомеруСообщения(СписокНаборовЗаписей, ВариантОтбораПоНомеруСообщения);
КонецПроцедуры
&НаСервере
Функция СтруктураКлючаНабораЗаписей(Знач ТекущиеДанные)
ОбработкаОбъект = ЭтотОбъект();
Описание = ОбработкаОбъект.ХарактеристикиПоМетаданным(СписокНаборовЗаписейИмяТаблицы);
Если Описание = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Результат = Новый Структура("ИмяФормы, Параметр, Значение");
Измерения = Новый Структура;
ИменаКлючей = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы);
Для Каждого Имя Из ИменаКлючей Цикл
ИмяКолонки = "СписокНаборовЗаписей" + Имя;
Если ТекущиеДанные.Свойство(ИмяКолонки) Тогда
Измерения.Вставить(Имя, ТекущиеДанные[ИмяКолонки]);
КонецЕсли;
КонецЦикла;
Если Измерения.Свойство("Регистратор") Тогда
МетаРегистратора = Метаданные.НайтиПоТипу(ТипЗнч(Измерения.Регистратор));
Если МетаРегистратора = Неопределено Тогда
Результат = Неопределено;
Иначе
Результат.ИмяФормы = МетаРегистратора.ПолноеИмя() + ".ФормаОбъекта";
Результат.Параметр = "Ключ";
Результат.Значение = Измерения.Регистратор;
КонецЕсли;
ИначеЕсли Измерения.Количество() = 0 Тогда
Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаСписка";
Иначе
Набор = Описание.Менеджер.СоздатьНаборЗаписей();
Для Каждого КлючЗначение Из Измерения Цикл
ОбработкаОбъект.УстановитьЗначениеЭлементаОтбора(Набор.Отбор, КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;
Набор.Прочитать();
Если Набор.Количество() = 1 Тогда
Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаЗаписи";
Результат.Параметр = "Ключ";
Ключ = Новый Структура;
Для Каждого КолонкаНабора Из Набор.Выгрузить().Колонки Цикл
ИмяКолонки = КолонкаНабора.Имя;
Ключ.Вставить(ИмяКолонки, Набор[0][ИмяКолонки]);
КонецЦикла;
Результат.Значение = Описание.Менеджер.СоздатьКлючЗаписи(Ключ);
Иначе
Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаСписка";
Результат.Параметр = "Отбор";
Результат.Значение = Измерения;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ПроверитьВерсиюИРежимСовместимостиПлатформы()
Информация = Новый СистемнаяИнформация;
ЧастиВерсии = СтрРазделить(Информация.ВерсияПриложения, ".");
Если Не (Не (ЧастиВерсии.Количество() < 2 Или Число(ЧастиВерсии[0]) < 8 Или Число(ЧастиВерсии[1]) < 3)
И (Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать
Или (Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_1
И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_2_13
И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_2_16"]
И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_1"]
И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_2"]
И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_3"]
И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_4"]))) Тогда
ВызватьИсключение НСтр("ru = 'Обработка предназначена для запуска на версии платформы
|1С:Предприятие 8.3.5 с отключенным режимом совместимости или выше'");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗарегистрироватьИОМИПредопределенныеНаСервере()
ТекущийОбъект = ЭтотОбъект();
Возврат ТекущийОбъект.БСП_ОбновитьИЗарегистрироватьИОМГлавногоУзла(УзелОбменаСсылка);
КонецФункции
&НаСервере
Функция ПодготовитьПараметрыИзмененияРегистрации(Команда, БезУчетаАвторегистрации, Данные, ИмяТаблицы = Неопределено)
Результат = Новый Структура;
Результат.Вставить("Команда", Команда);
Результат.Вставить("БезУчетаАвторегистрации", БезУчетаАвторегистрации);
Результат.Вставить("Узел", УзелОбменаСсылка);
Результат.Вставить("Данные", Данные);
Результат.Вставить("ИмяТаблицы", ИмяТаблицы);
Результат.Вставить("КонфигурацияПоддерживаетБСП", Объект.КонфигурацияПоддерживаетБСП);
Результат.Вставить("ДоступнаРегистрацияСредствамиБСП", Объект.ДоступнаРегистрацияСредствамиБСП);
Результат.Вставить("ДоступнаРаботаРИБ", Объект.ДоступнаРаботаРИБ);
Результат.Вставить("НастройкаКонтрольВыгрузкиОбъектов", Объект.НастройкаКонтрольВыгрузкиОбъектов);
Результат.Вставить("ДоступнаПакетнаяРегистрация", Объект.ДоступнаПакетнаяРегистрация);
Результат.Вставить("СтруктураИменМетаданных", СтруктураИменМетаданных);
Возврат Результат;
КонецФункции
&НаСервере
Процедура ДополнитьИменаСкрываемыхМетаданных()
Для Каждого РегистрСведенийМетаданные Из Метаданные.РегистрыСведений Цикл
Для Каждого ИзмерениеРегистра Из РегистрСведенийМетаданные.Измерения Цикл
Если НРег(ИзмерениеРегистра.Имя) = "узел" Тогда
Объект.ИменаСкрываемыхМетаданных.Добавить("РегистрСведений." + РегистрСведенийМетаданные.Имя);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойстваДинамическогоСписка(Список, СтруктураПараметров)
Форма = Список.Родитель;
Пока ТипЗнч(Форма) <> Тип("ФормаКлиентскогоПриложения") Цикл
Форма = Форма.Родитель;
КонецЦикла;
ДинамическийСписок = Форма[Список.ПутьКДанным];
ТекстЗапроса = СтруктураПараметров.ТекстЗапроса;
Если Не ПустаяСтрока(ТекстЗапроса) Тогда
ДинамическийСписок.ТекстЗапроса = ТекстЗапроса;
КонецЕсли;
ОсновнаяТаблица = СтруктураПараметров.ОсновнаяТаблица;
Если Не ПустаяСтрока(ОсновнаяТаблица) Тогда
ДинамическийСписок.ОсновнаяТаблица = ОсновнаяТаблица;
КонецЕсли;
ДинамическоеСчитываниеДанных = СтруктураПараметров.ДинамическоеСчитываниеДанных;
Если ТипЗнч(ДинамическоеСчитываниеДанных) = Тип("Булево") Тогда
ДинамическийСписок.ДинамическоеСчитываниеДанных = ДинамическоеСчитываниеДанных;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СтруктураСвойствДинамическогоСписка()
Возврат Новый Структура("ТекстЗапроса, ОсновнаяТаблица, ДинамическоеСчитываниеДанных");
КонецФункции
&НаСервере
Процедура ЗаполнитьДополнительнуюИнформацию()
Если НЕ КонфигурацияПоддерживаетБСД() Тогда
Элементы.ГруппаДополнительнаяИнформация.Видимость = Ложь;
Возврат;
КонецЕсли;
МодульОбменДаннымиПовтИсп = ОбщийМодуль("ОбменДаннымиПовтИсп");
МодульОбменДаннымиРегистрацияПовтИсп = ОбщийМодуль("ОбменДаннымиРегистрацияПовтИсп");
МодульОбменДаннымиРегистрацияСервер = ОбщийМодуль("ОбменДаннымиРегистрацияСервер");
Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда
ИмяПланаОбмена = МодульОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбменаСсылка);
Если МодульОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(УзелОбменаСсылка)
И (МодульОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена)
ИЛИ МодульОбменДаннымиПовтИсп.ЭтоУзелУниверсальногоОбменаДанными(УзелОбменаСсылка)) Тогда
РежимВыборочнойРегистрации = МодульОбменДаннымиРегистрацияПовтИсп.РежимВыборочнойРегистрацииДанныхПланаОбмена(ИмяПланаОбмена);
Если РежимВыборочнойРегистрации = МодульОбменДаннымиРегистрацияСервер.РежимВыборочнойРегистрацииОтключен()Тогда
ТекстЗаголовка = НСтр("ru='отключен.'", КодОсновногоЯзыка());
ИначеЕсли РежимВыборочнойРегистрации = МодульОбменДаннымиРегистрацияСервер.РежимВыборочнойРегистрацииМодифицированность() Тогда
ТекстЗаголовка = НСтр("ru='модифицированность.'", КодОсновногоЯзыка());
Иначе
ТекстЗаголовка = НСтр("ru='согласно правилам xml.'", КодОсновногоЯзыка());
КонецЕсли;
Иначе
ТекстЗаголовка = НСтр("ru='не поддерживается.'", КодОсновногоЯзыка());
КонецЕсли;
Иначе
ТекстЗаголовка = НСтр("ru='укажите настройку синхронизации.'", КодОсновногоЯзыка());
КонецЕсли;
ШаблонЗаголовка = НСтр("ru ='Режим выборочной регистрации: %1'", КодОсновногоЯзыка());
ТекстЗаголовка = СтрШаблон(ШаблонЗаголовка, ТекстЗаголовка);
Элементы.ДекорацияРежимВыборочнойРегистрации.Заголовок = ТекстЗаголовка;
КонецПроцедуры
&НаСервере
Функция КонфигурацияПоддерживаетБСД()
Возврат Метаданные.Подсистемы.Найти("СтандартныеПодсистемы") <> Неопределено
И Метаданные.Подсистемы["СтандартныеПодсистемы"].Подсистемы.Найти("ОбменДанными") <> Неопределено
И Метаданные.Подсистемы["СтандартныеПодсистемы"].Подсистемы["ОбменДанными"].Подсистемы.Найти("Регистрация") <> Неопределено;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОбщийМодуль(Имя)
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда
УстановитьБезопасныйРежим(Истина);
Модуль = Вычислить(Имя);
Иначе
Модуль = Неопределено;
КонецЕсли;
Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя);
КонецЕсли;
#Иначе
Модуль = Вычислить(Имя);
Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя);
КонецЕсли;
#КонецЕсли
Возврат Модуль;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено)
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1);
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2);
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3);
Возврат СтрокаПодстановки;
КонецФункции
&НаСервере
Функция КодОсновногоЯзыка()
Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
КонецФункции
#КонецОбласти