RDT1C/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Ext/ObjectModule.bsl
Администратор e2082add8d Консоль запросов
*Исправлена ошибка команды "Структура формы"
    Административная регистрация com-компонент
        +Добавлена кнопка "Запустить от имени администратора"
        *Исправлено выполнение административной регистрации под пользователем домена, являющимся локальным администратором
    Общее
        *Устранены проблемы с антивирусным ПО путем возврата к использованию старой версии утилиты hstart
    Подбор и обработка объектов
        +В схему компоновки добавлены поля-функции ТИПЗНАЧЕНИЯ() от полей составных типов

3.78
    Консоль запросов
        *Устранено ошибочное использование параметров в фигурных скобках при наличии параметра с типом "Выражение СКД"
        +В подменю "Вставка" для поля текста запроса добавлена команда "Ссылка из буфера"
        *Исправлено вычисление значений параметров для вложенных компоновок из макета компоновки
        *Исправлено некорректное извлечение вычисляемых параметров из макета компоновки
    Конструктор запроса
        +Добавлена поддержка типа запроса TRUNCATE TABLE
        +Для запроса типа WQL при двойном клике на доступном поле доступной таблицы поле теперь добавляется в выбранные поля
    Анализ журнала регистрации
        +Реализованы команды сортировки для списков значений отбора
        *Исправлено долгое обновление табличного поля отбора с большими списками
    Динамический список
        *В командую панель возвращены все стандартные кнопки
        *При открытии с установкой таблицы фокус ввода теперь устанавливается в табличное поле
    Редактор объекта БД
        *Инструмент "Поиск ссылок на объект" перенесен сюда в виде закладки
        +Добавлена поддержка перечислений и точек маршрута
    Интерфейсная панель
        *Исправлены ошибки при обработке веток не метаданных
    Общее
        +Обновлено внутренне описание платформы от версии 8.3.9
        *Исправлены ошибки при открытии ссылок в режиме совместимости 8.1
        *Обеспечена компипяция в режиме совместимости 8.3.9
        *Кнопка открытия настроек справочника Алгоритмы перенесена с общей панели инструментов в формы списка справочника
    Различные значения колонки
        *Исправлены ошибки при обработке булевых колонок
    Консоль кода
        +В подменю "Вставка" добавлена команда "Ссылка из буфера"
    Поиск дублей и замена ссылок
        *Исправлен учет равенства реквизитов при поиске по похожим словам
    Структура хранения БД
        *Исправлена ошибка при нажатии "Показать индекс" в контекстном меню таблицы "Наборы полей" на закладке "Индексы"
    Поиск ссылок на объект
        *Перенесен в инструмент "Редактор объекта БД" в виде закладки

3.77
    Общее
        *Элевация оставлена только в форме административной регистрации COM-компонент, в настройке техножурнала и при изменении параметров служб сервера 1С
        *Элевация теперь используется только если у учетной записи Windows есть административные права
        *Улучшены сообщения пользователю при проблемах регистрации COM компонент
        *Открытие формы объекта по двойному клику на ячейках табличных полей теперь выполняется без получения объекта
        *Улучшена установка ширины динамически добавляемых колонок табличных полей
    Административная регистрация COM компонент
        +Добавлены кнопки "Снять флажки" и "Установить флажки"
    Редактор объекта БД
        *Исправлено распознавание ссылки документа по представлению в поле выбора объекта
        *Исправлено переключение режима редактирования независимого регистра при изменении отбора командами "снять все" и "установить все"
    Динамический список
        *При открытии редактора объекта БД для добавления в независимый регистр сведений теперь включаются все элементы отбора
    Консоль запросов
        *Устранена ошибочная доступность для изменения флажков в коллекции результата запроса
        *Исправлена ошибка загрузки результата WQL запроса

