RDT1C/DataProcessors/ирИмитаторКонстантаМенеджер/Ext/ObjectModule.bsl
Администратор cd1d58f084 Общее
*Исправлена свежая ошибка в непортативных вариантах в клиент-серверном режиме при обращении к объектам данных в режиме "Объекты на сервере"
    Редактор объекта БД
        *Исправлена свежая ошибка чтения движений документа, если документ не может двигать регистры
    Поиск дублей и замена ссылок
        *Исправлена свежая ошибка чтения движений документа, если документ не может двигать регистры
2018-04-02 21:51:54 +03:00

153 lines
8.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Перем _Тип Экспорт;
Процедура Конструктор(Объект) Экспорт
ЭтотОбъект.ДополнительныеСвойства = Объект.ДополнительныеСвойства;
ЭтотОбъект.ОбменДанными = ирОбщий.СтруктураОбменаДаннымиОбъектаЛкс(Объект);
ЭтотОбъект._Тип = ТипЗнч(Объект);
ОбъектМД = Объект.Метаданные();
ПоляТаблицыБД = ирОбщий.ПолучитьПоляТаблицыМДЛкс(ОбъектМД,,,, Ложь);
Данные = Новый Структура;
ПоляШапки = Новый Массив;
Для Каждого СтрокаПоля Из ПоляТаблицыБД Цикл
Данные.Вставить(СтрокаПоля.Имя);
КонецЦикла;
ЗаполнитьЗначенияСвойств(Данные, Объект);
ЭтотОбъект.Данные = Данные;
КонецПроцедуры
Функция Снимок() Экспорт
СтруктураОбъекта = Новый Структура;
СтруктураОбъекта.Вставить("ОбменДанными", ОбменДанными);
СтруктураОбъекта.Вставить("ДополнительныеСвойства", ДополнительныеСвойства);
СтруктураОбъекта.Вставить("Данные", Данные);
СтруктураОбъекта.Вставить("_Тип", _Тип);
ЗаписьXML = ирОбщий.ОптимальныйПотоковыйПисательЛкс();
#Если Сервер И Не Сервер Тогда
ЗаписьXML = Новый ЗаписьXML;
#КонецЕсли
ЗаписьXML.УстановитьСтроку();
Попытка
Если ТипЗнч(ЗаписьXML) = Тип("ЗаписьXML") Тогда
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СтруктураОбъекта, НазначениеТипаXML.Явное);
Иначе
СериализаторXDTO.ЗаписатьJSON(ЗаписьXML, СтруктураОбъекта, НазначениеТипаXML.Явное);
КонецЕсли;
Исключение
// Убираем неудобные типы значений из дополнительных свойств объекта http://devtool1c.ucoz.ru/forum/2-832-1#3587
СтруктураОбъекта.Вставить("ДополнительныеСвойства"); // Криво
Если ТипЗнч(ЗаписьXML) = Тип("ЗаписьXML") Тогда
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СтруктураОбъекта, НазначениеТипаXML.Явное);
Иначе
СериализаторXDTO.ЗаписатьJSON(ЗаписьXML, СтруктураОбъекта, НазначениеТипаXML.Явное);
КонецЕсли;
КонецПопытки;
Результат = ЗаписьXML.Закрыть();
Возврат Результат;
КонецФункции
Процедура ЗагрузитьСнимок(Снимок) Экспорт
ЧтениеXML = ирОбщий.ОптимальныйПотоковыйЧитательЛкс();
#Если Сервер И Не Сервер Тогда
ЧтениеXML = Новый ЧтениеXML;
#КонецЕсли
ЧтениеXML.УстановитьСтроку(Снимок);
Если ТипЗнч(ЧтениеXML) = Тип("ЗаписьXML") Тогда
СтруктураОбъекта = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
Иначе
СтруктураОбъекта = СериализаторXDTO.ПрочитатьJSON(ЧтениеXML);
КонецЕсли;
ЧтениеXML.Закрыть();
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураОбъекта,, "Данные");
Если Данные <> Неопределено Тогда
Данные.Очистить();
ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(СтруктураОбъекта.Данные, Данные);
Иначе
ЭтотОбъект.Данные = СтруктураОбъекта.Данные;
КонецЕсли;
КонецПроцедуры
Функция КлючОбъекта()
Результат = Неопределено;
Возврат Результат;
КонецФункции
Функция ОбъектБД() Экспорт
КлючОбъекта = КлючОбъекта();
Результат = ирОбщий.ОбъектБДПоКлючуЛкс(Метаданные.НайтиПоТипу(_Тип).ПолноеИмя(), КлючОбъекта,, Ложь, Ложь).Данные;
ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(ДополнительныеСвойства, Результат.ДополнительныеСвойства);
ирОбщий.ВосстановитьСтруктуруОбменаДаннымиОбъектаЛкс(Результат, ОбменДанными);
ЗаполнитьЗначенияСвойств(Результат, Данные);
Возврат Результат;
КонецФункции
Процедура Прочитать(НаСервере = Истина) Экспорт
Если НаСервере Тогда
Снимок = Снимок();
ирСервер.ПрочитатьОбъектЧерезИмитаторЛкс(Снимок, ТипЗнч(ЭтотОбъект));
ЗагрузитьСнимок(Снимок);
Иначе
ОбъектБД = ОбъектБД();
ОбъектБД.Прочитать();
Конструктор(ОбъектБД);
КонецЕсли;
КонецПроцедуры
Функция Записать() Экспорт
#Если Не Сервер Тогда
Снимок = Снимок();
ирСервер.ЗаписатьОбъектXMLЛкс(Снимок,,,,,, ТипЗнч(ЭтотОбъект));
ЗагрузитьСнимок(Снимок);
#Иначе
ОбъектБД = ОбъектБД();
ОбъектБД.Записать();
Конструктор(ОбъектБД);
#КонецЕсли
КонецФункции
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
ОбъектБД = ОбъектБД();
Отказ = Не ОбъектБД.ПроверитьЗаполнение();
Конструктор(ОбъектБД);
КонецПроцедуры
Функция ДанныеВСтрокуXMLЧерезXDTO(Знач ИспользоватьXDTO = Истина, ВызыватьИсключение = Истина) Экспорт
#Если Не Сервер Тогда
Снимок = Снимок();
Результат = ирСервер.ОбъектБДИзИмитатораВСтрокуXMLЛкс(Снимок, ТипЗнч(ЭтотОбъект), ИспользоватьXDTO, ВызыватьИсключение);
#Иначе
ОбъектБД = ОбъектБД();
Результат = ирОбщий.СохранитьОбъектВВидеСтрокиXMLЛкс(ОбъектБД, ИспользоватьXDTO, , ВызыватьИсключение);
#КонецЕсли
Возврат Результат;
КонецФункции
Процедура ДанныеИзСтрокиXMLЧерезXDTO(СтрокаXML, Знач ИспользоватьXDTO = Истина, СообщатьОбОшибках = Истина) Экспорт
#Если Не Сервер Тогда
Снимок = ирСервер.ОбъектБДВИмитаторИзСтрокиXML(СтрокаXML, ТипЗнч(ЭтотОбъект), ИспользоватьXDTO, СообщатьОбОшибках);
ЗагрузитьСнимок(Снимок);
#Иначе
ОбъектБД = ирОбщий.ВосстановитьОбъектИзСтрокиXMLЛкс(СтрокаXML,, ИспользоватьXDTO, СообщатьОбОшибках);
Конструктор(ОбъектБД);
#КонецЕсли
КонецПроцедуры