Ошибка при вызове метода контекста записатьxml

Есть код:

СведенияОМедПомощи = Новый ЗаписьXML;

ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML(«windows-1251», «1.0», Истина, Ложь, Символы.ПС);

СведенияОМедПомощи.ОткрытьФайл(ПутьКФайлу_ZL_LIST, ПараметрыЗаписиXML);

СведенияОМедПомощи.ЗаписатьОбъявлениеXML();

ФабрикаXDTO.ЗаписатьXML(СведенияОМедПомощи, Объект_ZL_LIST);

СведенияОМедПомощи.Закрыть();

При выполнении получаю ошибку:

Ошибка при вызове метода контекста (ЗаписатьXML)        ФабрикаXDTO.ЗаписатьXML(СведенияОМедПомощи, Объект_ZL_LIST);

по причине:

Недопустимое значение параметра (параметр номер ‘3’)

но у ЗаписатьXML(<ЗаписьXML>, <Элемент>, <ЛокальноеИмя>, <URIПространстваИмен>, <Форма>, <УказаниеТипа>)

— <ЛокальноеИмя> (необязательный)

Тип: Строка.

Локальное имя записываемого элемента данных.

В чем ошибка?

  • Главная
  •  / 
  • Статьи
  •  / 
  • Программирование на 1С:Предприятие
  •  / 
  • Не установлен приемник XML

Текст ошибки:

{Форма.Форма.Форма(2254)}: Ошибка при вызове метода контекста (ЗаписатьXML)
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
по причине:
Ошибка при записи XDTO


по причине:
Не установлен приемник XML

Проблема решается добавлением команды «УстановитьСтроку».

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);

Возврат ЗаписьXML.Закрыть();

Указанный код работает без ошибок.

Возврат к списку

Есть такой XDTO пакет

bfdba24c07c642d4921c6e6ebdc51590.JPG

как по нему создать XML файл? Не могу понять как обратиться к элементу Контрагенты. Нашел в Интернете, что можно обратиться через Корневое свойство, но при сохранении файла выдает ошибку. Также не могу понять как создать элемент Руководитель.


  • Вопрос задан

    более трёх лет назад

  • 1693 просмотра


5

комментариев

Пригласить эксперта


Ответы на вопрос 2

Fragster

Там вся фишка во вложенных типах. Для более подробного анализа нужен XSD файл.


Комментировать


Похожие вопросы


  • Показать ещё
    Загружается…

30 янв. 2023, в 12:52

5000 руб./за проект

20 янв. 2023, в 20:58

5000 руб./за проект

30 янв. 2023, в 12:41

7000 руб./за проект

Минуточку внимания

Начала появляться ошибка ‘Недостаточно памяти для записи файла формата Base 64’ при записи события в 1с Документооборот 8 ПРОФ.

Недостаточно памяти для записи файла формата Base64

В конфигураторе в режиме отладки при включенной опции Остановка по ошибке нашел место возникновения ошибки:

{ОбщийМодуль.ВерсионированиеОбъектовСобытия.Модуль(20)}:

Ошибка при вызове метода контекста (ЗаписатьXML) ЗаписатьXML(ЗаписьXML, Источник, НазначениеТипаXML.Явное);

Ошибка времени выполнения 1с

Быстрое решение:Убрать версионирование объектов- выставить для всех пунктов не версионировать. (Далее планируем расширить память на сервере 1С).

Версионирование объектов. Документооборот

После того как убрали версионирование объектов, ошибка о недостатке памяти больше не появлялась, но пропала возможность детально просмотреть кто какие изменения внес в те или иные объекты информационной базы. Журнал регистрации не дает возможности посмотреть историю изменения реквизитов. Версионирование объектов интересная технология, но очень сильно загружает 1с, особенно при больших объемах информации и множестве пользователей.

Поделиться ссылкой:

Похожие записи

Варианты решения проблемы на примере работы обработки 1С:Администратор.
Конфигурация: Розница 2.0. Клиент-Сервер. Обычное приложение.
Ошибка возникает при Записи/Проведении/ОтменаПроведения документа.


СПРАВКА:

Мутабельный тип (англ. Mutable type) — сложный тип данных в объектно-ориентированном программировании, значения которого (как правило — объекты) после своего создания допускают изменение своих свойств.
1С: Подробнее о типах данных 1С:Предприятие: http://v8.1c.ru/overview/CommonCommTypes.htm
1С: XML-сериализация, механизм (XML Serialization, Mechanism): http://v8.1c.ru/overview/Term_000000318.htm
tanka495: Клиент- серверные вызовы: //infostart.ru/public/86838/


Немного теории:

Попытка передачи мутабельного значения — это попытка передачи объекта на сервер(клиент), данные которого могут быть изменены на клиенте(сервере).
Попытка передачи мутабельного значения с клиента на сервер, с сервера на клиент 1С:Предприятия возникает только в клиент-серверной версии (SQL).

Передача параметров

Передача параметров функции (процедуре), выполняемой на сервере достаточно тонкий вопрос. Это в первую очередь связано с необходимостью передачи их между процессом сервера приложений и клиента. При переходе управления с клиентской части на серверную все передаваемые параметры сериализуются, передаются на сервер, где «распаковываются» и используются. При переходе с серверной части на клиентскую – обратный процесс. Здесь необходимо отметить, что данная схема корректно обрабатывает передачу параметров по ссылке и по значению. При передаче параметров действуют следующие отграничения:

Передавать между клиентом и сервером (в обе стороны) можно только немутабельные значения (т.е. значения которых не могут изменяться): примитивные типы, ссылки, универсальные коллекции, значения системных перечислений, хранилище значения. При попытке передать что-либо другое – аварийное завершение клиентского приложения (даже, если передавать некорректный параметр пытается сервер).

Не рекомендуется при передаче параметров передавать большие объёмы данных (например, строки более 1 миллиона символов), это может негативно сказаться на производительности сервера.

Нельзя передавать параметры, содержащие циклическую ссылку, причем как с сервера на клиент, так и обратно.При попытке передать такой параметр – аварийное завершение клиентского приложения (даже если передавать некорректный параметр пытается сервер).

Не рекомендуется передавать очень сложные коллекции данных. При попытке передачи параметра с очень большим уровнем вложения происходит аварийное завершение сервера.


Проблемная ситуация:

«Розница 2.0». Клиент-Сервер. Обычное приложение.
Обработка «1С:Администратор»: //infostart.ru/public/100967/

МО: {ВнешняяОбработка.КонсольАдминистратора.МодульОбъекта(658)}:
Ошибка при вызове метода контекста (Записать):
Ошибка при выполнении обработчика — ‘ПередЗаписью’:{ОбщийМодуль.ПрефиксацияОбъектовСобытия.Модуль(215)}:
Ошибка при вызове метода контекста (ДатаИлиОрганизацияОбъектаИзменена):
Попытка передачи с клиента на сервер мутабельного значения 2-го параметра метода ДатаИлиОрганизацияОбъектаИзменена().

Обработка 1С:Администратор.МодульОбъекта

     ОбъектИЗМ.Записать(?(РежимЗаписи = Неопределено, РежимЗаписиДокумента.Запись, РежимЗаписи));

ОбщийМодуль.ПрефиксацияОбъектовСобытия.Модуль(215):

Процедура ПроверитьНомерОбъектаПоДатеИОрганизации(Объект)

     Если ПрефиксацияОбъектов.ДатаИлиОрганизацияОбъектаИзменена(Объект.Ссылка, Объект.Метаданные(), Объект.Дата, Объект.Организация) Тогда


ВАРИАНТ РЕШЕНИЯ № 1: (возможный, но неоптимальный):
УСТАНОВКА СВОЙСТВА ОБЩЕГО МОДУЛЯ.

В конфигураторе:

В Свойствах ОбщийМодуль.ПрефиксацияОбъектов активизировать флажок «Клиент обычное приложение».


ВАРИАНТ РЕШЕНИЯ № 2: (рекомендуемый):
ПЕРЕДАЧА ССЫЛКИ.

В конфигураторе:

ОбщийМодуль.ПрефиксацияОбъектовСобытия

Процедура ПроверитьНомерОбъектаПоДатеИОрганизации(Объект)

// БЫЛО.
// Если
ПрефиксацияОбъектов.ДатаИлиОрганизацияОбъектаИзменена(Объект.Ссылка, Объект.Метаданные(), Объект.Дата, Объект.Организация) Тогда
// СТАЛО.
Если
ПрефиксацияОбъектов.ДатаИлиОрганизацияОбъектаИзменена(Объект.Ссылка, Объект.Дата, Объект.Организация) Тогда

ОбщийМодуль.ПрефиксацияОбъектов

Процедура ДатаИлиОрганизацияОбъектаИзменена(Ссылка, Знач ДатаПослеИзменения, Знач ОрганизацияПослеИзменения) Экспорт

// СТРОКА ДОБАВЛЕНА.
МетаданныеОбъекта = Ссылка.Метаданные();


ВАРИАНТ РЕШЕНИЯ № 3: (возможный, но не в данном случае):
ИСПОЛЬЗОВАНИЕ XML-СЕРИАЛИЗАЦИИ (предложено w-divin).

Сериализация не работает, если в качестве записываемого объекта выступают Метаданные.
(Ошибка при вызове метода контекста (ЗаписатьXML): Значения данного типа не могут быть представлены в XML).

