Всем привет!
Вот кусок кода, где пытаюсь прочитать файл XML в таблицу значений.
Адрес - e1cib/tempstorage/f9e89ba7-4b8e-4371-aa22-5e02e3113a36?seanceId=ZTczNGJjMTAtZDRkZC00N2I3LWI3N2ItZiI3MjFjMDBmYjUwhj6 2-cGKaEKAIk10O0XdvgAAAAA
ДвоичныеДанные - двоичные данные как двоичные
СтрокаXML - сюда записался текст XML-файла который надо, все попало символ в символ.
Все это через отладчик смотрю.
А от дальше...
СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных) - выдает ошибку:
СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных) {<Неизвестный модуль>(1)}: Ошибка при вызове метода контекста (ПрочитатьXML) или было раньше в значении NULL
Что не так делаю?
Задача простая, из одной базы 1С прочитать Таблицу значений и записать в XML , а в другую базу 1С наоборот (прочитать XML и записать в Таблицу значений).
Вот кусок кода, где пытаюсь прочитать файл XML в таблицу значений.
Адрес - e1cib/tempstorage/f9e89ba7-4b8e-4371-aa22-5e02e3113a36?seanceId=ZTczNGJjMTAtZDRkZC00N2I3LWI3N2ItZiI3MjFjMDBmYjUwhj6
ДвоичныеДанные - двоичные данные как двоичные
СтрокаXML - сюда записался текст XML-файла который надо, все попало символ в символ.
Все это через отладчик смотрю.
А от дальше...
СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных) - выдает ошибку:
СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных) {<Неизвестный модуль>(1)}: Ошибка при вызове метода контекста (ПрочитатьXML) или было раньше в значении NULL
&НаСервере
Процедура ВыполнитьЗагрузкуНаСервере(Адрес)
// Вставить содержимое обработчика.
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
//темпФайл = ПолучитьИмяВременногоФайла();
//
//ДвоичныеДанные.Записать(темпФайл);
Если ДвоичныеДанные = Неопределено Тогда
ТекстОшибки = "Не удалось прочитать файл с контейнером.";
Иначе
Попытка
ЧтениеДанных = Новый ЧтениеДанных(ДвоичныеДанные);
ЧтениеДанных.КодировкаТекста = КодировкаТекста.UTF8;
ЧтениеТекста = Новый ЧтениеТекста(ЧтениеДанных.ИсходныйПоток(), КодировкаТекста.UTF8);
СтрокаXML = ЧтениеТекста.Прочитать();
ЧтениеXMLДанных = Новый ЧтениеXML;
ЧтениеXMLДанных.УстановитьСтроку(СтрокаXML);
ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
ЧтениеТекста.Закрыть();
ЧтениеДанных.Закрыть();
Исключение
ТекстОшибки = "Не удалось получить строку XML из файла.";
КонецПопытки;
КонецЕсли;
КонецПроцедуры
ПоказатьЧто не так делаю?
Задача простая, из одной базы 1С прочитать Таблицу значений и записать в XML , а в другую базу 1С наоборот (прочитать XML и записать в Таблицу значений).
По теме из базы знаний
- Печать алкогольной декларации 4.20 по файлу XML
- Из таблицы значений в XML и обратно в процедурах по 4 строки кода
- Сбор данных из файла XML по заданным полям или проверка выгрузки данных в XML файле
- Преобразование XML в таблицу значений или иной объект 1С методом XSL преобразования
- Чтение и запись структуры XML
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) На клиенте, вместо двоичных данных, сразу получайте строку XML из файла через ЧтениеТекста и передавайте ее прямо на сервер. Но ошибка, скорее всего, вызвана некорректной сериализацией ранее, поэтому используйте функции, подсказанные в (11).
&НаСервере
Процедура ВыполнитьЗагрузкуНаСервере(Знач СтрокаXML)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
ЧтениеXML.Закрыть();
КонецПроцедуры
(3)
А текстовый с разделителем ещё меньше.
И всё это ещё можно запаковать. :-)
ХМЛ выбран по какой-то другой причине, а не из-за того что он меньше или больше.
Нужно такое расширение, что большой объем информации на нем можно было разместить, а сам файл весил не много.
JSON меньше будет, за счет меньшего объема служебных символов. :-)
А текстовый с разделителем ещё меньше.
И всё это ещё можно запаковать. :-)
ХМЛ выбран по какой-то другой причине, а не из-за того что он меньше или больше.
(12)
да, главная причина - это то, что при выгрузке в текстовом надо прописывать колонки руками в ТаблицаЗначений, а у меня плавающее количество колонок, т.к. запрос вытаскивающий ТЗ, меняется в зависимости от переменной. Одним словом, ТЗ может быть с 10юя колонками, в через час с 20ю, а потом 11 и т.д.
ну и пощупать новый формат... опыт
да, главная причина - это то, что при выгрузке в текстовом надо прописывать колонки руками в ТаблицаЗначений, а у меня плавающее количество колонок, т.к. запрос вытаскивающий ТЗ, меняется в зависимости от переменной. Одним словом, ТЗ может быть с 10юя колонками, в через час с 20ю, а потом 11 и т.д.
ну и пощупать новый формат... опыт
ДанныеДокумента = новый Струтктура("Товары", Новый Массив);
Для каждого стр из Док.Товары Цикл
СтруктураТаблицы = новый Структура;
СтруктураТаблицы.Вставить("Номенклатура",XMLСтрока(стр.Номенклатура));
СтруктураТаблицы.Вставить("Количество",стр.Количество);
СтруктураТаблицы.Вставить("Цена",стр.Цена);
СтруктураТаблицы.Вставить("Сумма",стр.Сумма);
ДанныеДокумента.Товары.Добавить(СтруктураТаблицы);
КонецЦикла;
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
МассивДокументовВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ДанныеДокумента );
ФабрикаXDTO.ЗаписатьXML(Запись, МассивДокументовВОбъектеXDTO);
ДанныеXML = Запись.Закрыть();
/// и загрузка,
ЧтениеXML = новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ДанныеXML );
ДанныеДокумента = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
Для каждого стр из СтруктураДокумента.Товары Цикл
М = ДокОбъект.Товары.Добавить();
м.Номенклатура = XMLЗначение(тип("СправочникСсылка.Номенклатура"),стр.Номенклатура);
м.Количество = стр.Количество;
м.Цена = стр.Цена;
м.Сумма = стр.Сумма;
КонецЦикла;
Показать
(10) текст XML, который был загружен из другой базы
<ValueTable xmlns="http://v8.1c.ru/8.1/data/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<column>
<Name>Период</Name>
<ValueType>
<Type>xs:dateTime</Type>
<Type>Null</Type>
<DateQualifiers>
<DateFractions>DateTime</DateFractions>
</DateQualifiers>
</ValueType>
<Title>Период</Title>
<Width>19</Width>
</column>
<column>
<Name>Организация</Name>
.................................................
Показать
(15) не получится таким способом.
главная причина - это то, что при выгрузке ТЗ нельзя прописывать колонки руками, у меня плавающее количество колонок, т.к. запрос вытаскивающий ТЗ, меняется в зависимости от переменной. Одним словом, ТЗ может быть с 10юя разными колонками, в через час с 20ю, а потом 11 и т.д.
главная причина - это то, что при выгрузке ТЗ нельзя прописывать колонки руками, у меня плавающее количество колонок, т.к. запрос вытаскивающий ТЗ, меняется в зависимости от переменной. Одним словом, ТЗ может быть с 10юя разными колонками, в через час с 20ю, а потом 11 и т.д.
Общий вопрос.
Задача:
1) из одной базы 1С выгрузить Таблицу значений(ТЗ) в файл (вопрос в какой - с каким расширением???). Потому что при выгрузке ТЗ всегда может содержать разное количество колонок, так написан запрос и сопутствующий код.
2) в другую базу 1С наоборот прочитать файл и записать в Таблицу значений. Так как количество колонок может быть разное (соответственно разное наименование колонок), поэтому прописывать руками структуры колонок или другое с указанием всех колонок нет смысла.
Вопрос, какой метод для этих целей подойдет? Главное условие - сделать две обработки, не вмешиваясь в конфигурацию.
Задача:
1) из одной базы 1С выгрузить Таблицу значений(ТЗ) в файл (вопрос в какой - с каким расширением???). Потому что при выгрузке ТЗ всегда может содержать разное количество колонок, так написан запрос и сопутствующий код.
2) в другую базу 1С наоборот прочитать файл и записать в Таблицу значений. Так как количество колонок может быть разное (соответственно разное наименование колонок), поэтому прописывать руками структуры колонок или другое с указанием всех колонок нет смысла.
Вопрос, какой метод для этих целей подойдет? Главное условие - сделать две обработки, не вмешиваясь в конфигурацию.
(17) И вот мы плавненько подошли к ОБЫЧНОЙ конвертации данных (КД2.1)
с ее помощью создайте правила конвертации,
и используйте ее внешнюю обработку Универсальный обмен данными!
там все уже правильно и годами отлаженный механизм, и файлы как раз в формате ХМЛ создаются
(но если вы любитель изобретать велосипед с квадратными колесами, то кто же, вам, в этом может помешать?)
с ее помощью создайте правила конвертации,
и используйте ее внешнюю обработку Универсальный обмен данными!
там все уже правильно и годами отлаженный механизм, и файлы как раз в формате ХМЛ создаются
(но если вы любитель изобретать велосипед с квадратными колесами, то кто же, вам, в этом может помешать?)
(18) с КД2.1 только курсы проходил, на практике правила поправлял пару раз.
Почему спрашиваю ща теорию, чтоб опять не пойти по не правильному пути. На практике наковыряю что угодно, просто не так быстро))
Последний вопрос по данной теме, чисто теоретически:
1) В первой базе (где собираю ТЗ), там только запросом можно все собрать.
Вот это ТЗ можно в КД 2.1 отправить?
2) Во второй базе все попадает в один независимый регистр сведений .
Такой вариант реализовать можно на КД2.1?
Почему спрашиваю ща теорию, чтоб опять не пойти по не правильному пути. На практике наковыряю что угодно, просто не так быстро))
Последний вопрос по данной теме, чисто теоретически:
1) В первой базе (где собираю ТЗ), там только запросом можно все собрать.
Вот это ТЗ можно в КД 2.1 отправить?
2) Во второй базе все попадает в один независимый регистр сведений .
Такой вариант реализовать можно на КД2.1?
(20) не должно такого быть, потому что через файл txt работает выгрузка-загрузка. Смысл переделки, что в первой базе ЗУПа, справочник Подразделения может увеличиваться в глубину, и любые изменения прописать в другой самописной базе, в идеале нам надо сделать выгрузку и забыть об этом.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот