Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Ошибка  "ВыполнитьXML"  -  "Запрос (число прочтений - 12988 )
Snif
Junior Member
**
Отсутствует



Сообщений: 44
Зарегистрирован: 30. Мая 2006
Пол: Мужской
Ошибка  "ВыполнитьXML"  -  "Запрос
06. Октября 2006 :: 07:48
Печать  
      RecordSet=СоздатьОбъект("ODBCRecordSet");
      obBinaryData= СоздатьОбъект("BinaryData");
     
      ТекстЗапроса="
      |Select *
      |FROM $Справочник.Агенты as спрАгенты (NOLOCK)
      |";                                          
     
      RecordSet.ВыполнитьXML(ТекстЗапроса,obBinaryData);

выдает ошибку "Запрос не XML"
  
Наверх
www  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #1 - 06. Октября 2006 :: 08:22
Печать  
Код
Выбрать все
Select *
FROM $Справочник.Агенты as спрАгенты (NOLOCK)
FOR XML AUTO";
 

  
Наверх
ICQ  
IP записан
 
Snif
Junior Member
**
Отсутствует



Сообщений: 44
Зарегистрирован: 30. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #2 - 06. Октября 2006 :: 08:32
Печать  
Код
Выбрать все
Не удается отобразить страницу XML
Не удается просмотреть ввод XML с использованием списка стилей . Исправьте ошибку и затем нажмите кнопку "Обновить"или повторите попытку позднее.




В текстовом комментарии обнаружен недопустимый знак. Ошибка при обработке ресурса ''file:///C:/1.xml''. Строка 1,Положение...

<

 



- так для любого запроса не получается просмотреть результирующий XML с помощью IE
  
Наверх
www  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #3 - 06. Октября 2006 :: 08:35
Печать  
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #4 - 06. Октября 2006 :: 11:32
Печать  
Snif писал(а) 06. Октября 2006 :: 08:32:
Код
Выбрать все
Не удается отобразить страницу XML
Не удается просмотреть ввод XML с использованием списка стилей . Исправьте ошибку и затем нажмите кнопку "Обновить"или повторите попытку позднее.




В текстовом комментарии обнаружен недопустимый знак. Ошибка при обработке ресурса ''file:///C:/1.xml''. Строка 1,Положение...

<

 



- так для любого запроса не получается просмотреть результирующий XML с помощью IE

Чтобы получился xml-файл:
1)в начало файла нужно записать заголовок xml файла и начальный тэг корневого элемента;
например:
<?xml version="1.0" encoding="windows-1251" ?>
<SomeData>


2)потом наполнять файл результатами xml запросов;

3)в конец файла записать завершающий тэг корневого элемента.
например:
</SomeData>
  
Наверх
ICQ  
IP записан
 
Snif
Junior Member
**
Отсутствует



Сообщений: 44
Зарегистрирован: 30. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #5 - 06. Октября 2006 :: 11:32
Печать  
А русским языком кратенько изложить суть написанного в этой ссылке, применительно к этой теме, можно? )
  
Наверх
www  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #6 - 06. Октября 2006 :: 11:47
Печать  
Замечание 1.
У объекта BinaryData есть свойство Кодировка определяющее кодировку для операций чтения/записи.
Загрузка результата запроса в переданный объект идет также с учетом значения этого свойства. На сколько я помню, объект ODBCRecordset может записать xml результат в BinaryData только когда он в кодировке 1251 или Unicode.

Замечание 2.
Результат запроса всегда возвращается в Unicode. При необходимости (свойство Кодировка) ODBCRecordset его конвертирует в 1251.

Замечание 3.
Кодировка объекта BinaryData, конечно же, должна быть согласована с содержимым заголовка xml файла. Это ответственность программиста.
  
Наверх
ICQ  
IP записан
 
Snif
Junior Member
**
Отсутствует



Сообщений: 44
Зарегистрирован: 30. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #7 - 06. Октября 2006 :: 12:02
Печать  
Поигрался с кодировкой. Нечто осмысленное появилось при
obBinaryData.Кодировка=3;

Но, выдается ошибка: "В документах XML допускается только один элемент верхнего уровня."   И это правильно. Возникает вопрос: как в тот XML, который находится в BinaryData добавить элемент верхнего уровня....
  
Наверх
www  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #8 - 06. Октября 2006 :: 12:10
Печать  
Snif писал(а) 06. Октября 2006 :: 12:02:
Поигрался с кодировкой. Нечто осмысленное появилось при
obBinaryData.Кодировка=3;

Но, выдается ошибка: "В документах XML допускается только один элемент верхнего уровня."   И это правильно. Возникает вопрос: как в тот XML, который находится в BinaryData добавить элемент верхнего уровня....

Дык ведь, именно это я и имел в виду под корневым элементом. В моем примере SomeData и есть элемент верхнего уровня.
  
Наверх
ICQ  
IP записан
 
Snif
Junior Member
**
Отсутствует



Сообщений: 44
Зарегистрирован: 30. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #9 - 06. Октября 2006 :: 12:33
Печать  
Сорри, а где этот пример можно посмотреть? В папке 1cpp-2.0.3.1.src  я, например, ничего похожего не нашел.
  
