Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Выгрузка данных из MySQL в файл XML через 1С 7.7 (число прочтений - 3046 )
programm.ist
Junior Member
**
Отсутствует


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Выгрузка данных из MySQL в файл XML через 1С 7.7
21. Января 2021 :: 06:07
Печать  
Доброе время суток!
Имеется:
Win Server 2012 R2;
1С 7.70.027;
Файловая (.DBF);
1cpp (3.2.2.0);

Нужно:
- подключиться к базе MySQL;
- получить данные;
- сохранить результат в файл .xml

Казалось бы - что сложного? Но у меня "затык" на сохранении в файл .xml Как же мне сохранить результат выборки?

[code]
Процедура ВыгрузитьВxml()
     
     ЗагрузитьВнешнююКомпоненту("1cpp.dll");
     
     ИмяСервера      = "localhost";
     ИмяБазы            = "belcash";
     Пользователь= "root";
     Пароль            = "";
     
     ЗаписыватьОшибкиВЖурналРегистрации = 0;
     
     ConnectionString=
     "DRIVER=MySQL ODBC 5.1 Driver;"      +
     "SERVER="      + ИмяСервера      + ";"      +
     "DataBase="      + ИмяБазы            + ";"      +
     "UID="            + Пользователь      + ";"      +
     "PWD="            + Пароль            + ";"
     ;
     
     _Recordset = СоздатьОбъект("ODBCRecordset");
     Connection = СоздатьОбъект("ODBCDatabase");
     Если Connection.Соединение(ConnectionString) = 1 Тогда
           _Recordset.УстБД(Connection);
     Иначе
           Ошибка = "Не установлен Источники данных (ODBC): MySQL ODBC Driver";
           Если ЗаписыватьОшибкиВЖурналРегистрации = 1 Тогда
                 ЗаписьЖурналаРегистрации(Ошибка,"Ошибка","Ошибка выполнения",,5);
           КонецЕсли;
           Сообщить(Ошибка, "!!!");
           Возврат;
     КонецЕсли;
           
     ТекстЗапроса = "SELECT * FROM plu FOR XML raw";
     
     РезультатВыполненияЗапроса = _Recordset.ВыполнитьXML(ТекстЗапроса,);
     Если ПустаяСтрока(РезультатВыполненияЗапроса) = 1 Тогда
           Ошибка = "Запрос не выполнен";
           Если ЗаписыватьОшибкиВЖурналРегистрации = 1 Тогда
                 ЗаписьЖурналаРегистрации(Ошибка,"Ошибка","Ошибка выполнения",,5);
           КонецЕсли;
           Сообщить(Ошибка, "!!!");
           Возврат;
     КонецЕсли;
КонецПроцедуры
[/code]
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #1 - 23. Января 2021 :: 06:14
Печать  
Добавь в метод BinaryData объект.
https://www.1cpp.ru/forum/YaBB.pl?num=1160120926
  
Наверх
IP записан
 
programm.ist
Junior Member
**
Отсутствует


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #2 - 24. Января 2021 :: 15:40
Печать  
Исправил процедуру:

