mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-18 21:54:12 +00:00
*Проведены оптимизации частотного кода
*Ускорено построение внутренней таблицы всех таблиц БД
*Исправлена внесенная в 4.45 ошибка открытия любой формы подсистемы в базе с режимом совместимости "Версия 8.1"
*У общей команды ирРедактироватьОбъектИзАктивнойФормы исправлено сочетание клавиш
Удаление объектов с контролем ссылок
*Ускорен контроль ссылок
Вывод строк табличного поля
*Ускорен вывод в таблицу значений без колонок типов и идентификаторов
*Исправлена ошибка вывода полного ссылочного динамического списка при выключенном флажке "Без оформления"
+Добавлен вывод колонки идентификатора ссылки при выводе динамического списка и включенном флажке "Идентификаторы"
Сравнение таблиц
+Возвращена индикация прогресса сравнения
*Исправлен фильтр в диалоге выбора файла
*После изменения сравниваемой таблицы значений теперь очищается поле имени файла ее табличного документа
Анализ техножурнала
*Ускорено чтение логов
Консоль кода
+Добавлены кнопки "В однострочный" и "Из однострочного" для преобразования кода в/из однострочного вида для повышения скорости работы
*Кнопка "Адаптировать" переименована в "Из метода"
Поиск дублей и замена ссылок
*Исправлена ошибка поиска дублей при наличии дублей по строковому полю фиксированной длины
+Добавлен вывод всех полей из произвольного запроса в списке элементов текущей группы
*Исправлена внесенная в 4.45 проблема не оптимального чтения движений регистров бухгалтерии
Динамический список
*Улучшено начальное расположение колонок списка в управляемой форме
*Исправлено выравнивание текста идентификатора ссылки в управляемой форме
Редактор пользователей
*Команда "Установить настройки..." переименована в "Изменить выбранных..." и доработана для групповой установки свойств
Конструктор запроса
*Исправлена нежелательная установка флажка "Использование" у старой строки элемента условия связи при переходе к новой
Редактор объекта БД
*В управляемой форме исправлена вертикальная группировка элементов формы
*Исправлена внесенная в 4.45 проблема не оптимального чтения движений регистров бухгалтерии
*Исправлена внесенная в 4.45 ошибка изменения регистрации
Редактор изменений на узлах
*Исправлена внесенная в 4.45 ошибка изменения регистрации
227 lines
12 KiB
Plaintext
227 lines
12 KiB
Plaintext
Перем _СчитанныйСнимок Экспорт;
|
||
Перем _Тип Экспорт;
|
||
Перем _Построитель;
|
||
|
||
Процедура Конструктор(Объект) Экспорт
|
||
|
||
ЭтотОбъект.ДополнительныеСвойства = Объект.ДополнительныеСвойства;
|
||
ЭтотОбъект.ОбменДанными = ирОбщий.СтруктураОбменаДаннымиОбъектаЛкс(Объект);
|
||
ЭтотОбъект._Тип = ТипЗнч(Объект);
|
||
ЭтотОбъект.Данные = Объект.Выгрузить();
|
||
|
||
//ЭтотОбъект.Отбор = Новый Структура;
|
||
//Для Каждого ЭлементОтбора Из Объект.Отбор Цикл
|
||
// Имитатор = Новый Структура("Имя, Использование, Значение");
|
||
// ЗаполнитьЗначенияСвойств(Имитатор, ЭлементОтбора);
|
||
// Отбор.Вставить(ЭлементОтбора.Имя, Имитатор);
|
||
//КонецЦикла;
|
||
_Построитель = Новый ПостроительЗапроса();
|
||
ЭтотОбъект.Отбор = _Построитель.Отбор;
|
||
ДоступныеПоляОтбора = Отбор.ПолучитьДоступныеПоля();
|
||
Для Каждого ЭлементОтбора Из Объект.Отбор Цикл
|
||
Поле = ДоступныеПоляОтбора.Добавить(ЭлементОтбора.Имя, ЭлементОтбора.Имя, ЭлементОтбора.ТипЗначения);
|
||
Поле.Отбор = Истина;
|
||
КонецЦикла;
|
||
Отбор.УстановитьДоступныеПоля(ДоступныеПоляОтбора);
|
||
ирОбщий.СкопироватьОтборПостроителяЛкс(Отбор, Объект.Отбор);
|
||
|
||
Если Не Объект.Модифицированность() Тогда
|
||
ЭтотОбъект._СчитанныйСнимок = Снимок(Истина);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция Снимок(ТолькоДанные = Ложь) Экспорт
|
||
|
||
СтруктураОтбора = Новый Структура;
|
||
Для Каждого ЭлементОтбора Из Отбор Цикл
|
||
Имитатор = Новый Структура("Использование, Значение, ТипЗначения");
|
||
ЗаполнитьЗначенияСвойств(Имитатор, ЭлементОтбора);
|
||
СтруктураОтбора.Вставить(ЭлементОтбора.Имя, Имитатор);
|
||
КонецЦикла;
|
||
СтруктураОбъекта = Новый Структура;
|
||
Если Не ТолькоДанные Тогда
|
||
СтруктураОбъекта.Вставить("ОбменДанными", ОбменДанными);
|
||
СтруктураОбъекта.Вставить("ДополнительныеСвойства", ДополнительныеСвойства);
|
||
СтруктураОбъекта.Вставить("_СчитанныйСнимок", _СчитанныйСнимок);
|
||
СтруктураОбъекта.Вставить("_Тип", _Тип);
|
||
КонецЕсли;
|
||
СтруктураОбъекта.Вставить("Отбор", СтруктураОтбора);
|
||
СтруктураОбъекта.Вставить("Данные", Данные);
|
||
Запись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, СообщатьОбОшибках);
|
||
Конструктор(ОбъектБД);
|
||
#КонецЕсли
|
||
|
||
КонецПроцедуры
|