//ирПортативный Перем ирПортативный Экспорт; //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; //ирПортативный Перем ирПривилегированный Экспорт; Процедура ЗаполнитьСписокПользователей() Экспорт ПользователиИБ.Очистить(); СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей(); Для Каждого ТекПользователь Из СписокПользователей Цикл СтрокаПользователя = ПользователиИБ.Добавить(); СтрокаПользователя.ИмяПользователя = ТекПользователь.Имя; КонецЦикла; ПользователиИБ.Сортировать("ИмяПользователя"); КонецПроцедуры ////////////// //Талица форм Процедура ДобавитьФормуВТаблицу(ПолноеИмяОбъекта, ПредставлениеОбъекта, ТипОбъекта, ВидОбъекта, КартинкаОбъекта) СтрокаФ = ФормыИБ.Добавить(); СтрокаФ.ПолноеИмяОбъекта = ПолноеИмяОбъекта; СтрокаФ.ИмяОбъекта = ирОбщий.ПоследнийФрагментЛкс(ПолноеИмяОбъекта); // Неоптимально СтрокаФ.ТипОбъекта = ТипОбъекта; СтрокаФ.ВидОбъекта = ВидОбъекта; СтрокаФ.ПредставлениеОбъекта = ПредставлениеОбъекта; КонецПроцедуры Функция КартинкаПоТипуОбъекта(ТипОбъекта) Экспорт Если ТипОбъекта = "Общие" Тогда Картинка = БиблиотекаКартинок.Форма; Иначе Картинка = ирКэш.КартинкаПоИмениЛкс(ТипОбъекта); Если Картинка = Неопределено Тогда Картинка = Новый Картинка; КонецЕсли; КонецЕсли; Возврат Картинка; КонецФункции // ПолучитьКартинкуПоВидуОбъекта() Процедура ПолучитьСписокФорм() Экспорт ФормыИБ.Очистить(); Для Каждого Форма Из Метаданные.ОбщиеФормы Цикл ДобавитьФормуВТаблицу("ОбщаяФорма." + Форма.Имя, "Общая форма." + Форма.Синоним, "Общие", "ОбщиеФормы", КартинкаПоТипуОбъекта("Общие")); КонецЦикла; ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); ИменаСтандартныхФорм.Добавить("ФормаГруппы", "Форма группы"); ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); ИменаСтандартныхФорм.Добавить("ФормаДляВыбораГруппы", "Форма выбора группы"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.Справочники, "Справочник", "Справочник", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("Форма", "Форма"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.КритерииОтбора, "КритерийОтбора", "Критерий отбора", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаСохранения", "Форма сохранения"); ИменаСтандартныхФорм.Добавить("ФормаЗагрузки", "Форма выбора"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.ХранилищаНастроек, "ХранилищеНастроек", "Хранилище настроек", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.Документы, "Документ", "Документ", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("Форма", "Форма"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.ЖурналыДокументов, "ЖурналДокументов", "Журнал документов", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.Перечисления, "Перечисление", "Перечисление", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("Форма", "Форма"); ИменаСтандартныхФорм.Добавить("ФормаНастроек", "Форма настроек"); ИменаСтандартныхФорм.Добавить("ФормаВарианта", "Форма варианта"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.Отчеты, "Отчет", "Отчет", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("Форма", "Форма"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.Обработки, "Обработка", "Обработка", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаЗаписи", "Форма записи"); ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыСведений, "РегистрСведений", "Регистр сведений", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыНакопления, "РегистрНакопления", "Регистр накопления", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); ИменаСтандартныхФорм.Добавить("ФормаГруппы", "Форма группы"); ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); ИменаСтандартныхФорм.Добавить("ФормаДляВыбораГруппы", "Форма выбора группы"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.ПланыВидовХарактеристик, "ПланВидовХарактеристик", "План видов характеристик", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.ПланыСчетов, "ПланСчетов", "План счетов", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыБухгалтерии, "РегистрБухгалтерии", "Регистр бухгалтерии", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.ПланыВидовРасчета, "ПланВидовРасчета", "План видов расчета", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыРасчета, "РегистрРасчета", "Регистр расчета", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.БизнесПроцессы, "БизнесПроцесс", "Бизнес процесс", ИменаСтандартныхФорм); ИменаСтандартныхФорм = Новый СписокЗначений; ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); ПолучитьСписокФормОбъектаМетаданных(Метаданные.Задачи, "Задача", "Задача", ИменаСтандартныхФорм); КонецПроцедуры Процедура ПолучитьСписокФормОбъектаМетаданных(СписокОбъектовМетаданных, ИмяОбъектаМетаданных, ПредставлениеОбъектаМетаданных, ИменаСтандартныхФорм) Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(СписокОбъектовМетаданных.Количество(), ПредставлениеОбъектаМетаданных + ".Формы"); Для Каждого Объект Из СписокОбъектовМетаданных Цикл ирОбщий.ОбработатьИндикаторЛкс(Индикатор); Префикс = ИмяОбъектаМетаданных + "." + Объект.Имя; ПрефиксПредставления = ПредставлениеОбъектаМетаданных + "." + Объект.Синоним; ПолучитьСписокФормИзСпискаМетаданныхФорм(Префикс, ПрефиксПредставления, Объект.Формы, ИмяОбъектаМетаданных, Объект.Имя); Для Каждого ИмяСтандартнойФормы Из ИменаСтандартныхФорм Цикл ДобавитьСтандартнуюФорму(Префикс, ПрефиксПредставления, Объект, ИмяСтандартнойФормы.Значение, ИмяСтандартнойФормы.Представление, ИмяОбъектаМетаданных, Объект.Имя); КонецЦикла; КонецЦикла; ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); КонецПроцедуры Процедура ПолучитьСписокФормИзСпискаМетаданныхФорм(Префикс, ПрефиксПредставления, МетаданныеФорм, ИмяОбъектаМетаданных, ИмяВидаОбъекта) Для Каждого Форма Из МетаданныеФорм Цикл ДобавитьФормуВТаблицу(Префикс + ".Форма." + Форма.Имя, ПрефиксПредставления + "." + Форма.Синоним, ИмяОбъектаМетаданных, ИмяВидаОбъекта, КартинкаПоТипуОбъекта(ИмяОбъектаМетаданных)); КонецЦикла; КонецПроцедуры Процедура ДобавитьСтандартнуюФорму(Префикс, ПрефиксПредставления, ОбъектМетаданных, ИмяОбъекта, ПредставлениеОбъекта, ИмяОбъектаМетаданных, ИмяВидаОбъекта) Если ОбъектМетаданных["Основная" + ИмяОбъекта] = Неопределено Тогда ДобавитьФормуВТаблицу(Префикс + "." + ИмяОбъекта, ПрефиксПредставления + "." + ПредставлениеОбъекта, ИмяОбъектаМетаданных, ИмяВидаОбъекта, КартинкаПоТипуОбъекта(ИмяОбъектаМетаданных)); КонецЕсли; КонецПроцедуры ////////////// Функция ПолучитьМенеджерХранилищаПоИмени(ИмяРаздела) Экспорт Если ИмяРаздела = "ХранилищеСистемныхНастроек" Тогда Возврат ХранилищеСистемныхНастроек; ИначеЕсли ИмяРаздела = "ХранилищеОбщихНастроек" Тогда Возврат ХранилищеОбщихНастроек; ИначеЕсли ИмяРаздела = "ХранилищеНастроекДанныхФорм" Тогда Возврат ХранилищеНастроекДанныхФорм; ИначеЕсли ИмяРаздела = "ХранилищеВариантовОтчетов" Тогда Возврат ХранилищеВариантовОтчетов; ИначеЕсли ИмяРаздела = "ХранилищеПользовательскихНастроекОтчетов" Тогда Возврат ХранилищеПользовательскихНастроекОтчетов; Иначе Возврат ХранилищаНастроек[ИмяРаздела]; КонецЕсли; КонецФункции // () Процедура ПолучитьОписаниеНастроек(ПользователиНазначения, ФормыНазначения, ИмяРаздела) Экспорт ОписаниеНастроек.Очистить(); ПредставлениеОтбораЗагрузки = "Пользователи"; Если ПользователиНазначения.Количество() > 0 Тогда ОтборЗагрузкиПользователи = ирОбщий.РасширенноеПредставлениеЗначенияЛкс(ПользователиНазначения); ИндикаторПользователи = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ПользователиНазначения.Количество(), "Пользователи"); Для каждого ТекПользователь Из ПользователиНазначения Цикл ирОбщий.ОбработатьИндикаторЛкс(ИндикаторПользователи); Отбор = Новый Структура("Пользователь", ТекПользователь); ЗагрузитьНастройкиИзХранилища(Отбор, ФормыНазначения, ИмяРаздела); КонецЦикла; ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); Иначе ОтборЗагрузкиПользователи = "Все"; ЗагрузитьНастройкиИзХранилища(, ФормыНазначения, ИмяРаздела); КонецЕсли; КонецПроцедуры Функция ЗагрузитьНастройкиИзХранилища(Отбор, ФормыНазначения, ИмяРаздела) БезФильтраПоОбъектам = ФормыНазначения.Количество() = 0; ДобавлятьПрочие = Ложь Или БезФильтраПоОбъектам Или ФормыНазначения.Найти("Прочие") <> Неопределено; МенеджерХранилища = ПолучитьМенеджерХранилищаПоИмени(ИмяРаздела); Выборка = МенеджерХранилища.Выбрать(Отбор); Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(, "Настройки"); Пока 1=1 Цикл Попытка ЭлементСчитан = Выборка.Следующий(); Исключение ОписаниеОшибки = ОписаниеОшибки(); Сообщить("Ошибка чтения настройки"); Продолжить; КонецПопытки; Если Не ЭлементСчитан Тогда Прервать; КонецЕсли; ирОбщий.ОбработатьИндикаторЛкс(Индикатор); текОбъект = Выборка.КлючОбъекта; текКлюч = ""; ПозРазделителя = Найти(Выборка.КлючОбъекта, "/"); Если ПозРазделителя > 0 Тогда текОбъект = Лев(Выборка.КлючОбъекта, ПозРазделителя-1); текКлюч = Сред(Выборка.КлючОбъекта, ПозРазделителя+1); КонецЕсли; СтрокаФормы = ФормыИБ.Найти(текОбъект, "ПолноеИмяОбъекта"); Если СтрокаФормы = Неопределено Тогда Если ДобавлятьПрочие Тогда НовоеОписание = ОписаниеНастроек.Добавить(); НовоеОписание.ИмяОбъекта = Выборка.КлючОбъекта; НовоеОписание.ПредставлениеОбъекта = Выборка.КлючОбъекта; НовоеОписание.Описание = Выборка.Представление; НовоеОписание.ИмяПользователя = Выборка.Пользователь; НовоеОписание.ТипНастройки = ТипЗнч(Выборка.Настройки); НовоеОписание.Настройка = ирОбщий.РасширенноеПредставлениеЗначенияЛкс(Выборка.Настройки); НовоеОписание.КлючНастроек = Выборка.КлючНастроек; КонецЕсли; Иначе Если Ложь Или БезФильтраПоОбъектам Или ФормыНазначения.Найти(текОбъект) <> Неопределено Тогда НовоеОписание = ОписаниеНастроек.Добавить(); //НовоеОписание.ИмяОбъекта = СтрокаФормы.ИмяОбъекта; НовоеОписание.ИмяОбъекта = текОбъект; НовоеОписание.ПредставлениеОбъекта = СтрокаФормы.ПредставлениеОбъекта; НовоеОписание.Описание = Выборка.Представление; НовоеОписание.ИмяПользователя = Выборка.Пользователь; НовоеОписание.ТипНастройки = ТипЗнч(Выборка.Настройки); НовоеОписание.Настройка = ирОбщий.РасширенноеПредставлениеЗначенияЛкс(Выборка.Настройки); НовоеОписание.КлючНастроек = Выборка.КлючНастроек; НовоеОписание.Ключ = текКлюч; Иначе //Сообщить(""+Выборка.КлючОбъекта+""); КонецЕсли; КонецЕсли; КонецЦикла; ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); Возврат Неопределено; КонецФункции Процедура УдалитьНастройкиПользователей(ТабКУдалению, ИмяРаздела) Экспорт МенеджерХранилища = ПолучитьМенеджерХранилищаПоИмени(ИмяРаздела); Для каждого Строка Из ТабКУдалению Цикл МенеджерХранилища.Удалить(Строка.КлючОбъекта, Строка.КлючНастроек, Строка.Пользователь); КонецЦикла; КонецПроцедуры Процедура СкопироватьНастройкиПользователей(ТабОписаний, ПользователиНазначения, ИмяРаздела) Экспорт МенеджерХранилища = ПолучитьМенеджерХранилищаПоИмени(ИмяРаздела); Для Каждого Строка Из ТабОписаний Цикл лОписаниеНастроек = Новый ОписаниеНастроек; Настройка = МенеджерХранилища.Загрузить(Строка.КлючОбъекта, Строка.КлючНастроек, лОписаниеНастроек, Строка.Пользователь); Если Настройка <> Неопределено Тогда Для Каждого ПользовательПриемник Из ПользователиНазначения Цикл МенеджерХранилища.Сохранить(Строка.КлючОбъекта, Строка.КлючНастроек, Настройка, лОписаниеНастроек, ПользовательПриемник); КонецЦикла; КонецЕсли; КонецЦикла; КонецПроцедуры #Если Клиент Тогда Процедура ОткрытьЗначНастройки(ТабОписаний, ИмяРаздела, Исследовать = Ложь) Экспорт МенеджерХранилища = ПолучитьМенеджерХранилищаПоИмени(ИмяРаздела); Для Каждого СтрокаТаб Из ТабОписаний Цикл текЗначениеНастройки = МенеджерХранилища.Загрузить(СтрокаТаб.КлючОбъекта, СтрокаТаб.КлючНастроек, , СтрокаТаб.Пользователь); Если текЗначениеНастройки = Неопределено Тогда //Предупреждение("Настройка не найдена"); Продолжить; КонецЕсли; Если Исследовать Тогда ирОбщий.ИсследоватьЛкс(текЗначениеНастройки); Иначе ОткрытьЗнач(текЗначениеНастройки); КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ОткрытьЗнач(текЗначениеНастройки) Экспорт ТипЗначенияНастройки = ТипЗнч(текЗначениеНастройки); Если ТипЗначенияНастройки = Тип("Строка") Тогда ФормаПросмотраСтрок = ПолучитьФорму("СериализацияЗначения"); ФормаПросмотраСтрок.ЗначениеНастройки = текЗначениеНастройки; ФормаПросмотраСтрок.НадписьТипНастройки = ТипЗначенияНастройки; ФормаПросмотраСтрок.Открыть(); ИначеЕсли Ложь Или ТипЗначенияНастройки = Тип("Структура") Или ТипЗначенияНастройки = Тип("ФиксированнаяСтруктура") Или ТипЗначенияНастройки = Тип("Массив") Или ТипЗначенияНастройки = Тип("ФиксированныйМассив") Или ТипЗначенияНастройки = Тип("Соответствие") Или ТипЗначенияНастройки = Тип("СписокЗначений") Или ТипЗначенияНастройки = Тип("ТаблицаЗначений") Тогда ирОбщий.ИсследоватьЛкс(текЗначениеНастройки,, Истина); Иначе ОткрытьАвто = Ложь; XMLТип = XMLТипЗнч(ТипЗначенияНастройки); Если Истина И XMLТип <> Неопределено И Найти(XMLТип.ИмяТипа, "Ref.") > 0 Тогда ОткрытьЗначение(текЗначениеНастройки); Иначе ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьНачалоЭлемента("details"); Попытка СериализаторXDTO.ЗаписатьXML(ЗаписьXML, текЗначениеНастройки, "item"); Исключение ирОбщий.ИсследоватьЛкс(текЗначениеНастройки); Возврат; КонецПопытки; ЗаписьXML.ЗаписатьКонецЭлемента(); XMLЗначНастройки = ЗаписьXML.Закрыть(); ФормаПросмотраСтрок = ПолучитьФорму("СериализацияЗначения"); ФормаПросмотраСтрок.XMLНастройки = XMLЗначНастройки; ФормаПросмотраСтрок.ЗначениеНастройки = текЗначениеНастройки; ФормаПросмотраСтрок.НадписьТипНастройки = ТипЗначенияНастройки; ФормаПросмотраСтрок.Открыть(); КонецЕсли; КонецЕсли; КонецПроцедуры #КонецЕсли //ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла); //ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf"; //ирПортативный #Если Клиент Тогда //ирПортативный Контейнер = Новый Структура(); //ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер); //ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда //ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля); //ирПортативный ирПортативный.Открыть(); //ирПортативный КонецЕсли; //ирПортативный #Иначе //ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта //ирПортативный #КонецЕсли //ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер"); //ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");