Но такая схема устраивала всех только до определенного предела, по мере роста объёмов разбираемых файлов скорость перестала устраивать даже самых терпеливых пользователей, и этот механизм был переписан на C#, для передачи результата в 1с использовалась функция «ЗначениеИзФайла». Приложение является консольным, принимающим на вход следующие параметры:
1. Путь к XML файлу
2. Имя узлового элемента (элемент который развернётся в строку таблицы значений,)
3. Имя файла в который будет записано сериализованное представление таблицы значений
4. Суб путь….необязательный параметр, в случае если надо указать в какой ветке XML искать узловые элементы
В случае если утилитка вложена в качестве макета в обработку то её можно вызвать следующей функцией
Функция ПрочитататьВТЧXMLИерархВнеш(пСТрДанных,пТЗ,пИмяУзловогоЭлемента,пСубпуть = «») Экспорт
лПуть = КаталогВременныхФайлов()+»CreatingTZFor1C.exe»;
Попытка
ЭтотОбъект.ПолучитьМакет(«CreatingTZFor1C»).Записать(лПуть);
Исключение
лФайл = Новый Файл(лПуть);
Если НЕ лФайл.Существует() Тогда
Возврат Неопределено;
КонецЕсли;
КонецПопытки;
лВремФайл = ПолучитьИмяВременногоФайла(«xml»);
лЗаписьТекста = Новый ЗаписьТекста(лВремФайл);
лЗаписьТекста.Записать(пСТрДанных);
лЗаписьТекста.Закрыть();
лВремРезФайл = ПолучитьИмяВременногоФайла(«data»);
лТЧ = Новый ТаблицаЗначений;
ЗначениеВФайл(лВремРезФайл,лТЧ);
Если ПустаяСтрока(пСубпуть) Тогда
лКоманда = «»»»+лПуть+»»» «»»+лВремФайл+»»» «»»+пИмяУзловогоЭлемента+»»» «»»+лВремРезФайл+»»»»;
Иначе
лКоманда = «»»»+лПуть+»»» «»»+лВремФайл+»»» «»»+пИмяУзловогоЭлемента+»»» «»»+лВремРезФайл+»»» «»»+пСубпуть+»»»»;
КонецЕсли;
//КомандаСистемы(лКоманда,КаталогВременныхФайлов());
ЗапуститьПриложение(лКоманда,КаталогВременныхФайлов(), Истина);
пТЗ = ЗначениеИзФайла(лВремРезФайл);
Возврат лВремРезФайл;
КонецФункции
И собственно вызов
ТЧДанных = Новый таблицазначений;
//лСтрРез — Строка с XML
//Policy — Имя узла разворачиваемого в строку
ПрочитататьВТЧXMLИерархВнеш(лСтрРез,ТЧДанных,»Policy»);
Такой финт ушами позволяет из XML файла весом более 17 МБ за 10 секунд положить в таблицу значений 6000 строк и 2700 колонок. Так что польза очевидна 🙂
Огромный респект!!! сэкономленное время позволило решить задачу, вместо провала!!
Лучше не exe’шник выложить, а исходники.
xslt преобразование можно прямо в 1С сделать — скорость будет почти такой же
(3) K_A_O, Не спорю, но надо будет сначала разобрать структуру загружаемого документа, а это время и нервы.
Тоже самое преобразование в таблицу значения есть тутhttp://infostart.ru/public/124196/
Также по итогу получение дбф-файла
У меня exe-ик не запускается, появляется и закрывается.
Каким образом можете передать разбираемый файлик…
Да, исходники были б в тему
Скачал ради интереса.
Ждал результата 11 минут и закрыл окно.
В моем случае не имеет смысла, ибо разработанная мной процедурка 1С с ОТКРЫТЫМ кодом отработала за 22 минуты. Закрытый код и менее 2-х кратной выгоды по времени убивает все возможные будущие плюсы.
FYI.
Автор, если интересно отловить и исправить, проверю и отпишусь по просьбе.
Детали:
Запускал под XP в cmd.
Файлик Бондовой загрузки от НРД SIR (bonds) весом 38МБ, 780 тыс строк в xml, результат должен быть 56 тыс строк таблицы значений.
Используйте XSL и СериализаторXDTO — работать будет мгновенно.