Код
Выбрать все
Процедура ВыгрузитьВxml()

	ЗагрузитьВнешнююКомпоненту("1cpp.dll");

	ИмяСервера	= "localhost";
	ИмяБазы		= "belcash";
	Пользователь= "root";
	Пароль		= "";

	ЗаписыватьОшибкиВЖурналРегистрации = 0;

	ConnectionString=
	"DRIVER=MySQL ODBC 5.1 Driver;"	+
	"SERVER="	+ ИмяСервера	+ ";"	+
	"DataBase="	+ ИмяБазы		+ ";"	+
	"UID="		+ Пользователь	+ ";"	+
	"PWD="		+ Пароль		+ ";"
	;

	_Recordset = СоздатьОбъект("ODBCRecordset");
	Connection = СоздатьОбъект("ODBCDatabase");
	Если Connection.Соединение(ConnectionString) = 1 Тогда
		_Recordset.УстБД(Connection);
	Иначе
		Ошибка = "Не установлен Источники данных (ODBC): MySQL ODBC Driver";
		Если ЗаписыватьОшибкиВЖурналРегистрации = 1 Тогда
			ЗаписьЖурналаРегистрации(Ошибка,"Ошибка","Ошибка выполнения",,5);
		КонецЕсли;
		Сообщить(Ошибка, "!!!");
		Возврат;
	КонецЕсли;

	ТекстЗапроса = "SELECT * FROM plu for xml raw";

	BinaryData = СоздатьОбъект("BinaryData");
	BinaryData.ПодключитьсяКФайлу("d:\Base1c\11.xml");
	BinaryData.Кодировка = 3;
	BinaryData.ЗаписатьМПБ();
	BinaryData.ЗаписатьСтроку("<?xml version=""1.0"" encoding=""UTF-16"" ?>
	|<SomeData>");
	_Recordset.ВыполнитьXML(ТекстЗапроса, BinaryData);
	BinaryData.ЗаписатьСтроку("
	|</SomeData>");

КонецПроцедуры
 



Ошибка при выполнении:
(65)}: State HY010, native 0, message [Microsoft][Диспетчер драйверов ODBC] Ошибка последовательности функций

При изменении последних строк с:

Код
Выбрать все
_Recordset.ВыполнитьXML(ТекстЗапроса, BinaryData);
BinaryData.ЗаписатьСтроку("
	|</SomeData>");
 



на:

Код
Выбрать все
стр =_Recordset.ВыполнитьXML(ТекстЗапроса);
BinaryData.ЗаписатьСтроку(стр);
BinaryData.ЗаписатьСтроку("
	|</SomeData>");
 



тип ошибки не изменяется.

Файл 11.xml содержит, соответственно, строки:
<?xml version="1.0" encoding="UTF-16" ?>
<SomeData>

Где-то я лопухнулся...
  
Наверх
 
IP записан
 
programm.ist
Junior Member
**
Отсутствует


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #3 - 28. Января 2021 :: 11:39
Печать  
Кажется, что дело именно в файловой базе 1С. Но как это связано - пока не вижу, ведь соединение с MySQL проходит, Select работает.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #4 - 29. Января 2021 :: 14:49
Печать  
для порядку сделай так
BinaryData.ПодключитьсяКФайлу("d:\Base1c\11.xml", 2, 2);
  

1&&2&&3
Наверх
 
IP записан
 
programm.ist
Junior Member
**
Отсутствует


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #5 - 31. Января 2021 :: 09:59
Печать  
trad писал(а) 29. Января 2021 :: 14:49:
для порядку сделай так
BinaryData.ПодключитьсяКФайлу("d:\Base1c\11.xml", 2, 2);

Добрый день.
К сожалению, с этой строчкой ошибка осталась та же:
State HY010, native 0, message [Microsoft][Диспетчер драйверов ODBC] Ошибка последовательности функций
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #6 - 01. Февраля 2021 :: 06:32
Печать  
попробуй, для начала, вместо
SELECT *
получить только одно поле
  

1&&2&&3
Наверх
 
IP записан
 
programm.ist
Junior Member
**
Отсутствует


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #7 - 01. Февраля 2021 :: 08:31
Печать  
trad писал(а) 01. Февраля 2021 :: 06:32:
попробуй, для начала, вместо
SELECT *
получить только одно поле

Внес изменения. Весь текст процедуры:
Код
Выбрать все
Процедура ВыгрузитьВxml()

	ЗагрузитьВнешнююКомпоненту("1cpp.dll");

	ИмяСервера	= "localhost";
	ИмяБазы		= "belcash";
	Пользователь= "root";
	Пароль		= "";

	ЗаписыватьОшибкиВЖурналРегистрации = 0;

	ConnectionString=
	"DRIVER=MySQL ODBC 5.1 Driver;"	+
	"SERVER="	+ ИмяСервера	+ ";"	+
	"DataBase="	+ ИмяБазы		+ ";"	+
	"UID="		+ Пользователь	+ ";"	+
	"PWD="		+ Пароль		+ ";"
	;

	_Recordset = СоздатьОбъект("ODBCRecordset");
	Connection = СоздатьОбъект("ODBCDatabase");
	Если Connection.Соединение(ConnectionString) = 1 Тогда
		_Recordset.УстБД(Connection);
	Иначе
		Ошибка = "Не установлен Источники данных (ODBC): MySQL ODBC Driver";
		Если ЗаписыватьОшибкиВЖурналРегистрации = 1 Тогда
			ЗаписьЖурналаРегистрации(Ошибка,"Ошибка","Ошибка выполнения",,5);
		КонецЕсли;
		Сообщить(Ошибка, "!!!");
		Возврат;
	КонецЕсли;

	ТекстЗапроса = "SELECT Code FROM plu for xml raw";

	BinaryData = СоздатьОбъект("BinaryData");
	BinaryData.ПодключитьсяКФайлу("d:\Base1c\11.xml", 2, 2);
	BinaryData.Кодировка = 3;
	BinaryData.ЗаписатьМПБ();
	BinaryData.ЗаписатьСтроку("<?xml version=""1.0"" encoding=""UTF-16"" ?>
	|<SomeData>");

	стр =_Recordset.ВыполнитьXML(ТекстЗапроса);
	BinaryData.ЗаписатьСтроку(стр);
	BinaryData.ЗаписатьСтроку("
	|</SomeData>");

КонецПроцедуры

 



Ошибка: .ERT(43)}: State HY010, native 0, message [Microsoft][Диспетчер драйверов ODBC] Ошибка последовательности функций
  
Наверх
 
IP записан
 
programm.ist
Junior Member
**
Отсутствует


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #8 - 01. Февраля 2021 :: 08:47
Печать  
При выгрузке в .csv такой код отрабатывает:
Код
Выбрать все
КаталогСохраненияCSV = "d:/Base1c/";

	ТекстЗапросаВcsv = "SELECT Code FROM plu INTO OUTFILE '" + КаталогСохраненияCSV + "plu.csv'
	|FIELDS TERMINATED BY ';'
	|ESCAPED BY '\\'
	|OPTIONALLY ENCLOSED BY '""'
	|LINES TERMINATED BY '\n'
	|";

	_Recordset.ВыполнитьИнструкцию(ТекстЗапросаВcsv);
	Возврат;
 

  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #9 - 01. Февраля 2021 :: 09:10
Печать  
посмотрел синтаксис mysql
https://dev.mysql.com/doc/refman/8.0/en/select.html

что-то я там не обнаружил такого синтаксиса "for xml raw"
  

1&&2&&3
Наверх
 
IP записан
 
programm.ist
Junior Member
**
Отсутствует


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #10 - 01. Февраля 2021 :: 20:20
Печать  
trad писал(а) 01. Февраля 2021 :: 09:10:
посмотрел синтаксис mysql
https://dev.mysql.com/doc/refman/8.0/en/select.html

что-то я там не обнаружил такого синтаксиса "for xml raw"

Использовал информацию с https://stackoverflow.com/questions/2847674/xml-output-from-mysql
По Вашей ссылке не смог найти export to xml, только load xml. Возможно, плохо искал?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #11 - 02. Февраля 2021 :: 06:14
Печать  
По ссылке на стековерфло не говорится, что применимо for xml в MySQL.
Там как раз человек спрашивает, можно ли так писать как в MSSQL.
В одном из ответов ему подсказывают использовать опцию клиента --xml
https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html#option_mysql_...
  

1&&2&&3
Наверх
 
IP записан
 
programm.ist
Junior Member
**
Отсутствует


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #12 - 03. Февраля 2021 :: 16:08
Печать  
trad писал(а) 02. Февраля 2021 :: 06:14:
По ссылке на стековерфло не говорится, что применимо for xml в MySQL.
Там как раз человек спрашивает, можно ли так писать как в MSSQL.
В одном из ответов ему подсказывают использовать опцию клиента --xml
https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html#option_mysql_...


При использовании cmd:
d:\belcash\mysql\bin\mysql.exe -u root belcash --xml < d:\Base1c\data.sql > d:\Base1c\11.xml
где содержание data.sql  - это просто запрос select Code from plu
Файл 11.xml создается и имеет выбранные данные.
Но при попытке использовать

Код
Выбрать все
СтрокаКоманды = "d:\belcash\mysql\bin\mysql.exe -u root belcash --xml < d:\Base1c\data.sql > d:\Base1c\11.xml";
ЗапуститьПриложение(СтрокаКоманды);
 



в Процедуре - файл 11.xml не формируется.
  
Наверх
 
IP записан
 
programm.ist
Junior Member
**
Отсутствует


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #13 - 03. Февраля 2021 :: 16:45
Печать  
Нашел самый простой способ:
Код
Выбрать все
ТекстЗапроса = "SELECT
	|CONCAT(
	|	'\n<a>'
	|	, code
	|	, '</a>\n'
	|	, '<b>'
	|	, code
	|	, '</b>\n'
	|	)
	|FROM
	|	customers
	|INTO OUTFILE '" + КаталогСохраненияXML + "client.xml'
	|FIELDS
	|TERMINATED BY ','
	|OPTIONALLY ENCLOSED BY ' '
	|ESCAPED BY ''
	|LINES
	|STARTING BY '\t\t<cust>'
	|TERMINATED BY '\t\t</cust>\n'
	|";
 



Спасибо Сергею Степанову: https://www.freedev.world/post/databases/%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1...
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Выгрузка данных из MySQL в файл XML через 1С 7.7
Ответ #14 - 04. Февраля 2021 :: 07:08
Печать  
вместо ЗапуститьПриложение
попробуй КомандаСистемы
  

1&&2&&3
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать