Результат анализа данных загрузке. Анализирует данные к загрузке:
// Анализирует данные к загрузке:
// Вычисляет количество объектов к загрузке, размер файла сообщения обмена, другие служебные данные.
// Параметры:
// ИмяФайлаОбмена - Строка - имя файла сообщения обмена.
// ЭтоОбменXDTO - Булево - признак того, что выполняется обмен через универсальный формат.
//
// Возвращаемое значение:
// Структура - свойства структуры:
// * РазмерФайлаСообщенияОбмена - Число - размер файла в мегабайтах, по умолчанию 0.
// * КоличествоОбъектовКЗагрузке - Число - количество объектов к загрузке, по умолчанию 0.
// * From - Строка - Код узла-отправителя сообщения.
// * To - Строка - Код узла-получателя сообщения.
// * NewFrom - Строка - Код узла-отправителя в новом формате (для перевода существующих обменов на новую кодировку).
Функция РезультатАнализаДанныхКЗагрузке(Знач ИмяФайлаОбмена, ЭтоОбменXDTO, ЭтоОбменРИБ = Ложь) Экспорт
Результат = Новый Структура;
Результат.Вставить("РазмерФайлаСообщенияОбмена", 0);
Результат.Вставить("КоличествоОбъектовКЗагрузке", 0);
Результат.Вставить("From", "");
Результат.Вставить("NewFrom", "");
Результат.Вставить("To", "");
Если НЕ ЗначениеЗаполнено(ИмяФайлаОбмена) Тогда
Возврат Результат;
КонецЕсли;
ФайлСДанными = Новый Файл(ИмяФайлаОбмена);
Если Не ФайлСДанными.Существует() Тогда
Возврат Результат;
КонецЕсли;
ФайлОбмена = Новый ЧтениеXML;
Попытка
// Размер сразу переводим в мегабайты.
Результат.РазмерФайлаСообщенияОбмена = Окр(ФайлСДанными.Размер() / 1048576, 1);
ФайлОбмена.ОткрытьФайл(ИмяФайлаОбмена);
Исключение
Возврат Результат;
КонецПопытки;
// В зависимости от вида обмена используется разный алгоритм анализа файла обмена.
Если ЭтоОбменXDTO Тогда
ФайлОбмена.Прочитать(); // Message.
ФайлОбмена.Прочитать(); // Header начало.
НачатьСчетОбъектов = Ложь;
Пока ФайлОбмена.Прочитать() Цикл
Если ФайлОбмена.ЛокальноеИмя = "Header" Тогда
// Закончено чтение заголовка.
НачатьСчетОбъектов = Истина;
ФайлОбмена.Пропустить();
ИначеЕсли ФайлОбмена.ЛокальноеИмя = "Confirmation" Тогда
ФайлОбмена.Прочитать();
ИначеЕсли ФайлОбмена.ЛокальноеИмя = "From" Тогда
ФайлОбмена.Прочитать();
Результат.From = ФайлОбмена.Значение;
ФайлОбмена.Пропустить();
ИначеЕсли ФайлОбмена.ЛокальноеИмя = "To" Тогда
ФайлОбмена.Прочитать();
Результат.To = ФайлОбмена.Значение;
ФайлОбмена.Пропустить();
ИначеЕсли ФайлОбмена.ЛокальноеИмя = "NewFrom" Тогда
ФайлОбмена.Прочитать();
Результат.NewFrom = ФайлОбмена.Значение;
ФайлОбмена.Пропустить();
ИначеЕсли НачатьСчетОбъектов
И ФайлОбмена.ТипУзла = ТипУзлаXML.НачалоЭлемента
И ФайлОбмена.ЛокальноеИмя <> "УдалениеОбъекта"
И ФайлОбмена.ЛокальноеИмя <> "Body" Тогда
Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1;
ФайлОбмена.Пропустить();
КонецЕсли;
КонецЦикла;
ИначеЕсли ЭтоОбменРИБ Тогда
ФайлОбмена.Прочитать(); // Message.
ФайлОбмена.Прочитать(); // Header начало.
ФайлОбмена.Пропустить(); // Header конец.
ФайлОбмена.Прочитать(); //Body начало.
Пока ФайлОбмена.Прочитать() Цикл
Если ФайлОбмена.ЛокальноеИмя = "Changes"
ИЛИ ФайлОбмена.ЛокальноеИмя = "Data" Тогда
Продолжить;
ИначеЕсли СтрНайти(ФайлОбмена.ЛокальноеИмя, "Config") = 0
И СтрНайти(ФайлОбмена.ЛокальноеИмя, "Signature") = 0
И СтрНайти(ФайлОбмена.ЛокальноеИмя, "Nodes") = 0
И ФайлОбмена.ЛокальноеИмя <> "Parameters"
И ФайлОбмена.ЛокальноеИмя <> "Body" Тогда
Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1;
КонецЕсли;
ФайлОбмена.Пропустить();
КонецЦикла;
Иначе
ФайлОбмена.Прочитать(); // Файл обмена.
ФайлОбмена.Прочитать(); // ПравилаОбмена начало.
ФайлОбмена.Пропустить(); // ПравилаОбмена конец.
ФайлОбмена.Прочитать(); // Типы данных начало.
ФайлОбмена.Пропустить(); // ТипыДанных конец.
ФайлОбмена.Прочитать(); // Данные по обмену начало.
ФайлОбмена.Пропустить(); // Данные по обмену конец.
Пока ФайлОбмена.Прочитать() Цикл
Если ФайлОбмена.ЛокальноеИмя = "Объект"
ИЛИ ФайлОбмена.ЛокальноеИмя = "НаборЗаписейРегистра"
ИЛИ ФайлОбмена.ЛокальноеИмя = "УдалениеОбъекта"
ИЛИ ФайлОбмена.ЛокальноеИмя = "ИнформацияОРегистрацииОбъекта" Тогда
Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1;
КонецЕсли;
ФайлОбмена.Пропустить();
КонецЦикла;
КонецЕсли;
ФайлОбмена.Закрыть();
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПроизвестиЧтениеДанныхВРежимеАнализа (БСП)
РезультатАнализаОшибочныхПолучателей (БСП)
АнализДоступностиФайловКлассификатораВКаталоге (БСП)
Замеряет скорость выполнения запроса и получает его выгрузки
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)