//ирПортативный Перем ирПортативный Экспорт; //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; //ирПортативный Перем ирПривилегированный Экспорт; Перем мНепустыеЗначения Экспорт ; Перем мПлатформа Экспорт; Перем мТекущееПолноеИмяМД Экспорт; Функция ДобавитьСтрокуОшибкиЛкс(ИмяОперации, Знач пИнформацияОбОшибке, ГлубинаОшибки = 0, Контекст = "КлиентскоеПриложение") Экспорт #Если Сервер И Не Сервер Тогда пИнформацияОбОшибке = ИнформацияОбОшибке(); #КонецЕсли Если ГлубинаОшибки = 1 Тогда Если Истина И пИнформацияОбОшибке.Причина <> Неопределено И пИнформацияОбОшибке.Причина.Причина <> Неопределено Тогда пИнформацияОбОшибке = пИнформацияОбОшибке.Причина; КонецЕсли; КонецЕсли; Фрагменты = ирОбщий.СтрРазделитьЛкс(ИмяОперации); СтрокаРезультатов = Ошибки.Добавить(); СтрокаРезультатов.Контекст = Контекст; СтрокаРезультатов.Операция = Фрагменты[Фрагменты.ВГраница()]; Фрагменты.Удалить(Фрагменты.ВГраница()); Если Фрагменты.Количество() = 3 И Фрагменты[Фрагменты.ВГраница()] = "Форма" Тогда СтрокаРезультатов.Операция = "Форма." + СтрокаРезультатов.Операция; Фрагменты.Удалить(Фрагменты.ВГраница()); КонецЕсли; СтрокаРезультатов.Метаданные = ирОбщий.ПолучитьСтрокуСРазделителемИзМассиваЛкс(Фрагменты, "."); СтрокаРезультатов.ПодробноеОписаниеОшибки = ПодробноеПредставлениеОшибки(пИнформацияОбОшибке); ОписаниеОшибки = пИнформацияОбОшибке.Описание; Если пИнформацияОбОшибке.Причина <> Неопределено Тогда ОписаниеОшибки = ОписаниеОшибки + ": " + ПодробноеПредставлениеОшибки(пИнформацияОбОшибке.Причина); КонецЕсли; СтрокаРезультатов.ОписаниеОшибки = ОписаниеОшибки; СтрокаРезультатов.ИнформацияОбОшибке = пИнформацияОбОшибке; Возврат СтрокаРезультатов; КонецФункции Функция ГлобальныйТестОбъектов(ЭтаФорма = Неопределено) Экспорт #Если ВнешнееСоединение Тогда СбойноеИмяМД = мТекущееПолноеИмяМД; #КонецЕсли ТипыМетаданных = ирКэш.Получить().ПолучитьТаблицуТиповМетаОбъектов(Истина, Ложь, Ложь); ИндикаторТиповМетаданных = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ТипыМетаданных.Количество(), "Объекты. Типы метаданных"); Для Каждого СтрокаТипаМетаданных Из ТипыМетаданных Цикл ирОбщий.ОбработатьИндикаторЛкс(ИндикаторТиповМетаданных); Если ирОбщий.ЛиКорневойТипРегистраБДЛкс(СтрокаТипаМетаданных.Единственное) Тогда Подтип = "НаборЗаписей"; ИначеЕсли СтрокаТипаМетаданных.Единственное = "Константа" Тогда Подтип = "МенеджерЗначения"; Иначе //Если ирОбщий.ЛиКорневойТипСсылкиЛкс(СтрокаТипаМетаданных.Единственное) Тогда Подтип = "Объект"; КонецЕсли; Если Ложь //Или СтрокаТипаМетаданных.Единственное = "ПланОбмена" // Временно. Антибаг платформы 8.2.16.352 http://partners.v8.1c.ru/forum/thread.jsp?id=1080147#1080147 Или СтрокаТипаМетаданных.Единственное = "Перечисление" Или СтрокаТипаМетаданных.Единственное = "Перерасчет" Тогда Продолжить; КонецЕсли; КоллекцияМетаОбъектов = Метаданные[СтрокаТипаМетаданных.Множественное]; Индикатор2 = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоллекцияМетаОбъектов.Количество(), СтрокаТипаМетаданных.Множественное); Для Каждого МетаОбъект Из КоллекцияМетаОбъектов Цикл ирОбщий.ОбработатьИндикаторЛкс(Индикатор2); КоличествоОшибок = Ошибки.Количество(); мТекущееПолноеИмяМД = МетаОбъект.ПолноеИмя(); #Если ВнешнееСоединение Тогда Если СбойноеИмяМД <> Неопределено Тогда Если СбойноеИмяМД = мТекущееПолноеИмяМД Тогда СбойноеИмяМД = Неопределено; КонецЕсли; Продолжить; КонецЕсли; #КонецЕсли Если Истина И ОбъектыМетаданных.Количество() > 0 И ОбъектыМетаданных.НайтиПоЗначению(мТекущееПолноеИмяМД) = Неопределено Тогда Продолжить; КонецЕсли; ИмяОперации = мТекущееПолноеИмяМД + ".Объект"; Если ВыводитьСообщения Тогда Сообщить("" + ТекущаяДата() + " " + ИмяОперации); КонецЕсли; ИмяТипаОбъекта = СтрЗаменить(мТекущееПолноеИмяМД, ".", Подтип + "."); Попытка Объект = Новый (ИмяТипаОбъекта); // Ошибки инициализации здесь все равно не ловятся попыткой. Проектное решение 1С https://partners.v8.1c.ru/forum/t/1302121/m/1302121 Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ОписаниеОшибки = ИнформацияОбОшибке.Описание; Если Найти(ОписаниеОшибки, "Тип не определен") <> 1 Тогда ДобавитьСтрокуОшибкиЛкс(ИмяОперации, ИнформацияОбОшибке, 1); КонецЕсли; Продолжить; КонецПопытки; НачатьТранзакцию(); Попытка Если Подтип = "Объект" Тогда МенеджерТипа = ирОбщий.ПолучитьМенеджерЛкс(МетаОбъект); Если ирОбщий.ЛиКорневойТипСсылкиЛкс(СтрокаТипаМетаданных.Единственное) Тогда ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 Т.Ссылка ИЗ " + МетаОбъект.ПолноеИмя() + " КАК Т"; МассивТиповСтрок = Новый Массив; МассивТиповСтрок.Добавить(Ложь); Если ирОбщий.ЛиМетаданныеОбъектаСГруппамиЛкс(МетаОбъект) Тогда ТекстЗапроса = ТекстЗапроса + " ГДЕ Т.ЭтоГруппа = &ЭтоГруппа"; МассивТиповСтрок.Добавить(Истина); КонецЕсли; Запрос = Новый Запрос(ТекстЗапроса); Для Каждого ТипСтроки Из МассивТиповСтрок Цикл Если ПравоДоступа("Изменение", МетаОбъект) Тогда Запрос.УстановитьПараметр("ЭтоГруппа", ТипСтроки); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Объект = Выборка.Ссылка.ПолучитьОбъект(); ПроверитьСсылочныйОбъект(Объект, ИмяОперации, СтрокаТипаМетаданных.Единственное); Если ПравоДоступа("Добавление", МетаОбъект) Тогда КопияОбъекта = Выборка.Ссылка.Скопировать(); ПроверитьСсылочныйОбъект(КопияОбъекта, ИмяОперации, СтрокаТипаМетаданных.Единственное, Истина); КонецЕсли; КонецЕсли; КонецЕсли; Если ПравоДоступа("Добавление", МетаОбъект) Тогда Объект = ирОбщий.СоздатьСсылочныйОбъектПоМетаданнымЛкс(МетаОбъект); ЗаполнитьРеквизитыНепустымиЗначениями(Объект, МетаОбъект); Объект.Скопировать(); Если ПравоДоступа("Изменение", МетаОбъект) Тогда ПроверитьСсылочныйОбъект(Объект, ИмяОперации, СтрокаТипаМетаданных.Единственное, Истина); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; ИначеЕсли Подтип = "НаборЗаписей" Тогда Если ПравоДоступа("Изменение", МетаОбъект) Тогда МенеджерТипа = ирОбщий.ПолучитьМенеджерЛкс(МетаОбъект); // Создаем чисто для проверки компиляции модуля менеджера СтрокаНабора = Объект.Добавить(); ЗаполнитьРеквизитыНепустымиЗначениями(СтрокаНабора, МетаОбъект); Для Каждого ЭлементОтбора Из Объект.Отбор Цикл ЭлементОтбора.Установить(СтрокаНабора[ЭлементОтбора.Имя]); КонецЦикла; ирОбщий.ЗаполнитьНаборЗаписейПоОтборуЛкс(Объект); Попытка ирОбщий.ЗаписатьОбъектЛкс(Объект); Исключение ОтменитьТранзакцию(); Если Не ЕстьИгнориуемыеСигнатуры(ОписаниеОшибки()) Тогда ДобавитьСтрокуОшибкиЛкс(ИмяОперации, ИнформацияОбОшибке(), 1); КонецЕсли; НачатьТранзакцию(); КонецПопытки; КонецЕсли; Иначе Если ПравоДоступа("Изменение", МетаОбъект) Тогда Попытка ирОбщий.ЗаписатьОбъектЛкс(Объект); Исключение ОтменитьТранзакцию(); Если Не ЕстьИгнориуемыеСигнатуры(ОписаниеОшибки()) Тогда ДобавитьСтрокуОшибкиЛкс(ИмяОперации, ИнформацияОбОшибке(), 1); КонецЕсли; НачатьТранзакцию(); КонецПопытки; КонецЕсли; КонецЕсли; Исключение // Сюда попадаем при ошибках не при записи ДобавитьСтрокуОшибкиЛкс(ИмяОперации, ИнформацияОбОшибке()); КонецПопытки; ОтменитьТранзакцию(); Если ЭтаФорма <> Неопределено Тогда Если КоличествоОшибок <> Ошибки.Количество() Тогда ЭтаФорма.ОбновитьОтображение(); КонецЕсли; КонецЕсли; КонецЦикла; ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); КонецЦикла; ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); КонецФункции Функция ПроверитьСсылочныйОбъект(Знач Объект, ИмяОперации, ТипМетаданных, ЭтоКопия = Ложь) Экспорт Если ЭтоКопия Тогда НовыйКод = 333333333333; Попытка Объект.Код = НовыйКод; Исключение КонецПопытки; НоваяДата = ПолучитьНепустоеЗначениеПоОписаниюТипов(Новый ОписаниеТипов("Дата")); Попытка Объект.Дата = НоваяДата; Исключение КонецПопытки; КонецЕсли; Попытка Объект.ПометкаУдаления = Ложь; Исключение // Предопределенный узел КонецПопытки; ОбразОбъекта = ирОбщий.СохранитьОбъектВВидеСтрокиXMLЛкс(Объект, Ложь); Попытка ирОбщий.ЗаписатьОбъектЛкс(Объект); Исключение ОтменитьТранзакцию(); Если Не ЕстьИгнориуемыеСигнатуры(ОписаниеОшибки()) Тогда ДобавитьСтрокуОшибкиЛкс(ИмяОперации, ИнформацияОбОшибке(), 1); КонецЕсли; КонецПопытки; Если ТранзакцияАктивна() Тогда ОтменитьТранзакцию(); КонецЕсли; Объект = ирОбщий.ВосстановитьОбъектИзСтрокиXMLЛкс(ОбразОбъекта,, Ложь); НачатьТранзакцию(); //ФормаОбъекта = Объект.ПолучитьФорму(); //ФормаОбъекта.ЗаписатьВФорме(); Если ТипМетаданных = "Документ" И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда Объект.Проведен = Ложь; Попытка ирОбщий.ЗаписатьОбъектЛкс(Объект,, РежимЗаписиДокумента.Проведение); Исключение ОтменитьТранзакцию(); Если Не ЕстьИгнориуемыеСигнатуры(ОписаниеОшибки()) Тогда ДобавитьСтрокуОшибкиЛкс(ИмяОперации, ИнформацияОбОшибке(), 1); КонецЕсли; КонецПопытки; Если ТранзакцияАктивна() Тогда //Объект = ирОбщий.ВосстановитьОбъектИзСтрокиXMLЛкс(ОбразОбъекта,, Ложь); //Объект.Проведен = Истина; Попытка ирОбщий.ЗаписатьОбъектЛкс(Объект,, РежимЗаписиДокумента.ОтменаПроведения); Исключение ОтменитьТранзакцию(); Если Не ЕстьИгнориуемыеСигнатуры(ОписаниеОшибки()) Тогда ДобавитьСтрокуОшибкиЛкс(ИмяОперации, ИнформацияОбОшибке(), 1); КонецЕсли; КонецПопытки; КонецЕсли; Если ТранзакцияАктивна() Тогда ОтменитьТранзакцию(); КонецЕсли; Объект = ирОбщий.ВосстановитьОбъектИзСтрокиXMLЛкс(ОбразОбъекта,, Ложь); Объект.Проведен = Ложь; НачатьТранзакцию(); КонецЕсли; //Попытка // Объект.ПометкаУдаления = Истина; //Исключение // Возврат Неопределено; //КонецПопытки; //Попытка // ирОбщий.ЗаписатьОбъектЛкс(Объект); //Исключение // ОтменитьТранзакцию(); // ОписаниеОшибки = ОписаниеОшибки(); // Если Не ЕстьИгнориуемыеСигнатуры(ОписаниеОшибки()) Тогда // ДобавитьСтрокуОшибки(ИмяОперации, ИнформацияОбОшибке(), 1); // КонецЕсли; //КонецПопытки; //Если ТранзакцияАктивна() Тогда // ОтменитьТранзакцию(); //КонецЕсли; //НачатьТранзакцию(); Возврат Неопределено; КонецФункции Функция ЗаполнитьРеквизитыНепустымиЗначениями(Объект, ОбъектМД, Назначение = "Основная", ОбъектВладелец = Неопределено) Экспорт ПолноеИмяМД = ОбъектМД.ПолноеИмя(); ПоляТаблицыБД = ирОбщий.ПолучитьПоляТаблицыМДЛкс(ПолноеИмяМД,,,, Ложь); #Если Сервер И Не Сервер Тогда ПоляТаблицыБД = НайтиПоСсылкам().Колонки; #КонецЕсли Для Каждого ПолеТаблицыБД Из ПоляТаблицыБД Цикл ИмяПоля = ПолеТаблицыБД.Имя; Если Истина И ирОбщий.ЛиСсылочныйОбъектМетаданных(ОбъектМД) И (Ложь Или ИмяПоля = "Предопределенный" Или ИмяПоля = "ИмяПредопределенныхДанных" Или ИмяПоля = "Ссылка") Тогда Продолжить; КонецЕсли; Если ПолеТаблицыБД.ТипЗначения.СодержитТип(Тип("ТаблицаЗначений")) Тогда МетаТЧ = ОбъектМД.ТабличныеЧасти.Найти(ПолеТаблицыБД.Имя); Если МетаТЧ <> Неопределено Тогда Попытка СтрокаТЧ = Объект[МетаТЧ.Имя].Добавить(); Исключение СтрокаТЧ = Неопределено; КонецПопытки; Если СтрокаТЧ <> Неопределено Тогда ЗаполнитьРеквизитыНепустымиЗначениями(СтрокаТЧ, МетаТЧ, "ТабличнаяЧасть", Объект); КонецЕсли; КонецЕсли; Продолжить; КонецЕсли; НепустоеЗначение = Неопределено; СтруктураОтбора = Неопределено; //СтрокаСтрукутрыПоля = СтруктураХраненияПолей.Найти(ИмяПоля, "ИмяПоля"); //Если СтрокаСтрукутрыПоля <> Неопределено Тогда // МетаданныеПоля = СтрокаСтрукутрыПоля.Метаданные; // Если ЗначениеЗаполнено(МетаданныеПоля) Тогда // МетаданныеПоля = Метаданные.НайтиПоПолномуИмени(МетаданныеПоля); // Иначе // МетаданныеПоля = Неопределено; // КонецЕсли; МетаданныеПоля = ПолеТаблицыБД.Метаданные; Если МетаданныеПоля <> Неопределено Тогда Попытка НепустоеЗначение = МетаданныеПоля.ЗначениеЗаполнения; // У измерений и ресурсов нет такого свойства ЗначениеЗаполнено(НепустоеЗначение); // Там бывает "НеизвестныйОбъект", тогда будет исключение Исключение НепустоеЗначение = Неопределено; КонецПопытки; КонецЕсли; СтруктураОтбора = Новый Структура; Если МетаданныеПоля <> Неопределено И Не ЗначениеЗаполнено(НепустоеЗначение) Тогда СтруктураОтбора = ирОбщий.ПолучитьСтруктуруОтбораПоСвязямИПараметрамВыбораЛкс(Объект, МетаданныеПоля, ОбъектВладелец); КонецЕсли; Если Истина И ИмяПоля = "Родитель" И ирОбщий.ЛиМетаданныеОбъектаСГруппамиЛкс(ОбъектМД) Тогда СтруктураОтбора.Вставить("ЭтоГруппа", Истина); КонецЕсли; Если Истина И ИмяПоля = "Родитель" И Найти(ПолноеИмяМД, "Справочник.") = 1 И ОбъектМД.Владельцы.Количество() > 0 Тогда СтруктураОтбора.Вставить("Владелец", Объект.Владелец); КонецЕсли; Если СтруктураОтбора.Количество() = 0 Тогда СтруктураОтбора = Неопределено; КонецЕсли; //КонецЕсли; Если Не ЗначениеЗаполнено(НепустоеЗначение) Или СтруктураОтбора <> Неопределено Тогда НепустоеЗначение = ПолучитьНепустоеЗначениеПоОписаниюТипов(ПолеТаблицыБД.ТипЗначения, СтруктураОтбора); КонецЕсли; Попытка Объект[ИмяПоля] = НепустоеЗначение; Исключение КонецПопытки; КонецЦикла; КонецФункции Функция ПолучитьНепустоеЗначениеПоОписаниюТипов(ОписаниеТипов, СтруктураОтбора = Неопределено) Экспорт #Если Сервер И Не Сервер Тогда ОписаниеТипов = Новый ОписаниеТипов(); #КонецЕсли Типы = ОписаниеТипов.Типы(); Если Типы.Количество() = 0 Тогда Возврат Неопределено; КонецЕсли; Для Каждого Тип Из ОписаниеТипов.Типы() Цикл Если ирОбщий.ЛиТипСсылкиБДЛкс(Тип, Ложь) Тогда ВыбранныйТипЗначения = Тип; Прервать; КонецЕсли; КонецЦикла; Если ВыбранныйТипЗначения = Неопределено Тогда ВыбранныйТипЗначения = Типы[0]; КонецЕсли; МетаданныеТипа = Метаданные.НайтиПоТипу(ВыбранныйТипЗначения); Если МетаданныеТипа <> Неопределено Тогда ИмяТаблицыБД = МетаданныеТипа.ПолноеИмя(); Если ирОбщий.ЛиТипСсылкиТочкиМаршрутаЛкс(ВыбранныйТипЗначения) Тогда ИмяТаблицыБД = ИмяТаблицыБД + "." + ирОбщий.ПеревестиСтроку("Точки"); КонецЕсли; Если СтруктураОтбора <> Неопределено Или СтрЧислоВхождений(ИмяТаблицыБД, ".") > 1 Тогда ПостроительЗапроса = Новый ПостроительЗапроса("ВЫБРАТЬ ПЕРВЫЕ 1 Т.* ИЗ " + ИмяТаблицыБД + " КАК Т"); ПостроительЗапроса.ЗаполнитьНастройки(); //Пока ПостроительЗапроса.Отбор.Количество() > 0 Цикл // ПостроительЗапроса.Отбор.Удалить(0); //КонецЦикла; ПостроительЗапроса.ВыбранныеПоля.Очистить(); ПостроительЗапроса.ВыбранныеПоля.Добавить("Ссылка"); //ирОбщий.УстановитьОтборПоСтруктуреЛкс(ПостроительЗапроса.Отбор, СтруктураОтбора); Если СтруктураОтбора <> Неопределено Тогда Для Каждого КлючИЗначение Из СтруктураОтбора Цикл Если ПостроительЗапроса.ДоступныеПоля.Найти(КлючИЗначение.Ключ) <> Неопределено Тогда Попытка ирОбщий.НайтиДобавитьЭлементОтбораЛкс(ПостроительЗапроса, КлючИЗначение.Ключ,, КлючИЗначение.Значение); Исключение ОписаниеОшибки = ОписаниеОшибки(); // Для отладки КонецПопытки; КонецЕсли; КонецЦикла; КонецЕсли; //Если ПостроительЗапроса.Отбор.Количество() > 0 Тогда Выборка = ПостроительЗапроса.Результат.Выбрать(); Если Выборка.Следующий() Тогда НепустоеЗначение = Выборка.Ссылка; КонецЕсли; //КонецЕсли; Иначе // Эта ветка - для ускорения. Можно оставить только основную ветку, но учесть в ней ЭтоГруппа. Если Перечисления.ТипВсеСсылки().СодержитТип(ВыбранныйТипЗначения) Тогда ОбъектМДТипа = Метаданные.НайтиПоТипу(ВыбранныйТипЗначения); НепустоеЗначение = Перечисления[ОбъектМДТипа.Имя][ОбъектМДТипа.ЗначенияПеречисления[0].Имя]; Иначе МенеджерТипа = ирОбщий.ПолучитьМенеджерЛкс(МетаданныеТипа); Выборка = МенеджерТипа.Выбрать(); Пока Выборка.Следующий() Цикл Попытка ЭтоГруппа = Выборка.ЭтоГруппа; Исключение ЭтоГруппа = Ложь; КонецПопытки; Если Не ЭтоГруппа Тогда НепустоеЗначение = Выборка.Ссылка; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; Если НепустоеЗначение = Неопределено Тогда КлючПоиска = Новый Структура("Метаданные, ПредставлениеСвойств", "", ""); КлючПоиска.Метаданные = МетаданныеТипа.ПолноеИмя(); Если СтруктураОтбора <> Неопределено Тогда КлючПоиска.ПредставлениеСвойств = ирОбщий.ПолучитьПредставлениеСтруктурыЛкс(СтруктураОтбора); КонецЕсли; Если НедостающиеОбъекты.НайтиСтроки(КлючПоиска).Количество() = 0 Тогда СтрокаНедостающегоОбъекта = НедостающиеОбъекты.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаНедостающегоОбъекта, КлючПоиска); Иначе СтрокаНедостающегоОбъекта = Неопределено; КонецЕсли; Если СтруктураОтбора <> Неопределено И СтруктураОтбора.Количество() > 0 Тогда Если СтрокаНедостающегоОбъекта <> Неопределено Тогда СтрокаНедостающегоОбъекта.Свойства = СтруктураОтбора; КонецЕсли; Иначе Массив = Новый Массив(); Массив.Добавить(Новый УникальныйИдентификатор()); НепустоеЗначение = Новый (ВыбранныйТипЗначения, Массив); КонецЕсли; КонецЕсли; Иначе НепустоеЗначение = мНепустыеЗначения[ВыбранныйТипЗначения]; Если НепустоеЗначение = Неопределено Тогда Попытка НепустоеЗначение = Новый (ВыбранныйТипЗначения); Исключение КонецПопытки; КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(НепустоеЗначение) Тогда мНепустыеЗначения[ВыбранныйТипЗначения] = НепустоеЗначение; КонецЕсли; Возврат НепустоеЗначение; КонецФункции Функция ЕстьИгнориуемыеСигнатуры(ОписаниеОшибки) Для Каждого Сигнатура Из ИгнорируемыеСигнатуры Цикл Если Сигнатура.Пометка И Найти(ОписаниеОшибки, Сигнатура.Строка) > 0 Тогда Возврат Истина; КонецЕсли; КонецЦикла; Возврат Ложь; КонецФункции Процедура ИнициализироватьНепустыеЗначения() Экспорт мНепустыеЗначения = Новый Соответствие(); мНепустыеЗначения.Вставить(Тип("Дата"), НачалоМесяца(ТекущаяДата()) + 33); мНепустыеЗначения.Вставить(Тип("Число"), 1); мНепустыеЗначения.Вставить(Тип("Строка"), "а"); мНепустыеЗначения.Вставить(Тип("Булево"), Истина); мНепустыеЗначения.Вставить(Тип("ХранилищеЗначения"), Новый ХранилищеЗначения(Неопределено)); мНепустыеЗначения.Вставить(Тип("ОписаниеТипов"), Новый ОписаниеТипов); мНепустыеЗначения.Вставить(Тип("УникальныйИдентификатор"), Новый УникальныйИдентификатор()); КонецПроцедуры Ошибки.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("Строка")); Ошибки.Колонки.Добавить("Операция", Новый ОписаниеТипов("Строка")); Ошибки.Колонки.Добавить("Контекст", Новый ОписаниеТипов("Строка")); Ошибки.Колонки.Добавить("ОписаниеОшибки", Новый ОписаниеТипов("Строка")); Ошибки.Колонки.Добавить("ПодробноеОписаниеОшибки", Новый ОписаниеТипов("Строка")); Ошибки.Колонки.Добавить("ИнформацияОбОшибке"); НедостающиеОбъекты.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("Строка")); НедостающиеОбъекты.Колонки.Добавить("ПредставлениеСвойств", Новый ОписаниеТипов("Строка")); НедостающиеОбъекты.Колонки.Добавить("Свойства"); НедостающиеОбъекты.Индексы.Добавить("Метаданные, ПредставлениеСвойств"); ИнициализироватьНепустыеЗначения(); //ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла); //ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf"; //ирПортативный #Если Клиент Тогда //ирПортативный Контейнер = Новый Структура(); //ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер); //ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда //ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля); //ирПортативный ирПортативный.Открыть(); //ирПортативный КонецЕсли; //ирПортативный #Иначе //ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта //ирПортативный #КонецЕсли //ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер"); //ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");