forum.bitel.ru
http://forum.bitel.ru/

Получить/отредактировать XML счета/фактуры в скрипте
http://forum.bitel.ru/viewtopic.php?f=14&t=5549
Страница 1 из 1

Автор:  Феанор [ 01 июн 2011, 10:43 ]
Заголовок сообщения:  Получить/отредактировать XML счета/фактуры в скрипте

Добрый день.
Хочу после создания счетов-фактур их пропарсить (кой чего поправить, кой чего добавить в xml).
Код:
InvoiceManager invMan = new InvoiceManager( setup, con, mid, moduleSetup );
BillDoc invDoc=invMan.getInvoice(25); // для тестов 25 - номер последней счет фактуры
ct=invDoc.getSumm();
invXml=invDoc.getXml();
nodList=invXml.getElementsByTagName("pos");

И вот такое впечатление что getXml() возвращает null, а почему - не пойму. invDoc - нормально создан, getSumm возвращает реальную сумму. А вот getXml должен генерировать Document, но там похоже null:

Код:
EXCEPTIONS:
null
null : at Line: 30 : in file: добавить цены : invXml .getElementsByTagName ( "pos" )

И так с любыми манипуляциям над invXml.

Автор:  Cromeshnic [ 01 июн 2011, 10:58 ]
Заголовок сообщения:  Re: Получить XML в скрипте

Попробуйте так:

Код:
Document doc = XMLUtils.parseDocument(new ByteArrayInputStream(invMan.getXMLData(25)));

Автор:  Феанор [ 01 июн 2011, 11:28 ]
Заголовок сообщения:  Re: Получить XML в скрипте

Cromeshnic писал(а):
Попробуйте так:

Код:
Document doc = XMLUtils.parseDocument(new ByteArrayInputStream(invMan.getXMLData(25)));


Спасибо, получилось. Только вот почему он сразу к обозначенному типу не привелся методом класса BillDoc?

Автор:  Cromeshnic [ 01 июн 2011, 12:14 ]
Заголовок сообщения:  Re: Получить XML в скрипте

Ну он просто не выгребается из базы в методе getInvoice(int id) - это накладно.

Автор:  Феанор [ 01 июн 2011, 13:19 ]
Заголовок сообщения:  Re: Получить XML в скрипте

Тогда у меня возникает другой вопрос - а загружает ли он xml в БД методом setXml(Document xml) класса BillDoc? А то я поправил хмлку как мне надо, проверив через

Код:
ByteArrayOutputStream os = new ByteArrayOutputStream();
XMLUtils.serialize(doc , os, "utf-8");
print(os.toString());


Затем пытаюсь выполнить
Код:
   invDoc.setXml(doc); //invDoc=invoiceManager.getInvoice(int);

Но в базе ничего не меняется =(

Автор:  Cromeshnic [ 01 июн 2011, 13:31 ]
Заголовок сообщения:  Re: Получить XML в скрипте

омг, так и не должен загружать ни xml ни другие поля - надо через InvoiceManager сохранять.

Автор:  Феанор [ 01 июн 2011, 13:43 ]
Заголовок сообщения:  Re: Получить XML в скрипте

Cromeshnic писал(а):
омг, так и не должен загружать ни xml ни другие поля - надо через InvoiceManager сохранять.

Ну дело в том, что я и через InvoiceManager тоже пробовал. addBillDocs тоже ничего по факту не меняет и новых СФ не создает =/. Я как рассуждал когда не получилось- addBillDocs на то и add чтобы добавлять в пустой инвойс, если там ничего нет, то добавит, если есть - нет. setXml у инвойса прямо указывает - ставь это =)
не пробовал правда еще public final void updatePositions(int id, org.w3c.dom.Element positions), но тут я не пойму какой элемент ему передавать. data?