Рекомендуется использовать при необходимости передать Объект (СправочникОбъект, ДокументОбъект и т.д.).

Использовать функции типа:

// Выгрузка ХОбъекта в XML-строку:
Функция ЗаписатьВXML(ХОбъект)
     ЗаписьXML = Новый ЗаписьXML;                            // Тонкий клиент, сервер, толстый клиент, внешнее соединение.
     ЗаписьXML.УстановитьСтроку();
     ЗаписатьXML(ЗаписьXML, ХОбъект);                      // Сервер, толстый клиент, внешнее соединение.
     Возврат ЗаписьXML.Закрыть();
КонецФункции

// Загрузка ХОбъекта из XML-строки:
Функция ПрочитатьИзXML(СтрокаXML)
     ЧтениеXML = Новый ЧтениеXML;                           // Тонкий клиент, сервер, толстый клиент, внешнее соединение.
     ЧтениеXML.УстановитьСтроку(СтрокаXML);
     ХОбъект = ПрочитатьXML(ЧтениеXML);                 // Сервер, толстый клиент, внешнее соединение.
     Возврат ХОбъект;
КонецФункции


Тестовая среда:
Операционная система: Windows XP SP3, Windows 7 SP1.
Сервер баз данных: MS SQL Server 2008 R2.
1С:Предприятие (Клиент-Сервер):
   —
Платформа 8.2.15.
   —
Конфигурация: Розница 2.0.3.17.
   —
Режим совместимости: 8.2.13/НеИспользовать.
   —
Режим запуска: Обычное приложение. Толстый клиент.

МА! С уважением к сообществу МА!


Показывать по
10
20
40
сообщений

Новая тема

Ответить

K_Olga

Дата регистрации: 05.09.2008
Сообщений: 56

