УкраїнськаEnglishmRussian
Вхід/Новий
У темі немає нових постів

XML80020 и Excel


Автор Повідомлення
Повідомлення створено: 04. 12. 2019 [14:36]
ShuraF
Aleksandr Fenogentov
Автор теми
Зареєстрован(а) с: 08.08.2019
Повідомлення: 50
Для изучения OpenSCADA решаю какие-нибудь задачки. Т.е. совмещаю приятное с полезным.
Сейчас организовал "перекачку" архива получасовок из Меркурия и сохранение в базу SQL посредством возможностями OpenSCADA.
Далее думаю сделать формирование отчета XML в виде макета 80020 (почасовки), как требует Энергосбыт. Ну и Excel.

Роман, как более правильно это реализовать?
Документ?
Повідомлення створено: 05. 12. 2019 [08:33]
ShuraF
Aleksandr Fenogentov
Автор теми
Зареєстрован(а) с: 08.08.2019
Повідомлення: 50
Сморозил глупость?

Документ - это для отображения в аизуализации?
А для работы с XML существует XMLNode?
Повідомлення створено: 05. 12. 2019 [09:49]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"ShuraF" wrote:

Документ - это для отображения в аизуализации?

Да, хотя он сам основан на XHTML, что по факту XML+HTML, и который в XMLNode обрабатывается.

"ShuraF" wrote:

А для работы с XML существует XMLNode?

Конечно, как собственно и для всяких ODS, XLSX, а про XLS можно забыть.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 06. 12. 2019 [08:59]
ShuraF
Aleksandr Fenogentov
Автор теми
Зареєстрован(а) с: 08.08.2019
Повідомлення: 50
Должно получиться примерно так:
HTML
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<message number="22" version="2" class="80020">
	<datetime>
		<timestamp>20140130140618</timestamp>
		<daylightsavingtime>1</daylightsavingtime>
		<day>20140122</day>
	</datetime>
	<sender />
	<area timezone="1">
		<name>ООО "ИНТЕР"</name>
		<inn>1234567</inn>
	</area>
</message>


Делаю так:

JAVASCRIPT
DT_tst = SYS.XMLNode("datetime");
DT_tst.childAdd("daylightsavingtime").setText(1);
stTimeStamp = tmFStr(SYS.time(),"%Y%m%d%H%M%S");
DT_tst.childAdd("timestamp").setText(stTimeStamp);
stTimeStamp = tmFStr(SYS.time(),"%Y%m%d");
DT_tst.childAdd("day").setText(stTimeStamp);
 
// Общий тег
req001 = SYS.XMLNode("message").setAttr("number",2345).setAttr("version","2").setAttr("class","80020");
// Тег <datetime>
req001.childAdd(DT_tst);
// Тег <sender />
req001.childAdd("sender");
// Тег <area timezone="1">
req001.childAdd("area").setAttr("timezone","1");
req001.childAdd("name").setText(nameOOO);
req001.childAdd("inn").setText(INN);
req001.save (0x25, "/home/aleksandr/.openscada/log/resp1.xml");


Получаю:

HTML
<?xml version='1.0' encoding='UTF-8' ?>
<message class="80020" number="2345" version="2">
	<datetime>
		<daylightsavingtime>1</daylightsavingtime>
		<timestamp>20191206094931</timestamp>
		<day>20191206</day>
	</datetime>
	<sender />
	<area timezone="1" />
	<name>ООО "TEST"</name>
	<inn>1234567890</inn>
</message>


т.е. сначала создаю обект вложенных тегов, а потом вставляю ("вкладываю")

Правильно? Или я опять изобретаю велосипед и есть более правильный и простой способ "вкладывать" строки?



6750