RDT1C/DataProcessors/ирИмитаторНаборЗаписей/Ext/ObjectModule.bsl
Администратор 01c083b00a Редактор объекта БД
*Переработан код для реализации принципа "события на сервере" при включенном флажке "Запись на сервере" в не портативных вариантах
        +Добавлена управляемая форма для тестирования (можно открыть интерфейсной панелью или назначить в качестве доп. формы обработки)
    Настройка техножурнала
        *Устранена несовместимость с режимом совместимости 8.3.11
    Конструктор запроса
        *Исправлена свежая ошибка при вводе фильтра доступных таблиц
        *Исправлено вычисление квалификаторов полей
        +Реализовано отображение квалификаторов полей
    Подбор и обработка объектов
        *Исправлена свежая ошибка закрытия формы с непустым списком выбранных обработок
    Консоль запросов
        *Исправлено обновление количества в строке дереве запросов при выполнении пакетного запроса кончающегося уничтожением таблицы
        *Работа таблицы свойств строки результата приведена к единообразию с редактором строки табличного поля
    Вывод строк табличного поля
        *Исправлен вывод пустого результат из динамического списка с флажком "Только выделенные строки"
    Редактор строки табличного поля
        *Исправлена ошибка открытия в портативном варианте
    Поиск дублей и замена ссылок
        *Исправлено низкое качество поиска нечетким сравнением новой внешней компонентой
2017-09-11 22:34:50 +03:00

168 lines
8.7 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.

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