8.х Выгрузка данные в xml

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Drakonchegg, 16 авг 2012.

  1. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте еще раз, хотел бы спросить. Возможно ли данные разгружать в таблицах, к примеру:
    Iфио l
    Iспециализация l
    Iвремя l
    ---------------------- l---------------
    Iсвободно l
    I l
    I l
    -----------------------l--------------
    Iзанято l

    Это расписание для веб сайта. Впервые с этим сталкиваюсь. даже гуглил, но не нашел((
  2. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Доброго Всем,
    Поясните подробнее, а то совсем не понятно
  3. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Мне нужно выгрузить в хмл формате, из раруса расписание врачей, за неделю.
  4. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Если у Вас расписание в таблице значений (сериализуется) то проблем нет, код небольшой.
    Смотрим в синтаксис помощнике "Фабрика XDTO"

    Пример кода :
    Код:
    Процедура ЗаписатьДанныеВXML(ОбъектДанных)
    Если ОбъектДанных.Количество() > 0 Тогда
    
    МойXML  = Новый ЗаписьXML;
    
    ДополнениеКИмениФайла = Формат(ДеньГода(ТекущаяДата()),"ЧВН; ЧРГ=""""") + Формат(Час(ТекущаяДата()),"ЧВН; ЧРГ=""""") + Формат(Минута(ТекущаяДата()),"ЧВН; ЧРГ=""""");
    
    ИмяФайлаXML = "D:\Temp\" + ДополнениеКИмениФайла + "_Exchange.xml";
    
    ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
    
    МойXML.ОткрытьФайл(ИмяФайлаXML, ПараметрыЗаписиXML);
    МойXML.ЗаписатьОбъявлениеXML();
    
    Объект = СериализаторXDTO.ЗаписатьXDTO(ОбъектДанных);
    
    ФабрикаXDTO.ЗаписатьXML(МойXML, Объект);
    
    МойXML.Закрыть();
    
    КонецЕсли;
    КонецПроцедуры
  5. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Нет, расписание не в табличном значений.
  6. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    ОК.
    Создаешь запрос, запросом получаешь данные которые тебе нужны
    Результат запроса выгружаешь в таблицу значений ( Запрос.Выполнить().Выгрузить() ), после чего преобразовываешь в xml и сохраняешь
  7. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Запрос сделаю, в преобразовывать в хмл как?
  8. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Процедурой
    Код:
    ЗаписатьДанныеВXML(ОбъектДанных)
    
    код которой я привел выше.
    "ОбъектДанных" - таблица значений (результат запроса)
  9. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    {Форма.Форма(25)}: Значение не является значением объектного типа (Количество)
    Если ОбъектДанных.Количество() > 0 Тогда
    ругаеться
  10. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Покажи код
  11. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура ОсновныеДействияФормыСформировать(Кнопка)
    // Вставить содержимое обработчика.
    Запрос = Новый Запрос("ВЫБРАТЬ
    | ТалонНаПриемВызовСпециалиста.ДатаВремяПриема КАК ДатаПриема,
    | ТалонНаПриемВызовСпециалиста.СпециалистНаправления КАК ФИО,
    | ТалонНаПриемВызовСпециалиста.СпециализацияНаправления КАК Специализация
    |ИЗ
    | Документ.ТалонНаПриемВызовСпециалиста КАК ТалонНаПриемВызовСпециалиста
    |ГДЕ
    | ТалонНаПриемВызовСпециалиста.Дата МЕЖДУ &Нач И &Кон");
    Запрос.УстановитьПараметр("Нач", НачалоНедели(НачДата));
    Запрос.УстановитьПараметр("Кон", КонецНедели(КонДата));
    РЗ = Запрос.Выполнить();
    ТП = РЗ.Выгрузить();
    ЭлементыФормы.ТП.СоздатьКолонки();
    КонецПроцедуры
    Процедура ОсновныеДействияФормыВыгрузить(Кнопка,ОбъектДанных)
    // Вставить содержимое обработчика.
    ЗаписатьДанныеВXML(ОбъектДанных);
    КонецПроцедуры
    Процедура ЗаписатьДанныеВXML(ОбъектДанных)
    Если ОбъектДанных.Количество() > 0 Тогда
    МойXML  = Новый ЗаписьXML;
    ДополнениеКИмениФайла = Формат(ДеньГода(ТекущаяДата()),"ЧВН; ЧРГ=""""") + Формат(Час(ТекущаяДата()),"ЧВН; ЧРГ=""""") + Формат(Минута(ТекущаяДата()),"ЧВН; ЧРГ=""""");
    ИмяФайлаXML = "D:\Temp\" + ДополнениеКИмениФайла + "_Exchange.xml";
    ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
    МойXML.ОткрытьФайл(ИмяФайлаXML, ПараметрыЗаписиXML);
    МойXML.ЗаписатьОбъявлениеXML();
    Объект = СериализаторXDTO.ЗаписатьXDTO(ОбъектДанных);
    ФабрикаXDTO.ЗаписатьXML(МойXML, Объект);
    МойXML.Закрыть();
    КонецЕсли;
    КонецПроцедуры
  12. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    В процедуре "ОсновныеДействияФормыВыгрузить" :
    Код:
    Процедура ОсновныеДействияФормыВыгрузить(Кнопка,ОбъектДанных)
    
    ЗаписатьДанныеВXML(ТП); // ТП - реквизит формы тип - таблиц значений
    
    КонецПроцедуры
    
  13. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    {Форма.Форма(38)}: Ошибка при вызове метода контекста (ЗаписатьXDTO): Ошибка отображения типов:
    Отсутствует отображение для типа 'ТаблицаЗначений'
    Объект = СериализаторXDTO.ЗаписатьXDTO(ОбъектДанных);
    по причине:
    Ошибка отображения типов:
    Отсутствует отображение для типа 'ТаблицаЗначений'
  14. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Попробуй исправить запрос таким образом, чтобы он возвращал в поля простые типы (строка, число, дата, булево), используй в запросе "ПРЕДСТАВЛЕНИЕ"
  15. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    так что ли?
    Код:
    Запрос = Новый Запрос("ВЫБРАТЬ
    | ПРЕДСТАВЛЕНИЕ(ТалонНаПриемВызовСпециалиста.ДатаВремяПриема) КАК ДатаПриема,
    | ПРЕДСТАВЛЕНИЕ(ТалонНаПриемВызовСпециалиста.СпециалистНаправления) КАК ФИО,
    | ПРЕДСТАВЛЕНИЕ(ТалонНаПриемВызовСпециалиста.СпециализацияНаправления) КАК Специализация
    |ИЗ
    | Документ.ТалонНаПриемВызовСпециалиста КАК ТалонНаПриемВызовСпециалиста
    |ГДЕ
    | ТалонНаПриемВызовСпециалиста.Дата МЕЖДУ &Нач И &Кон");
    Запрос.УстановитьПараметр("Нач", НачалоНедели(НачДата));
    Запрос.УстановитьПараметр("Кон", КонецНедели(КонДата));
    РЗ = Запрос.Выполнить();
    ТП = РЗ.Выгрузить();
    ЭлементыФормы.ТП.СоздатьКолонки();
    
    если да, то так же ошибка вылетает
  16. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Какая версия платформы ?
  17. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    1с рарус 8.1 (8.1.15.14)
  18. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    ОК Понял. Сериализация не работает :( . Тогда "В Лоб" -

    Поменяй и добавь след. функции :
    Код:
    Функция СоздатьXMLОбъект()
    Попытка
    ОбъектXML = Новый COMОбъект("Microsoft.XMLDOM");
    Header = ОбъектXML.createProcessingInstruction("xml", "version=""1.0"" encoding=""windows-1251""");
    ОбъектXML.appendChild(Header);
    Исключение
    Сообщить("Не удалось создать XML объект.");
    ОбъектXML = Неопределено;
    КонецПопытки;
    
    Возврат ОбъектXML;
    КонецФункции
    Процедура ЗаписатьДанныеВXML(ТаблицаДанных)
    ОбъектXML = СоздатьXMLОбъект();
    Если ОбъектXML = Неопределено Тогда
    Возврат;
    КонецЕсли;
    
    ElemDoc = ОбъектXML.createElement("timetable");
    ElemDoc.setAttribute("type", "state");
    NodeDoc = ОбъектXML.appendChild(ElemDoc);
    
    Для Каждого Строка Из ТаблицаДанных Цикл
    
    ElemStr = ОбъектXML.createElement("table");
    ElemStr.setAttribute("VisitDate", Строка.ДатаПриема);
    ElemStr.setAttribute("Specialist", Строка.ФИО);
    ElemStr.setAttribute("SpcType",  Строка.Специализация);
    NodeStr = NodeDoc.appendChild(ElemStr);
    
    КонецЦикла;
    
    ДополнениеКИмениФайла = Формат(ДеньГода(ТекущаяДата()),"ЧВН; ЧРГ=""""") + Формат(Час(ТекущаяДата()),"ЧВН; ЧРГ=""""") + Формат(Минута(ТекущаяДата()),"ЧВН; ЧРГ=""""");
    ИмяФайлаXML = "D:\" + ДополнениеКИмениФайла + "_Exchange.xml";
    ОбъектXML.Save(ИмяФайлаXML);
    КонецПроцедуры
    
    смотри так же http://infostart.ru/public/84783/
    и http://1cprofi.com/content/view/11/46/
  19. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    {Форма.Форма(46)}: Итератор для значения не определен
    Для Каждого Строка Из ТаблицаДанных Цикл
    теперь так ругается =(
  20. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Так будет ругаться если в процедуру "ЗаписатьДанныеВXML(ТаблицаДанных)" по параметру "ТаблицаДанных" передаешь, что то что отличается от таблицы (в данном случае).
    Ставишь точку останова и с помощью "Вычислить значение" - кнопка в меню конфигуратора в режиме отладки, разбираешься что не так.

Поделиться этой страницей