«Делаю выгрузку документа РасходнаяНакладная, используя пакет XDTO. В базе имеется несколько документов. Код:<br>ТекСериализаторXDTO=Новый СериализаторXDTO(ФабрикаXDTO);<br>ЗаписьXML=Новый ЗаписьXML;<br>ЗаписьXML.ОткрытьФайл(«C:Sale.xml»);<br>Выборка = Документы.РасходнаяНакладная.Выбрать(); <br>Пока Выборка.Следующий() Цикл <br>ДокументОбъект = Выборка.ПолучитьОбъект();<br>НомерТип = ФабрикаXDTO.Тип(«http://MyServer.ru/sample», «Номер»);<br>НаименованиеТип = ФабрикаXDTO.Тип(«http://MyServer.ru/sample», «Наименование»);<br>РасходнаяНакладнаяТип = ФабрикаXDTO.Тип(«http://MyServer.ru/sample», «РасходнаяНакладная»);<br>ВалютаТип = ФабрикаXDTO.Тип(«http://MyServer.ru/sample», «Валюта»);<br>ТоварТип = ФабрикаXDTO.Тип(«http://MyServer.ru/sample», «Товар»);<br>ЭлементСоставаТип = ФабрикаXDTO.Тип(«http://MyServer.ru/sample», «ЭлементСостава»);<br>ВалютаXDTO=ФабрикаXDTO.Создать(ВалютаТип);<br>ВалютаXDTO.Наименование = ФабрикаXDTO.Создать(НаименованиеТип, ДокументОбъект.Валюта.Наименование);<br>ОбъектДокументXDTO =ФабрикаXDTO.Создать(РасходнаяНакладнаяТип);<br>ОбъектДокументXDTO.Дата = ДокументОбъект.Дата;<br>ОбъектДокументXDTO.Номер = ДокументОбъект.Номер;<br>ТекСериализаторXDTO.Фабрика.ЗаписатьXML(ЗаписьXML,ОбъектДокументXDTO);<br>КонецЦикла;<br>ЗаписьXML.Закрыть();<br>При вызове этой процедуры выходит следующаяс ошибка {Обработка.Обработка1.Форма.Форма(46)}: Ошибка при вызове метода контекста (ЗаписатьXML)<br>ТекСериализаторXDTO.Фабрика.ЗаписатьXML(ЗаписьXML,ОбъектДокументXDTO);<br>Тогда как выгрузить в XML несколько документов?<br>»

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

«> («C:Sale.xml»);<br>Не смущает?»

Показывать по
10
20
40
сообщений

Всем доброго времени суток. Имеется платформа 1С:Предприятие 8.3 (8.3.10.2252) Есть процедура на сервере которая формирует структуру одно из значений структуры получается типа XDTO и затем эту структуру надо передать обратно клиенту, но платформа выдает такую ошибку Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства ‘ret’:     форма: Элемент     имя: { по причине: Ошибка преобразования данных XDTO: Запись значения свойства ‘Value’:     форма: Элемент     имя: { по причине: Ошибка отображения типов: Отсутствует отображение для типа ‘ОбъектXDTO’ Тут понятно, что нельзя передавать тип ОбъектXDTO с сервера на клиент, но что я только не пробовал и ПоместитьВоВременноеХранилище, ПолучитьИзВременногоХранилища И ЗначениеВстрокуВнутрь, ЗначениеИзСтрокиВнутрь, а значение типа ОбъектXDTO так и не передается структура во всех двух случаях возврается, но строка где должно быть ОбъектXDTO становится во всех двух случаях НЕОПРЕДЕЛЕНО я так понимаю этот тип просто не сериализуется, но должен же быть какой то выход как передать значение ОбъектXDTO с сервера на клиент? Всем заранее спасибо за ответы.

А не подскажешь какими функциями процедурами это сделать можно ?

ФабрикаXDTO.ЗаписатьXML ФабрикаXDTO.ПрочитатьXML

СериализаторХДТО.ЗаписатьХМЛ

А что автор будет / собирается делать с ОбъектXDTO на клиенте?

Что то я не очень пойму как этими функциями пользовать не могли бы привести небольшой пример

ну вообще-то Доступность: Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). значит, можно на клиенте с ним работать.

ЧТо то не работает делаю вот так Где Результат.Данные типа ХДТО Валится вот с такой ошибкой Ошибка при вызове метода контекста (ЗаписатьXML)     СериализаторXDTO.ЗаписатьXML(ЗаписьХМЛ, Результат.Данные); по причине: Несоответствие типов (параметр номер ‘2’) (Ошибка отображения типов)

Или я не правильно ХДТО в XML преобразую?

Не слушай глупых дядек про СериализаторXDTO. Используй ФабрикуXDTO, она про пакеты и прочее знает.

хорошо как через ФабрикуXDTO сделать? что то я не понимаю?

Да также как и до этого только через фабрику вот так вот с такой ошибкой вылетает Ошибка при вызове метода контекста (ЗаписатьXML)     ФабрикаXDTO.ЗаписатьXML(ЗаписьХМЛ, Результат.Данные); по причине: Ошибка при записи XDTO по причине: Не установлен приемник XML что не так ?

ЗаписьXML.УстановитьСтроку

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Есть такой XDTO пакет

bfdba24c07c642d4921c6e6ebdc51590.JPG

как по нему создать XML файл? Не могу понять как обратиться к элементу Контрагенты. Нашел в Интернете, что можно обратиться через Корневое свойство, но при сохранении файла выдает ошибку. Также не могу понять как создать элемент Руководитель.


  • Вопрос задан

    более трёх лет назад

  • 1777 просмотров



5

комментариев

Пригласить эксперта


Ответы на вопрос 2

Fragster

Там вся фишка во вложенных типах. Для более подробного анализа нужен XSD файл.


Комментировать


Похожие вопросы


  • Показать ещё
    Загружается…

25 июн. 2023, в 03:49

15000 руб./за проект

25 июн. 2023, в 03:19

4500 руб./за проект

25 июн. 2023, в 02:28

10000 руб./за проект

Минуточку внимания

Начала появляться ошибка ‘Недостаточно памяти для записи файла формата Base 64’ при записи события в 1с Документооборот 8 ПРОФ.

Недостаточно памяти для записи файла формата Base64

В конфигураторе в режиме отладки при включенной опции Остановка по ошибке нашел место возникновения ошибки:

{ОбщийМодуль.ВерсионированиеОбъектовСобытия.Модуль(20)}:

Ошибка при вызове метода контекста (ЗаписатьXML) ЗаписатьXML(ЗаписьXML, Источник, НазначениеТипаXML.Явное);

Ошибка времени выполнения 1с

Быстрое решение:Убрать версионирование объектов- выставить для всех пунктов не версионировать. (Далее планируем расширить память на сервере 1С).

Версионирование объектов. Документооборот

После того как убрали версионирование объектов, ошибка о недостатке памяти больше не появлялась, но пропала возможность детально просмотреть кто какие изменения внес в те или иные объекты информационной базы. Журнал регистрации не дает возможности посмотреть историю изменения реквизитов. Версионирование объектов интересная технология, но очень сильно загружает 1с, особенно при больших объемах информации и множестве пользователей.

Поделиться ссылкой:

Похожие записи

  • Ошибка при вызове метода контекста записатьjson приемник данных json не открыт
  • Ошибка при вызове метода контекста записатьjson http сервис 1с
  • Ошибка при вызове метода контекста записать ошибка доступа к файлу
  • Ошибка при вызове метода контекста записать не удалось записать номенклатура
  • Ошибка при вызове метода контекста записать не удалось записать ндс предъявленный