RDT1C/DataProcessors/ирИмитаторНаборЗаписей/Ext/ObjectModule.bsl
Администратор 620ce4d601 // Версия 84
Конструктор запросов
        *Исправлена некорректная установка типа группы отбора кнопкой "Группа-Или" в условии связи таблиц
    Общее
        *Исправлена свежая некритичная ошибка при первом в истории запуске варианта Расширение в базе
        *Исправлена работа флажка "пропускать пустые" в форме разбора текста
        *Исправлен ввод ссылки документа по представлению с крайними непечатными символами
        *Флажок "Запись на сервере" во всех инструментах переименован в "Объекты на сервере"
        *Отключен вывод ряда диагностических сообщений пользователю в режиме управляемого приложения при открытии первой в сеансе формы инструментов
    Исследователь объектов
        +Включен множественный режим выделения строк в форме исследователя коллекций
    Консоль запросов
        *Исправлена проблема в некоторых случаях не выполнения сохранения файла после открытия файла восстановления
    Редактор объекта БД
        *Оптимизировано чтение движений документа
        *В управляемой форме исправлена ошибка записи движений документа
        *Исправлено обновление заголовка страницы "Движения" в управляемой форме при включении флажка "Вместе с движениями"
        +В таблице ссылающихся объектов реализовано более подробное представление ключей записей независимых регистров без обращения к БД
    Поиск дублей и замена ссылок
        *Оптимизировано чтение движений документов
        *Исправлена ошибка выполнения замены в независимых регистрах в некоторых конфигурациях
    Загрузка табличных данных
        +Реализована поддержка режима "Объекты на сервере"
    Редактор изменений на узле
        +Реализована поддержка режима "Объекты на сервере"
    Удаление объектов с контролем ссылок
        +В таблице ссылающихся объектов реализовано более подробное представление ключей записей независимых регистров без обращения к БД
        +По двойному щелчку на строке ссылающейся строки независимого регистра теперь открывается эта строка
        *Исправлена проблема не нахождения ссылающихся констант в некоторых случаях
    Управление COM классами 1С
        +Добавлены кнопка проверки создания COM объектов и колонка с результатом проверки
    Подбор и обработка объектов
        *Устранена ошибочная доступность кнопок "Сохранить/Загрузить алгоритм" в варианте Расширение
2018-04-01 23:43:34 +03:00

227 lines
12 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, СообщатьОбОшибках);
Конструктор(ОбъектБД);
#КонецЕсли
КонецПроцедуры