RDT1C/DataProcessors/ирИмитаторКонстантаМенеджер/Ext/ObjectModule.bsl
Администратор 2b21a3edc8 Динамический список
+Добавлена команда "Колонки..." для расширенной настройки колонок
        +В обычной форме реализовано сохранение порядка для каждой таблицы
        +В управляемой форме реализовано сохранение пользовательских настроек для каждой таблицы
        +Пользовательские отборы теперь создают элементы отбора на корневом уровне таблицы пользовательских настроек
    Форма списка значений
        +Добавлены кнопки для группой установки/снятия пометок
    Редактор объекта БД
        *Исправлена ошибка параметризованного открытия
    Общее
        +В информацию для тех. поддержки добавлены вариант встроенного языка и код языка системы
        *Улучшена поддержка английского языка системы
        *Флажок запрета использования имитаторов объектов перенесен в форму параметров записи объектов
    Анализ журнала регистрации
        +Теперь по умолчанию открывается с отбором по ошибкам и предупреждениям
        *Исправлено отображение количества строк в выборке
    Настройка техножурнала
        +Добавлен шаблон "Реструктуризация базы"
        *Флажок сбора ожиданий СУБД (dbmslocks) возвращен на основную форму (в элемент CONFIG)
    Контекстная подсказка
        *Исправлена ошибка в некоторых случаях при вычислении свойств отбора набора записей регистра в клиент-серверной базе под управляемое приложение
    Редактор констант
        *Исправлена ошибка записи в клиент-серверной базе с включенным флажком "Объекты на сервере"
2018-08-19 21:02:48 +03:00

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