Имя: Пароль:
1C
1С v8
Есть у кого пример записи в XML не через план обмена?
0 breezee
 
23.02.16
14:30
Пишу обмен между ИБ на мобильном и ИБ на сервере. Нужно загружать всех пользователей без узлов обмена.  
Есть запись данных в XML через планы обмена. Вот код:
    ЗаписьXML = Новый ЗаписьXML;
    
    ЗаписьXML.УстановитьСтроку("UTF-8");
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    
    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
    ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);                    
    
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance";);
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data";);
    
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, ЗаписьСообщения.НомерСообщения);
    Пока ВыборкаИзменений.Следующий() Цикл
        Данные = ВыборкаИзменений.Получить();
        
        // Если перенос данных не нужен, то, возможно, необходимо записать удаление данных
        Если Не НуженПереносДанных(Данные, УзелОбмена) Тогда
            // Получаем значение с возможным удалением данных
            УдалениеДанных(Данные);
        КонецЕсли;    

        // Записываем данные в сообщение
        ЗаписатьДанные(ЗаписьXML, Данные);
    КонецЦикла;
    
    ЗаписьСообщения.ЗакончитьЗапись();
    
    Возврат Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9));
Мне нужно его изменить так, чтобы записывались все желементы справочника, не важно, были ли они изменены.

Попытался сделать так(просто убрать информацию об обмене)
ЗаписьXML = Новый ЗаписьXML;
    
    ЗаписьXML.УстановитьСтроку("UTF-8");
    ЗаписьXML.ЗаписатьОбъявлениеXML();    
    
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance";);
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data";);
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Пользователи.Ссылка
        |ИЗ
        |    Справочник.Пользователи КАК Пользователи";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Попытка
        Пользователь = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
    Исключение
        Сообщить(ОписаниеОшибки());
        Продолжить;
    КонецПопытки;
    ЗаписатьДанные(ЗаписьXML, Пользователь);

    КонецЦикла;
    
    
    Возврат Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9));
Пишет ошибку, когда начинает записывать соответствие пространства имен. Как побороть ошибку и может кто кинет пример как записать все элементы справочника в XML.
1 Armando
 
23.02.16
14:38
Можно XDTO. Пишу наугад:

Выборка = Справочники.Пользователи.Выбрать();
Пока Выборка.Следующий() Цикл
    ЗаписьXML = Новый ЗаписьXML;
    СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Выборка.ПолучитьОбъект());
КонецЦикла;

надеюсь ход мысли понятен
2 breezee
 
23.02.16
14:41
(1) Ок, понял. Спасибо. Неудобно немного что в XML нельззя писать без какого либо объекта. Наверное так не сделали, потому что тогда было бы не понятно как читать XML. Ладно, не важно. Еще раз спасибо
3 Александр_
Тверь
 
23.02.16
14:55
(2) а что значит без какого либо объекта? Странная фраза.

Можешь открыть текстовый файл и писать туда напрямую что хочешь и как хочешь (в том числе и XML).

Можешь через записьXML писать что хошочешь.
Посмотри синтаксис помошник.
4 breezee
 
23.02.16
15:13
(3) Спасибо, наверное проще писать сразу в XML. Нашел пример с XDTO. Может кому поможет. Оставлю здесь. В примере я получаю все данные из справочника пользователи, помещаю их в ТЗ и ТЗ передаю в процедуру, функция, которая пишет их в XML и XML возвращает  
Функция СформироватьПользователей() Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Пользователи.Ссылка,
        |    Пользователи.Наименование
        |ИЗ
        |    Справочник.Пользователи КАК Пользователи";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выгрузить();
      СериализованнаяСтруктураДанных = Сериализовать(ВыборкаДетальныеЗаписи);
    
    
    Возврат Новый ХранилищеЗначения(СериализованнаяСтруктураДанных, Новый СжатиеДанных(9));
    
    
    
КонецФункции

Функция Сериализовать(ОбъектСериализации)
    ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
    МойXML = Новый ЗаписьXML;
    МойXML.УстановитьСтроку();
    ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
    Возврат МойXML.Закрыть();
КонецФункции
5 breezee
 
23.02.16
15:21
Бл*, я только что получил всех пользователей после того как авторизовался. Как мне получить всех пользователей до авторизации?
6 Cyberhawk
 
23.02.16
15:27
Справочник "Пользователи" и пользователи ИБ - это разные вещи.
К справочнику (как и к любому объекту БД) ты имеешь доступ только после авторизации.
AdBlock убивает бесплатный контент. 1Сергей