ps вообще можно через sql апдейт запрос сделать, но это как то неправильно я думаю. может кто подскажет как обновленную хмлку засунуть в инвойс, а то я уже туплю жестко похоже =(((

Автор:  Феанор [ 03 июн 2011, 11:22 ]
Заголовок сообщения:  Re: Получить XML в скрипте

up??? на свежую голову лучше не стало, апи по модулю билл очень плохо описано, комментариев практически нигде нет =(

Автор:  Cromeshnic [ 03 июн 2011, 11:37 ]
Заголовок сообщения:  Re: Получить XML в скрипте

Порылся - обновить нельзя, но addBillDocs должна добавить новую сф.

Автор:  Феанор [ 03 июн 2011, 12:28 ]
Заголовок сообщения:  Re: Получить XML в скрипте

Cromeshnic писал(а):
Порылся - обновить нельзя, но addBillDocs должна добавить новую сф.

Как вариант использовать апдейт позишн, но что-то слишком много гемора. Я прихожу к выводу что проще похоже генерировать счет фактуры через ваш скрипт и на этапе создания элемента добавлять уже нужные аттрибуты =/

Автор:  Cromeshnic [ 03 июн 2011, 12:35 ]
Заголовок сообщения:  Re: Получить XML в скрипте

Изображение
Я уже тоже прихожу к такому выводу.

А что именно за атрибуты вы хотите добавить?

Автор:  restart [ 03 июн 2011, 13:11 ]
Заголовок сообщения:  Re: Получить XML в скрипте

Cromeshnic писал(а):
Я уже тоже прихожу к такому выводу.

:facepalm:
Надо бы взяться хорошенько за API бухглатерии, чтобы было удобно создавать счета безо всякой возьни с XML...

Автор:  Феанор [ 03 июн 2011, 13:51 ]
Заголовок сообщения:  Re: Получить XML в скрипте

Cromeshnic писал(а):
Изображение
Я уже тоже прихожу к такому выводу.

А что именно за атрибуты вы хотите добавить?

Цену услуги, чтобы не извращаться с математикой или sql запросами в xslt шаблонах.
В конфиге для простых позиций (одна услуга) у которых может период и количество меняться добавил
invoice.pos.X.param.1=sid:код_услуги
далее в скрипте пробегался по xml, смотрел у какого нода есть эта услуга, далее смотрит тарифы договора (субдоговора) к которому относится данная позиция, в тарифе находим услугу и ее стоимость - добавляем аттрибут price, а в шаблоне ставим проверку - если есть аттрибут price - выводи его, если нет - дели стоимость на количество.

ps как говорил выше - услуги простые, т.е. с фиксированной АП месячной с подневным режимом списания. Просто допустим если есть услуга аренда ip, или аренда портов, то их количество может меняться.
pps а вообще правильно будет сделать несколько строк в СФ для каждого количества и писать так (например полмесяца 1 айпишник, полмесяца 2):
Код:
Название               ед-ца    кол-во    цена      стоимость
Аренда IP (2шт)       шт/мес     1          50           50 .............
Аренда IP (1шт)       шт/мес     0.50       50           50 ..............   

Но я этим позже буду заниматься, тут еще и количество надо будет считать по другому.


restart писал(а):
Надо бы взяться хорошенько за API бухглатерии, чтобы было удобно создавать счета безо всякой возьни с XML...

+1. Бухгалтера они такие бухгалтера, что иногда требуют вещей оч.странных, и хоть убейся, но сделай как им надо. Отсюда и все танцы с бубнами =)

Автор:  skyb [ 03 июн 2011, 15:01 ]
Заголовок сообщения:  Re: Получить XML в скрипте

restart писал(а):
Cromeshnic писал(а):
Я уже тоже прихожу к такому выводу.

:facepalm:
Надо бы взяться хорошенько за API бухглатерии, чтобы было удобно создавать счета безо всякой возьни с XML...

Дадада...давно пора

Автор:  Cromeshnic [ 06 июн 2011, 08:28 ]
Заголовок сообщения:  Re: Получить XML в скрипте

Феанор писал(а):
Цену услуги, чтобы не извращаться с математикой или sql запросами в xslt шаблонах.
В конфиге для простых позиций (одна услуга) у которых может период и количество меняться добавил
invoice.pos.X.param.1=sid:код_услуги
далее в скрипте пробегался по xml, смотрел у какого нода есть эта услуга, далее смотрит тарифы договора (субдоговора) к которому относится данная позиция, в тарифе находим услугу и ее стоимость - добавляем аттрибут price, а в шаблоне ставим проверку - если есть аттрибут price - выводи его, если нет - дели стоимость на количество.


Омг, респект.
У нас цена определяется делением суммы на количество, но это не сработает в случае смены тарифа в середине месяца. Пока бухгалтерия не жалуется, но однажды во тьме Мории гномы пробудили Барлога они могут озадачиться и придётся вот так же извращаться.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/