3.76
    Управление службами сервера 1С
        *Улучшена диагностика ошибок
        +Добавлена элевация при изменении параметров служб
    Динамический список
        *Устранено свежее скрытие колонки со стандартной картинкой
    Интерфейсная панель
        +Добавлены перечисления
    Консоль запросов
        *Исправлена ошибка загрузки пустого результата запроса MSSQL
    Редактор констант
        +Включение функциональных опций теперь изменяет только булевы константы и не выполняет их запись
        *Реализован пропуск ошибок записи констант
    Конструктор запросов
        *Устранена ошибочная виртуальная таблица 1С ЗадачиПоИсполнителю  у задачи без адресации
    Редактор объекта БД
        *Флажок "Очищать по отбору чтения" теперь становится доступным только если в считанном наборе записей были строки
        +В режиме менеджера записи регистра сведений реализовано удаление
        *Исправлена свежая ошибка параметризованного открытия строки независимого регистра сведений
    Общее
        *Исправлена ошибка нажатия "Запустить обычное приложение" в тонком клиенте из формы "Невозможно выполнить действие"
2016-12-04 00:30:12 +03:00

249 lines
17 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КлючОбъектаБДЛкс(ОбъектБД, Истина);
Если ТипЗнч(ОбъектБД) = Тип("УдалениеОбъекта") Тогда
СтрокаРезультата.Таблица = ОбъектБД.Ссылка.Метаданные().ПолноеИмя();
Иначе
СтрокаРезультата.Таблица = ОбъектБД.Метаданные().ПолноеИмя();
КонецЕсли;
КонецЕсли;
Если ВывестиСообщение Тогда
Сообщить("Ошибка обработки объекта """ + СтрокаРезультата.КлючОбъекта + """: " + ОписаниеОшибки, СтатусСообщения.Внимание);
КонецЕсли;
КонецПроцедуры
Функция ВыполнитьВыгрузку() Экспорт
РезультатОбработки.Очистить();
ПараметрыОбработки = Новый Структура;
ПередВыгрузкойВсех(ПараметрыОбработки);
//ИмяВременногоКаталога = ПолучитьИмяВременногоФайла();
//СоздатьКаталог(ИмяВременногоКаталога);
//ФайлДанных = Новый файл(ИмяВременногоКаталога + "\Data.xml");
//ЗаписьXML = Новый ЗаписьXML;
//ЗаписьXML.ОткрытьФайл(ФайлДанных.ПолноеИмя);
//ЗаписьXML.ЗаписатьНачалоЭлемента("IRData");
//СчетчикВыгруженныхОбъектов = 0;
КоличествоОбъектов = ирОбщий.ПолучитьКоличествоИзмененийПоУзлуЛкс(УзелВыборкиДанных);
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоличествоОбъектов, "Выборка");
ВыборкаОбъектов = ПланыОбмена.ВыбратьИзменения(УзелВыборкиДанных, УзелВыборкиДанных.НомерОтправленного + 1);
Пока ВыборкаОбъектов.Следующий() Цикл
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
ОбъектБД = ВыборкаОбъектов.Получить();
ВыгрузитьОбъектБД(ПараметрыОбработки.ЗаписьXML, ОбъектБД, ПараметрыОбработки.СчетчикВыгруженныхОбъектов);
Если ВыгружатьДвиженияВместеСДокументами Тогда
ОбъектМД = ОбъектБД.Метаданные();
Если ирОбщий.ЛиКорневойТипДокументаЛкс(ирОбщий.ПолучитьПервыйФрагментЛкс(ОбъектМД.ПолноеИмя())) Тогда
ОбъектыМД = ирОбщий.ПолучитьМетаданныеНаборовЗаписейПоРегистраторуЛкс(ОбъектМД);
Для Каждого МетаРегистр из ОбъектыМД Цикл
ПолноеИмяМД = МетаРегистр.ПолноеИмя();
НаборЗаписей = Новый (СтрЗаменить(ПолноеИмяМД, ".", "НаборЗаписей."));
НаборЗаписей.Отбор.Регистратор.Установить(ОбъектБД.Ссылка);
НаборЗаписей.Прочитать();
ВыгрузитьОбъектБД(ПараметрыОбработки.ЗаписьXML, НаборЗаписей, ПараметрыОбработки.СчетчикВыгруженныхОбъектов);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ирОбщий.ОсвободитьИндикаторПроцессаЛкс(, Истина);
//ИнфоДанных = Новый Структура;
//ИнфоДанных.Вставить("КоличествоОбъектов", СчетчикВыгруженныхОбъектов);
//ИнфоДанных.Вставить("ИспользоватьXDTO", ИспользоватьXDTO);
//Сообщить("Выгружено объектов " + XMLСтрока(СчетчикВыгруженныхОбъектов));
//ЗаписьXML.ЗаписатьКонецЭлемента();
//ЗаписьXML.Закрыть();
//ФайлИнфо = Новый файл(ИмяВременногоКаталога + "\Info.xml");
//ЗаписьXML = Новый ЗаписьXML;
//ЗаписьXML.ОткрытьФайл(ФайлИнфо.ПолноеИмя);
//СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ИнфоДанных);
//ЗаписьXML.Закрыть();
//ЗаписьZIP = Новый ЗаписьZipФайла(ИмяФайла);
//ЗаписьZIP.Добавить(ФайлДанных.ПолноеИмя);
//ЗаписьZIP.Добавить(ФайлИнфо.ПолноеИмя);
//ЗаписьZIP.Записать();
//УдалитьФайлы(ИмяВременногоКаталога);
ПослеВыгрузкиВсех(ПараметрыОбработки);
Возврат Истина;
КонецФункции
Процедура ВыгрузитьОбъектБД(Знач ЗаписьXML, Знач ОбъектБД, СчетчикВыгруженныхОбъектов)
Попытка
Успех = Истина;
Если ИспользоватьXDTO Тогда
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ОбъектБД);
Иначе
ЗаписатьXML(ЗаписьXML, ОбъектБД);
КонецЕсли;
Исключение
Успех = Ложь;
ОбработатьИсключениеПоОбъекту(ОбъектБД, ОписаниеОшибки());
Если Не ПропускатьОшибки Тогда
ВызватьИсключение;
КонецЕсли;
КонецПопытки;
Если Успех Тогда
СчетчикВыгруженныхОбъектов = СчетчикВыгруженныхОбъектов + 1;
КонецЕсли;
КонецПроцедуры // ВыполнитьВыгрузку()
Функция ВыполнитьЗагрузку() Экспорт
РезультатОбработки.Очистить();
ИмяВременногоКаталога = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ИмяВременногоКаталога);
ЧтениеZip = Новый ЧтениеZipФайла(ИмяФайла);
ЧтениеZip.ИзвлечьВсе(ИмяВременногоКаталога);
ФайлИнфо = Новый файл(ИмяВременногоКаталога + "\Info.xml");
Если Не ФайлИнфо.Существует() Тогда
Возврат "Неверный формат файла данных!";
КонецЕсли;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ФайлИнфо.ПолноеИмя);
ИнфоДанных = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
ФайлДанных = Новый файл(ИмяВременногоКаталога + "\Data.xml");
Если Не ФайлИнфо.Существует() Тогда
Возврат "Неверный формат файла данных!";
КонецЕсли;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ФайлДанных.ПолноеИмя);
ЧтениеXML.Прочитать();
Если ЧтениеXML.ЛокальноеИмя <> "IRData" Тогда
ЧтениеXML.Закрыть();
УдалитьФайлы(ИмяВременногоКаталога);
Возврат "Неверный формат файла данных!";
КонецЕсли;
ЧтениеXML.Прочитать();
Сообщить("В файле данных заявлено " + ИнфоДанных.КоличествоОбъектов + " объектов");
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ИнфоДанных.КоличествоОбъектов, "Загрузка");
СчетчикСчитанныхОбъектов = 0;
Пока Истина Цикл
ирОбщий.ОбработатьИндикаторЛкс(Индикатор, СчетчикСчитанныхОбъектов);
Если ИнфоДанных.ИспользоватьXDTO Тогда
Если Не СериализаторXDTO.ВозможностьЧтенияXML(ЧтениеXML) Тогда
Прервать;
КонецЕсли;
ОбъектБД = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
Иначе
Если Не ВозможностьЧтенияXML(ЧтениеXML) Тогда
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ОписаниеОшибки = "Неизвестный тип элемента XML: " + ЧтениеXML.Имя;
Если Не ПропускатьОшибки Тогда
ВызватьИсключение ОписаниеОшибки;
Иначе
ОбработатьИсключениеПоОбъекту(ЧтениеXML.Имя, ОписаниеОшибки);
ЧтениеXML.Пропустить();
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
ЧтениеXML.Прочитать();
КонецЕсли;
Продолжить;
КонецЕсли;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
ОбъектБД = ПрочитатьXML(ЧтениеXML);
КонецЕсли;
СчетчикСчитанныхОбъектов = СчетчикСчитанныхОбъектов + 1;
#Если Сервер И Не Сервер Тогда
ОбъектБД = Справочники.ирАлгоритмы.СоздатьЭлемент();
#КонецЕсли
ОбъектБД.ОбменДанными.Отправитель = УзелОтправитель;
ЭтотОбъект.мПоследнийПрочитанныйОбъект = ОбъектБД;
Попытка
ирОбщий.ЗаписатьОбъектЛкс(ОбъектБД, ЗаписьНаСервере,,, Истина, БезАвторегистрацииИзменений);
Успех = Истина;
Исключение
Успех = Ложь;
ОбработатьИсключениеПоОбъекту(ОбъектБД, ОписаниеОшибки());
Если Не ПропускатьОшибки Тогда
ВызватьИсключение;
КонецЕсли;
КонецПопытки;
КонецЦикла;
ЧтениеXML.Закрыть();
ирОбщий.ОсвободитьИндикаторПроцессаЛкс(, Истина);
УдалитьФайлы(ИмяВременногоКаталога);
ЭтотОбъект.мПоследнийПрочитанныйОбъект = Неопределено;
Если СчетчикСчитанныхОбъектов <> ИнфоДанных.КоличествоОбъектов Тогда
Возврат "Считано объектов " + XMLСтрока(СчетчикСчитанныхОбъектов) + " из " + XMLСтрока(ИнфоДанных.КоличествоОбъектов) + " заявленных!";
КонецЕсли;
Возврат Истина;
КонецФункции // ВыполнитьВыгрузку()
Процедура ПередВыгрузкойВсех(Параметры) Экспорт
#Если Сервер И Не Сервер Тогда
Параметры = Новый Структура;
#КонецЕсли
ИмяВременногоКаталога = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ИмяВременногоКаталога);
ФайлДанных = Новый файл(ИмяВременногоКаталога + "\Data.xml");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ФайлДанных.ПолноеИмя);
ЗаписьXML.ЗаписатьНачалоЭлемента("IRData");
СчетчикВыгруженныхОбъектов = 0;
Параметры.Вставить("ЗаписьXML", ЗаписьXML);
Параметры.Вставить("ФайлДанных", ФайлДанных);
Параметры.Вставить("ИмяВременногоКаталога", ИмяВременногоКаталога);
Параметры.Вставить("СчетчикВыгруженныхОбъектов", СчетчикВыгруженныхОбъектов);
КонецПроцедуры // ПередГрупповойОбработкой()
Процедура ПослеВыгрузкиВсех(Параметры) Экспорт
#Если Сервер И Не Сервер Тогда
Параметры = Новый Структура;
#КонецЕсли
ИнфоДанных = Новый Структура;
ИнфоДанных.Вставить("КоличествоОбъектов", Параметры.СчетчикВыгруженныхОбъектов);
ИнфоДанных.Вставить("ИспользоватьXDTO", ИспользоватьXDTO);
Сообщить("Выгружено объектов " + XMLСтрока(Параметры.СчетчикВыгруженныхОбъектов));
Параметры.ЗаписьXML.ЗаписатьКонецЭлемента();
Параметры.ЗаписьXML.Закрыть();
ФайлИнфо = Новый файл(Параметры.ИмяВременногоКаталога + "\Info.xml");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ФайлИнфо.ПолноеИмя);
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ИнфоДанных);
ЗаписьXML.Закрыть();
ЗаписьZIP = Новый ЗаписьZipФайла(ИмяФайла);
ЗаписьZIP.Добавить(Параметры.ФайлДанных.ПолноеИмя);
ЗаписьZIP.Добавить(ФайлИнфо.ПолноеИмя);
ЗаписьZIP.Записать();
УдалитьФайлы(Параметры.ИмяВременногоКаталога);
КонецПроцедуры // ПередГрупповойОбработкой()
//ирПортативный #Если Клиент Тогда
//ирПортативный Контейнер = Новый Структура();
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = ВосстановитьЗначение("ирПолноеИмяФайлаОсновногоМодуля");
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный КонецЕсли;
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
//ирПортативный #КонецЕсли