как получить товар по мастер-идентификатору

#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