Имя: Пароль:
1C
1С v8
Не установлен приемник XML.
, ,
0 batmansoft
 
15.07.14
20:54
Добрый день.  При попытке выполнить код:
    Пока Выборка.Следующий() Цикл
        XML.ЗаписатьНачалоЭлемента("data");
        сообщить(строка(Выборка.Номенклатура)+" "+строка(Выборка.ЭтоГруппа));
        Если НЕ Выборка.ЭтоГруппа Тогда    
            XML.ЗаписатьНачалоЭлемента("goods");
            ВыборкаНиже=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            Пока ВыборкаНиже.Следующий()  Цикл
                сообщить("Характеристика "+строка(ВыборкаНиже.Характеристика));
                НаименованиеЭлемента=ВыборкаНиже.ХарактеристикаНаименование;
                XML.ЗаписатьАтрибут("name",НаименованиеЭлемента);
            КонецЦикла;
            XML.ЗаписатьКонецЭлемента();
        иначе
            XML.ЗаписатьНачалоЭлемента("part");
            XML.ЗаписатьАтрибут("name",Выборка.Наименование);
            ВыборкаНиже=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
            XML.ЗаписатьКонецЭлемента();
            ОбходЗапроса(ВыборкаНиже);
        КонецЕсли;
        XML.ЗаписатьКонецЭлемента();
    КонецЦикла;
    XML.Закрыть();
Пишет:"
{Форма.Форма.Форма(80)}: Ошибка при вызове метода контекста (ЗаписатьКонецЭлемента)
        XML.ЗаписатьКонецЭлемента();
по причине:
Не установлен приемник XML"
Подскажите пожалуйста, как это лечиться?
1 MiniMuk
 
15.07.14
20:57
а че СП говорить про ЗаписатьНачалоЭлемента?
2 batmansoft
 
15.07.14
21:47
(1) Да ничего особенного не говорит. ЗаписатьНачалоЭлемента может быть как с одним аргументом, так и с двумя
3 m-serg74
 
15.07.14
22:04
(2) ЗаписатьОбъявлениеXML() не пробовал?
4 m-serg74
 
15.07.14
22:05
да и ОткрытьФайл(<ИмяФайлаXML>, <ТипКодировки>)
имеется?
5 Zypse
 
15.07.14
22:42
XML.ЗаписатьКонецЭлемента() используется 2 раза. Один раз внутри конструкции Если-КонецЕсли, Другой раз снаружи
6 m-serg74
 
15.07.14
22:53
(5) садись - два
7 m-serg74
 
15.07.14
22:54
+(5) но вот корневвой должен быть один походу ТС перед циклом не создает его

так что за наводку тебе + 100 к умениям
8 m-serg74
 
15.07.14
22:55
*один походу
один, походу

зпт пропустил
9 alle68
 
16.07.14
02:20
Кусок кода не тот: всё интересное - инициализация источника -  написано ранее.
Вот это и надо представить на суд сообществу.
10 batmansoft
 
