Перем _Тип Экспорт; Процедура Конструктор(Объект) Экспорт ЭтотОбъект.ДополнительныеСвойства = Объект.ДополнительныеСвойства; ЭтотОбъект.ОбменДанными = ирОбщий.СтруктураОбменаДаннымиОбъектаЛкс(Объект); ЭтотОбъект._Тип = ТипЗнч(Объект); ОбъектМД = Объект.Метаданные(); ПоляТаблицыБД = ирОбщий.ПолучитьПоляТаблицыМДЛкс(ОбъектМД,,,, Ложь); ЭтотОбъект.Данные = Новый Структура; Для Каждого СтрокаПоля Из ПоляТаблицыБД Цикл Данные.Вставить(СтрокаПоля.Имя); КонецЦикла; ЗаполнитьЗначенияСвойств(Данные, Объект); КонецПроцедуры Процедура КонструкторПоКлючу(ИмяОсновнойТаблицы) Экспорт ЭтотОбъект.ДополнительныеСвойства = Новый Структура; ЭтотОбъект.ОбменДанными = ирОбщий.СтруктураОбменаДаннымиОбъектаЛкс(); ЭтотОбъект._Тип = Тип(СтрЗаменить(ИмяОсновнойТаблицы, ".", "МенеджерЗначения.")); ПоляТаблицыБД = ирОбщий.ПоляТаблицыБДЛкс(ИмяОсновнойТаблицы); ЭтотОбъект.Данные = Новый Структура; Для Каждого СтрокаПоля Из ПоляТаблицыБД Цикл Данные.Вставить(СтрокаПоля.Имя); КонецЦикла; КонецПроцедуры Функция Снимок(ТолькоДанные = Ложь, РезультатВВидеСтроки = Истина) Экспорт СтруктураОбъекта = Новый Структура; Если Не ТолькоДанные Тогда СтруктураОбъекта.Вставить("ОбменДанными", ОбменДанными); СтруктураОбъекта.Вставить("ДополнительныеСвойства", ДополнительныеСвойства); КонецЕсли; СтруктураОбъекта.Вставить("Данные", Данные); СтруктураОбъекта.Вставить("_Тип", _Тип); Если РезультатВВидеСтроки Тогда ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); Попытка СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СтруктураОбъекта, НазначениеТипаXML.Явное); Исключение Если Не ТолькоДанные Тогда СтруктураОбъекта.ДополнительныеСвойства = ирОбщий.УдалитьМутабельныеЗначенияВСтруктуреЛкс(СтруктураОбъекта.ДополнительныеСвойства); КонецЕсли; СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СтруктураОбъекта, НазначениеТипаXML.Явное); КонецПопытки; Результат = ЗаписьXML.Закрыть(); Иначе Если Не ТолькоДанные Тогда СтруктураОбъекта.ДополнительныеСвойства = ирОбщий.УдалитьМутабельныеЗначенияВСтруктуреЛкс(СтруктураОбъекта.ДополнительныеСвойства); КонецЕсли; Результат = СтруктураОбъекта; КонецЕсли; Возврат Результат; КонецФункции Процедура ЗагрузитьСнимок(Снимок, ТолькоДанные = Ложь) Экспорт Если ТолькоДанные Тогда СтрокаЗагружаемыхСвойств = "_Тип"; Иначе СтрокаЗагружаемыхСвойств = "_Тип, ОбменДанными, ДополнительныеСвойства"; КонецЕсли; ЧтениеXML = Новый ЧтениеXML; Если ТипЗнч(Снимок) = Тип("Строка") Тогда ЧтениеXML.УстановитьСтроку(Снимок); СтруктураОбъекта = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); ЧтениеXML.Закрыть(); Иначе СтруктураОбъекта = Снимок; КонецЕсли; ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураОбъекта, СтрокаЗагружаемыхСвойств); Если Данные <> Неопределено Тогда Данные.Очистить(); ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(СтруктураОбъекта.Данные, Данные); Иначе ЭтотОбъект.Данные = СтруктураОбъекта.Данные; КонецЕсли; КонецПроцедуры Функция КлючОбъекта() Результат = Неопределено; Возврат Результат; КонецФункции Функция ОбъектБД() Экспорт КлючОбъекта = КлючОбъекта(); Результат = ирОбщий.ОбъектБДПоКлючуЛкс(Метаданные.НайтиПоТипу(_Тип).ПолноеИмя(), КлючОбъекта,, Ложь, Ложь).Данные; Если ДополнительныеСвойства <> Неопределено Тогда ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(ДополнительныеСвойства, Результат.ДополнительныеСвойства); КонецЕсли; ирОбщий.ВосстановитьСтруктуруОбменаДаннымиОбъектаЛкс(Результат, ОбменДанными); ЗаполнитьЗначенияСвойств(Результат, Данные); Возврат Результат; КонецФункции Процедура Прочитать(НаСервере = Неопределено, Блокировать = Истина) Экспорт ОбъектБД = Метаданные.НайтиПоТипу(_Тип); ПолноеИмяМД = ОбъектБД.ПолноеИмя(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ Т.* ИЗ " + ПолноеИмяМД + " КАК Т"; Если Блокировать Тогда ирОбщий.ЗаблокироватьКонстантуЛкс(ЭтотОбъект, Истина, РежимБлокировкиДанных.Разделяемый); КонецЕсли; ЗаполнитьЗначенияСвойств(Данные, Запрос.Выполнить().Выгрузить()[0]); КонецПроцедуры Функция Записать() Экспорт #Если Не Сервер Тогда Снимок = Снимок(); ирСервер.ЗаписатьОбъектXMLЛкс(Снимок,,,,,, ТипЗнч(ЭтотОбъект)); ЗагрузитьСнимок(Снимок); #Иначе ОбъектБД = ОбъектБД(); ОбъектБД.Записать(); Конструктор(ОбъектБД); #КонецЕсли КонецФункции Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ОбъектБД = ОбъектБД(); Отказ = Не ОбъектБД.ПроверитьЗаполнение(); Конструктор(ОбъектБД); КонецПроцедуры Функция ДанныеВСтрокуXMLЧерезXDTO(Знач ИспользоватьXDTO = Истина, ВызыватьИсключение = Истина, Знач Сериализатор = Неопределено) Экспорт #Если Не Сервер Тогда Снимок = Снимок(Истина); Результат = ирСервер.ОбъектБДИзИмитатораВСтрокуXMLЛкс(Снимок, ТипЗнч(ЭтотОбъект), ИспользоватьXDTO, ВызыватьИсключение); #Иначе ОбъектБД = ОбъектБД(); Результат = ирОбщий.СохранитьОбъектВВидеСтрокиXMLЛкс(ОбъектБД, ИспользоватьXDTO, , ВызыватьИсключение,, Сериализатор); #КонецЕсли Возврат Результат; КонецФункции Процедура ДанныеИзСтрокиXMLЧерезXDTO(СтрокаXML, Знач ИспользоватьXDTO = Истина, СообщатьОбОшибках = Истина) Экспорт #Если Не Сервер Тогда Снимок = ирСервер.ОбъектБДВИмитаторИзСтрокиXML(СтрокаXML, ТипЗнч(ЭтотОбъект), ИспользоватьXDTO, СообщатьОбОшибках); ЗагрузитьСнимок(Снимок); #Иначе ОбъектБД = ирОбщий.ВосстановитьОбъектИзСтрокиXMLЛкс(СтрокаXML,, ИспользоватьXDTO, СообщатьОбОшибках); Конструктор(ОбъектБД); #КонецЕсли КонецПроцедуры