#xml #xml-parsing #odoo #connector #tally
Вопрос:
url1 = «http://localhost:9000» xmlBody = «1EXPORTCOLLECTIONStockItems» xmlBody = «$$имя_системы:XML» xmlBody = «Идентификатор владельца склада» req = запросы.сообщение(url = url1,данные=xmlBody.кодирование(‘utf-8’)) res = req.текст.полоса().заменить(«amp;»,»и») scrubbedXML = re.sub(‘amp;. [0-9] ;’, «, res) ответ на печать(scrubbedXML) = И т. Д. url-адрес строки(res)=’https://dev1.mo.vc’ db=’стажер5′ имя пользователя=’samiullah@xmedia.in’ пароль=’samiullah’ общий = xmlrpc.клиент.ServerProxy(‘{}/xmlrpc/2/common’.формат(url)) uid = общий.аутентификация(бд, имя пользователя, пароль, {}) модели = xmlrpc.клиент.ServerProxy(‘{}/xmlrpc/2/объект’.формат(url)) для dat в ответе.метод findAll(‘./Тело/данных/коллекцию/STOCKITEM’): namei=дат.вам(‘имя’) печати(namei) количество=дат.найти(‘MASTERID’).текст печати(число) печать(«имя:») печать(namei) полезная нагрузка=»»» 1 объектов экспорта продуктов «»» namei «»» мне нужно, чтобы вспомнить наличии товар на мастер-ID (поиск)
</HEADER>
<BODY>
<DESC>
<STATICVARIABLES>
<SVEXPORTFORMAT>$SysName:XML</SVEXPORTFORMAT>
</STATICVARIABLES>
<FETCHLIST>
<FETCH>OpeningValue</FETCH>
<FETCH>OpeningRate</FETCH>
<FETCH>OpeningBalance</FETCH>
<FETCH>ClosingBalance</FETCH>
<FETCH>ClosingRate</FETCH>
<FETCH>Parent</FETCH>
<FETCH>STANDARDPRICELIST.RATE</FETCH>
</FETCHLIST>
<TDL>
<TDLMESSAGE>
<OBJECT ID="stock item name" ISINITIALIZE="Yes">
</OBJECT>
</TDLMESSAGE>
</TDL>
</DESC>
</BODY>
</ENVELOPE>"""
request=requests.post(url = url1, data=payload.encode('utf-8'))
response = request.text.strip().replace("amp;amp;","and")
scrubbedXML = re.sub('amp;. [0-9] ;','' ,response)
# print(scrubbedXML)
try:
respRoot = Et.fromstring(scrubbedXML)
except:
pass
for data in respRoot.findall('./BODY/DATA/TALLYMESSAGE/STOCKITEM'):
try:
name=data.get('NAME')
# print(name)
except UnicodeEncodeError:
name='naa'
pass
try:
closing_ba= data.find('CLOSINGBALANCE').text
closing_bal=(re.findall(r'-?d .?d*', closing_ba))
for s in closing_bal:
closing_balance=float(s)
# print(closing_balance)
except:
closing_balance=0
pass
parent=data.find('PARENT').text
# print(parent)
try:
openbal=data.find('OPENINGBALANCE').text
open_bal=(re.findall(r'-?d .?d*', openbal))
for s_o in open_bal:
opening_balance=float(s_o)
# print(opening_balance)
except:
opening_balance=0
pass
try:
openrate=data.find('OPENINGRATE').text
open_rat=(re.findall(r'-?d .?d*', openrate))
for s_or in open_rat:
opening_rate=float(s_or)
Ответ №1:
Вы можете использовать приведенный ниже xml для получения товара по MasterID
<ENVELOPE>
<HEADER>
<VERSION>1</VERSION>
<TALLYREQUEST>Export</TALLYREQUEST>
<TYPE>Collection</TYPE>
<ID>CustColl</ID>
</HEADER>
<BODY>
<DESC>
<STATICVARIABLES>
<!-- * Static variables like scfrom,svto,svexport format will not work -->
</STATICVARIABLES>
<TDL>
<TDLMESSAGE>
<COLLECTION ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No" NAME="CustColl">
<TYPE>masters</TYPE>
<!-- * will fetch all fields if you want specific fields you can specify -->
<NATIVEMETHOD>*</NATIVEMETHOD>
<FILTERS>filter</FILTERS>
</COLLECTION>
<!-- You can change filter to other than name also -->
<!--to get any Master based on name replace $Masterid with $Name -->
<!--Replace 1122 with Masterid you want to search -->
<SYSTEM TYPE="Formulae" NAME="filter">$Masterid=1122</SYSTEM>
</TDLMESSAGE>
</TDL>
</DESC>
</BODY>
Вы можете получить все xml-файлы для связи с tally здесь
Я пытаюсь собрать все XML-записи в одном месте
Улучшение:
Если вы используете c#/VB
Вы можете использовать библиотеку TallyConnector
Используя API Tally Connector, вы можете получить StockItem в 4 строках кода
Using TallyConnector //Importing TallyConnector Library
Using TallyConnector.Models
public Tally Ctally = new Tally();
StockItem Item = await Ctally.GetStockItem(ItemName);
Если вы используете Python
Вы можете обратиться к этому руководству о том, как использовать библиотеку TallyConnector в python