16.07.14
10:28
(9) Вот полный код:
Процедура ВыгрузитьНаСервере()
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Номенклатура.Наименование КАК Наименование,
    |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    |    ТоварыНаСкладахОстатки.Характеристика,
    |    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
    |    ТоварыНаСкладахОстатки.Характеристика.ДополнительныеРеквизиты.(
    |        Ссылка КАК Ссылка,
    |        Свойство КАК Свойство,
    |        Значение КАК Значение
    |    ) КАК Реквизиты,
    |    ТоварыНаСкладахОстатки.Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |    ТоварыНаСкладахОстатки.Характеристика.Наименование КАК ХарактеристикаНаименование
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(
    |            &Дата,
    |            &ПоВсей
    |                ИЛИ Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстатки
    |ИТОГИ ПО
    |    Номенклатура ИЕРАРХИЯ"
    ;
    Запрос.УстановитьПараметр("Дата",Объект.ДатаВыгрузки);
    Запрос.УстановитьПараметр("Номенклатура",Объект.ФильтрПоНоменклатуре);
    Запрос.УстановитьПараметр("ПоВсей",Не ЗначениеЗаполнено(Объект.ФильтрПоНоменклатуре));
    //Объект.ТЗ=Запрос.Выполнить().Выгрузить();
    Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
    XML=Новый ЗаписьXML();
    XML.ОткрытьФайл(Объект.ИмяФайла);
    XML.ЗаписатьОбъявлениеXML();
    ОбходЗапроса(Выборка);
КонецПроцедуры


Процедура ОбходЗапроса(Выборка)
    Пока Выборка.Следующий() Цикл
        XML.ЗаписатьНачалоЭлемента("data");
        сообщить(строка(Выборка.Номенклатура)+" "+строка(Выборка.ЭтоГруппа));
        Если НЕ Выборка.ЭтоГруппа Тогда    
            XML.ЗаписатьНачалоЭлемента("goods");
            ВыборкаНиже=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            Пока ВыборкаНиже.Следующий()  Цикл
                сообщить("Характеристика "+строка(ВыборкаНиже.Характеристика));
                НаименованиеЭлемента=ВыборкаНиже.ХарактеристикаНаименование;
                XML.ЗаписатьНачалоЭлемента("item");
                XML.ЗаписатьАтрибут("name",НаименованиеЭлемента);
                XML.ЗаписатьКонецЭлемента();
            КонецЦикла;
            XML.ЗаписатьКонецЭлемента();
        иначе
            XML.ЗаписатьНачалоЭлемента("part");
            XML.ЗаписатьАтрибут("name",Выборка.Наименование);
            ВыборкаНиже=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
            ОбходЗапроса(ВыборкаНиже);
            XML.ЗаписатьКонецЭлемента();
        КонецЕсли;
        XML.ЗаписатьКонецЭлемента();
    КонецЦикла;
    XML.Закрыть();
КонецПроцедуры
11 m-serg74
 
16.07.14
12:46
(10) тогда читай (7)
12 batmansoft
 
16.07.14
15:28
(11)
Сделал вот так:
Процедура ВыгрузитьНаСервере()
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Номенклатура.Наименование КАК Наименование,
    |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    |    ТоварыНаСкладахОстатки.Характеристика,
    |    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
    |    ТоварыНаСкладахОстатки.Характеристика.ДополнительныеРеквизиты.(
    |        Ссылка КАК Ссылка,
    |        Свойство КАК Свойство,
    |        Значение КАК Значение
    |    ) КАК Реквизиты,
    |    ТоварыНаСкладахОстатки.Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |    ТоварыНаСкладахОстатки.Характеристика.Наименование КАК ХарактеристикаНаименование
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(
    |            &Дата,
    |            &ПоВсей
    |                ИЛИ Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстатки
    |ИТОГИ ПО
    |    Номенклатура ИЕРАРХИЯ"
    ;
    Запрос.УстановитьПараметр("Дата",Объект.ДатаВыгрузки);
    Запрос.УстановитьПараметр("Номенклатура",Объект.ФильтрПоНоменклатуре);
    Запрос.УстановитьПараметр("ПоВсей",Не ЗначениеЗаполнено(Объект.ФильтрПоНоменклатуре));
    //Объект.ТЗ=Запрос.Выполнить().Выгрузить();
    Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
    XML=Новый ЗаписьXML();
    XML.ОткрытьФайл(Объект.ИмяФайла);
    XML.ЗаписатьОбъявлениеXML();
    XML.ЗаписатьНачалоЭлемента("data");
    ОбходЗапроса(Выборка);
    XML.ЗаписатьКонецЭлемента();    
КонецПроцедуры


Процедура ОбходЗапроса(Выборка)
    Пока Выборка.Следующий() Цикл
        сообщить(строка(Выборка.Номенклатура)+" "+строка(Выборка.ЭтоГруппа));
        Если НЕ Выборка.ЭтоГруппа Тогда    
            XML.ЗаписатьНачалоЭлемента("goods");
            ВыборкаНиже=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            Пока ВыборкаНиже.Следующий()  Цикл
                сообщить("Характеристика "+строка(ВыборкаНиже.Характеристика));
                НаименованиеЭлемента=ВыборкаНиже.ХарактеристикаНаименование;
                XML.ЗаписатьНачалоЭлемента("item");
                XML.ЗаписатьАтрибут("name",НаименованиеЭлемента);
                XML.ЗаписатьКонецЭлемента();
            КонецЦикла;
            XML.ЗаписатьКонецЭлемента();
        иначе
            XML.ЗаписатьНачалоЭлемента("part");
            XML.ЗаписатьАтрибут("name",Выборка.Наименование);
            ВыборкаНиже=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
            ОбходЗапроса(ВыборкаНиже);
            XML.ЗаписатьКонецЭлемента();
        КонецЕсли;
    КонецЦикла;
    XML.Закрыть();
КонецПроцедуры

такая же фигня
13 batmansoft
 
16.07.14
15:32
А не все, спасибо, уже разобрался, вот так надо:
    XML.ОткрытьФайл(Объект.ИмяФайла);
    XML.ЗаписатьОбъявлениеXML();
    XML.ЗаписатьНачалоЭлемента("data");
    ОбходЗапроса(Выборка);
    XML.ЗаписатьКонецЭлемента();    
    XML.Закрыть();