Наверх
www  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #10 - 06. Октября 2006 :: 12:37
Печать  
Код
Выбрать все
БД=СоздатьОбъект("BinaryData");
БД.ПодключитьсяКФайлу("C:\11.xml");
БД.Кодировка=3;
БД.ЗаписатьМПБ();
БД.ЗаписатьСтроку("<?xml version=""1.0"" encoding=""UTF-16"" ?>
|<SomeData>");

Запрос=СоздатьОбъект("ODBCRecordset");
Запрос.ВыполнитьXML("select top 100 * from $Справочник.Товары as Товары (nolock) for xml raw", БД);

БД.ЗаписатьСтроку("
|</SomeData>");
 

  
Наверх
ICQ  
IP записан
 
Snif
Junior Member
**
Отсутствует



Сообщений: 44
Зарегистрирован: 30. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #11 - 06. Октября 2006 :: 12:41
Печать  
Огромное спасибо, все чудесно работает!
  
Наверх
www  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #12 - 06. Октября 2006 :: 12:45
Печать  
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #13 - 06. Октября 2006 :: 15:07
Печать  
пля, я тебя уважаю Улыбка
« Последняя редакция: 07. Октября 2006 :: 05:17 - spock »  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #14 - 09. Октября 2006 :: 05:34
Печать  
spock писал(а) 06. Октября 2006 :: 15:07:
пля, я тебя уважаю Улыбка

..наливай! Смех
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #15 - 09. Октября 2006 :: 05:43
Печать  
to Snif
Кстати, еще одно общее замечание по работе объекта BynaryData.
Поскольку при подключении к файлу не происходит очистки его содержимого, в случае если файл существовал ранее, после завершения записи в него нужно сделать
Код
Выбрать все
БД.Размер(БД.Перейти(0)); 


чтобы вконце файла не остался мусор от предыдущего содержимого файла (в случае если файл был длинее).
  
Наверх
ICQ  
IP записан
 
Igor-bts
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 103
Зарегистрирован: 14. Июля 2006
Re: Ошибка  "ВыполнитьXML"  -  "Зап
Ответ #16 - 11. Октября 2006 :: 16:07
Печать  
Запрос.ВыполнитьXML("select top 100 * from $Справочник.Товары as Товары (nolock) for xml raw", БД);
в файл ничего не добавляет,
хотя так работает:
стр =Запрос.ВыполнитьXML("select top 100 * from $Справочник.Товары as Товары (nolock) for xml raw");
Бд.ЗаписатьСтроку(стр);
в чем проблемма?
релиз 2.0.3.1
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #17 - 11. Октября 2006 :: 17:09
Печать  
У объекта BinaryData какая кодировка установлена?
  
Наверх
ICQ  
IP записан
 
Igor-bts
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 103
Зарегистрирован: 14. Июля 2006
Re: Ошибка  "ВыполнитьXML"  -  "Зап
Ответ #18 - 12. Октября 2006 :: 18:51
Печать  
Спасибо.
разобрался
  
Наверх
ICQ  
IP записан
 
Дмитрий Касминюк
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 1
Зарегистрирован: 06. Февраля 2019
Re: Ошибка  "ВыполнитьXML"  -  "Запрос
Ответ #19 - 06. Февраля 2019 :: 12:13
Печать  
Извините за некропост пожалуйста. Не хотелось создавать новую тему, потому что эта полностью подходит.
Пытаюсь переписать выгрузку номенклатуры прямыми запросами сразу в виде xml файла. Использую последнюю версию 1С++ 3.2.2.0
выполняю запрос:
Код (SQL)
Выбрать все
SELECT RTRIM(спрТМЦ.CODE) code
	|	, RTRIM(спрТМЦ.DESCR) name
	|	, (SELECT RTRIM(спрШтр.CODE) codebar
	|	, RTRIM(спрЕд.DESCR) unit
	|FROM $Справочник.Штрихкоды AS спрШтр With (NOLOCK)
	|LEFT JOIN $Справочник.Единицы AS спрЕд With (NOLOCK)
	|ON (спрЕд.ID = $спрШтр.ЕдиницаИзмерения)
	|WHERE (спрШтр.PARENTEXT = спрТМЦ.ID)
	|AND (спрШтр.ISMARK = 0)
	|FOR XML RAW ('row'), TYPE, ROOT ('barcodes'))
	|FROM $Справочник.Номенклатура AS спрТМЦ With (NOLOCK)
	|INNER JOIN #ГруппаНоменклатура AS грТМЦ With (NOLOCK)
	|ON (спрТМЦ.ID = грТМЦ.val)
	|WHERE (спрТМЦ.ISFOLDER = 2)
	|AND (спрТМЦ.ISMARK = 0)
	|AND ($спрТМЦ.Проверен = 1)
	|FOR XML RAW ('Product'), TYPE, ROOT ('Obmen')
        |OPTION (MAXDOP 1)
	| 



Этот текст выполняю методом ВыполнитьXML(текстЗапроса, бинДата)
Игрался разными свойствами, кодировками объекта BinaryData. Проблема в общем и целом остается одинаковой. При выгрузке относительно большого объема данных в файле обнаруживаются в рандомных местах по 2 пробела и потом эти файлы не читаются парсерами. Если убрать эти пробелы текстовым редактором, то файл успешно открывается.
Помогите пожалуйста. Очень нравится скорость выполнения операции, но не могу побороть эту беду.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать