Имя: Пароль:
1C
1С v8
Ошибка формата потока. Баг платформы?
0 mehfk
 
01.05.13
23:54
Просьба проверить, воспроизводится ли ошибка

В серверном общем модуле (назовем его ТестМодуль) объявляем функцию

Процедура ТестПроверкаXML() Экспорт
   ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.ЗаписатьОбъявлениеXML();
   ЗаписьXML.ЗаписатьНачалоЭлемента("тест");
   ЗаписьXML.ЗаписатьКонецЭлемента();
   ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
   ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла);
   ЗаписьXML.Закрыть();    
КонецПроцедуры

Теперь создаем внешнюю обработку, в модуле формы пишем (обработчик нажатия на кнопку)

Процедура КнопкаВыполнитьНажатие(Кнопка)
   ТестМодуль.ТестПроверкаXML();
КонецПроцедуры

Получаем ошибку формата потока c предложением перезапустить или завершить работу (8.2.17.169 клиент-сервер)

Переносим код в модуль обработки, получаем сообщение об ошибке формата потока с кнопкой ОК

В файловой версии в обоих случаях получаем ошибку "Ошибка при вызове метода контекста (ЗаписатьОбъявлениеXML)": "Не установлен приемник XML"

Код кривой, согласен.
1 Конфигуратор1с
 
02.05.13
00:01
(0) "Код кривой, согласен." - когда я сую два пальца в розетку  меня бьет током. Я понимаю что делаю не правильно, но это неисправность розетки ?
2 mehfk
 
02.05.13
00:10
(1) Ты на пальцы-то напалечники-то одевай и суй сколько угодно
3 mehfk
 
02.05.13
00:11
(2)+ ну а так, 3,14 нах мимо темы, коли сказать по теме нечего
4 oleg_prg
 
02.05.13
00:14
Вот рабочий код, от  него и отталкивайся

Процедура ТестПроверкаXML() Экспорт

Запись = Новый ЗаписьXML;
   Запись.ОткрытьФайл("D:\test.xml");
   Запись.ЗаписатьОбъявлениеXML();
   Запись.ЗаписатьНачалоЭлемента("Корневой");
   Запись.ЗаписатьАтрибут("Справочник", "Номенклатура");
   Запись.ЗаписатьКомментарий("Краткая информация о номенклатуре");
   
   Запись.ЗаписатьНачалоЭлемента("Элемент");
   Запись.ЗаписатьАтрибут("Код", "0001");
   Запись.ЗаписатьАтрибут("Артикул", "АРТ123");
   Запись.ЗаписатьТекст("Мой товар №1");
   Запись.ЗаписатьКонецЭлемента();
   
   Запись.ЗаписатьКонецЭлемента();
   Запись.Закрыть();
КонецПроцедуры
5 mehfk
 
02.05.13
00:20
(4) Спасибо за код, но прошу заметить, что вопрос исправления кода не стоял.
6 oleg_prg
 
02.05.13
00:20
(0) У тебя не корректно код составлен
вот так надо для тест
Процедура КнопкаВыполнитьНажатие(Кнопка)

   Запись = Новый ЗаписьXML;
   Запись.ОткрытьФайл("D:\test.xml");
   Запись.ЗаписатьОбъявлениеXML();
   Запись.ЗаписатьНачалоЭлемента("тест");
   Запись.ЗаписатьАтрибут("тест", "тест");
   Запись.ЗаписатьНачалоЭлемента("тест №2");
   Запись.ЗаписатьКонецЭлемента();
   
   Запись.ЗаписатьКонецЭлемента();
   Запись.Закрыть();
   

КонецПроцедуры
7 oleg_prg
 
02.05.13
00:21
(5) мне кажется что некорректен код, а так вообще да, выдается ошибка. Моя платформа 1С:Предприятие 8.2 (8.2.18.82)
8 Конфигуратор1с
 
02.05.13
00:25
(2) так о чем и речь. Пиши правильный код и ошибок не будет) (3) нах это твоя дорога, судя по всему)
9 mehfk
 
02.05.13
00:26
(7) Да, код кривой, именно это и было обозначено в стартовом посте. При этом файловая ругается вполне осмысленно, а серверная - в зависимости от контекста вызова и не совсем осмысленно.

Код был написан с целью проверки: можно ли указать файл после записи данных в объект, к этому также подкупало отсутствие конструктора "по имени файла".
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший