Tally不从XML导入数据

时间:2016-04-13 10:00:54

标签: java xml swing javafx-2

我正在开发计数应用程序。现在我希望与Tally集成。 如果我将数据导入Tally,我会收到这样的错误。

Importing Data from 'New.xml' on 13-Apr-2016 at 14:11:51

Importing Data to company: 'Technologies Pvt Ltd'

ERROR: Voucher: ID:<REMOTEID:face3a8f-f920-4781-a14b-ed095d0b0145-00000006>,       Voucher Type: Payment, Source Voucher Number: 203, Voucher Number: , Date: 

Import Summary
Created : 0
Altered : 0
Deleted : 0
Combined: 0
Ignored : 0
Errors  : 1
----------------------------------------------

这是我的XML文件。

<ENVELOPE>
<HEADER>
<TALLYREQUEST>Import Data</TALLYREQUEST>
</HEADER>
<BODY>
<IMPORTDATA>
<REQUESTDESC>
<REPORTNAME>Vouchers</REPORTNAME>
<STATICVARIABLES>
<SVCURRENTCOMPANY>Technologies Pvt Ltd</SVCURRENTCOMPANY>
</STATICVARIABLES>
</REQUESTDESC>
<REQUESTDATA>
<TALLYMESSAGE xmlns:UDF="TallyUDF">
<VOUCHER REMOTEID="face3a8f-f920-4781-a14b-ed095d0b0145-00000006" VCHKEY="face3a8f-f920-4781-a14b-ed095d0b0145-0000a748:000000061" VCHTYPE="Payment" ACTION="Create" OBJVIEW="Accounting Voucher View">
<OLDAUDITENTRYIDS.LIST TYPE="Number">
<OLDAUDITENTRYIDS>-1</OLDAUDITENTRYIDS>
</OLDAUDITENTRYIDS.LIST>
<DATE>20160413</DATE>
<GUID>face3a8f-f920-4781-a14b-ed095d0b0145-00000006</GUID>
<NARRATION>100</NARRATION>
<VOUCHERTYPENAME>Payment</VOUCHERTYPENAME>
<VOUCHERNUMBER>203</VOUCHERNUMBER>
<PARTYLEDGERNAME>Cash</PARTYLEDGERNAME>
<CSTFORMISSUETYPE/>
<CSTFORMRECVTYPE/>
<FBTPAYMENTTYPE>Default</FBTPAYMENTTYPE>
<PERSISTEDVIEW>Accounting Voucher View</PERSISTEDVIEW>
<VCHGSTCLASS/>
<DIFFACTUALQTY>No</DIFFACTUALQTY>
<ISMSTFROMSYNC>No</ISMSTFROMSYNC>
<ASORIGINAL>No</ASORIGINAL>
<AUDITED>No</AUDITED>
<FORJOBCOSTING>No</FORJOBCOSTING>
<ISOPTIONAL>No</ISOPTIONAL>
<EFFECTIVEDATE>20170331</EFFECTIVEDATE>
<USEFOREXCISE>No</USEFOREXCISE>
<ISFORJOBWORKIN>No</ISFORJOBWORKIN>
<ALLOWCONSUMPTION>No</ALLOWCONSUMPTION>
<USEFORINTEREST>No</USEFORINTEREST>
<USEFORGAINLOSS>No</USEFORGAINLOSS>
<USEFORGODOWNTRANSFER>No</USEFORGODOWNTRANSFER>
<USEFORCOMPOUND>No</USEFORCOMPOUND>
<USEFORSERVICETAX>No</USEFORSERVICETAX>
<ISEXCISEVOUCHER>No</ISEXCISEVOUCHER>
<EXCISETAXOVERRIDE>No</EXCISETAXOVERRIDE>
<USEFORTAXUNITTRANSFER>No</USEFORTAXUNITTRANSFER>
<EXCISEOPENING>No</EXCISEOPENING>
<USEFORFINALPRODUCTION>No</USEFORFINALPRODUCTION>
<ISTDSOVERRIDDEN>No</ISTDSOVERRIDDEN>
<ISTCSOVERRIDDEN>No</ISTCSOVERRIDDEN>
<ISTDSTCSCASHVCH>No</ISTDSTCSCASHVCH>
<INCLUDEADVPYMTVCH>No</INCLUDEADVPYMTVCH>
<ISSUBWORKSCONTRACT>No</ISSUBWORKSCONTRACT>
<ISVATOVERRIDDEN>No</ISVATOVERRIDDEN>
<IGNOREORIGVCHDATE>No</IGNOREORIGVCHDATE>
<ISSERVICETAXOVERRIDDEN>No</ISSERVICETAXOVERRIDDEN>
<ISISDVOUCHER>No</ISISDVOUCHER>
<ISEXCISEOVERRIDDEN>No</ISEXCISEOVERRIDDEN>
<ISEXCISESUPPLYVCH>No</ISEXCISESUPPLYVCH>
<ISVATPRINCIPALACCOUNT>No</ISVATPRINCIPALACCOUNT>
<ISSHIPPINGWITHINSTATE>No</ISSHIPPINGWITHINSTATE>
<ISCANCELLED>No</ISCANCELLED>
<HASCASHFLOW>Yes</HASCASHFLOW>
<ISPOSTDATED>No</ISPOSTDATED>
<USETRACKINGNUMBER>No</USETRACKINGNUMBER>
<ISINVOICE>No</ISINVOICE>
<MFGJOURNAL>No</MFGJOURNAL>
<HASDISCOUNTS>No</HASDISCOUNTS>
<ASPAYSLIP>No</ASPAYSLIP>
<ISCOSTCENTRE>No</ISCOSTCENTRE>
<ISSTXNONREALIZEDVCH>No</ISSTXNONREALIZEDVCH>
<ISEXCISEMANUFACTURERON>No</ISEXCISEMANUFACTURERON>
<ISBLANKCHEQUE>No</ISBLANKCHEQUE>
<ISVOID>No</ISVOID>
<ISONHOLD>No</ISONHOLD>
<ORDERLINESTATUS>No</ORDERLINESTATUS>
<VATISAGNSTCANCSALES>No</VATISAGNSTCANCSALES>
<VATISPURCEXEMPTED>No</VATISPURCEXEMPTED>
<ISVATRESTAXINVOICE>No</ISVATRESTAXINVOICE>
<ISDELETED>No</ISDELETED>
<CHANGEVCHMODE>No</CHANGEVCHMODE>
<ALTERID/>
<MASTERID/>
<VOUCHERKEY>183927679483912</VOUCHERKEY>
<EXCLUDEDTAXATIONS.LIST/>
<OLDAUDITENTRIES.LIST/>
<ACCOUNTAUDITENTRIES.LIST/>
<AUDITENTRIES.LIST/>
<DUTYHEADDETAILS.LIST/>
<SUPPLEMENTARYDUTYHEADDETAILS.LIST/>
<INVOICEDELNOTES.LIST/>
<INVOICEORDERLIST.LIST/>
<INVOICEINDENTLIST.LIST/>
<ATTENDANCEENTRIES.LIST/>
<ORIGINVOICEDETAILS.LIST/>
<INVOICEEXPORTLIST.LIST/>
<ALLLEDGERENTRIES.LIST>
<OLDAUDITENTRYIDS.LIST TYPE="Number">
<OLDAUDITENTRYIDS>-1</OLDAUDITENTRYIDS>
</OLDAUDITENTRYIDS.LIST>
<LEDGERNAME>WATER EXP</LEDGERNAME>
<GSTCLASS/>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<LEDGERFROMITEM>No</LEDGERFROMITEM>
<REMOVEZEROENTRIES>No</REMOVEZEROENTRIES>
<ISPARTYLEDGER>No</ISPARTYLEDGER>
<ISLASTDEEMEDPOSITIVE>Yes</ISLASTDEEMEDPOSITIVE>
<AMOUNT>-100.00</AMOUNT>
<SERVICETAXDETAILS.LIST/>
<BANKALLOCATIONS.LIST/>
<BILLALLOCATIONS.LIST/>
<INTERESTCOLLECTION.LIST/>
<OLDAUDITENTRIES.LIST/>
<ACCOUNTAUDITENTRIES.LIST/>
<AUDITENTRIES.LIST/>
<INPUTCRALLOCS.LIST/>
<DUTYHEADDETAILS.LIST/>
<EXCISEDUTYHEADDETAILS.LIST/>
<SUMMARYALLOCS.LIST/>
<STPYMTDETAILS.LIST/>
<EXCISEPAYMENTALLOCATIONS.LIST/>
<TAXBILLALLOCATIONS.LIST/>
<TAXOBJECTALLOCATIONS.LIST/>
<TDSEXPENSEALLOCATIONS.LIST/>
<VATSTATUTORYDETAILS.LIST/>
<COSTTRACKALLOCATIONS.LIST/>
<REFVOUCHERDETAILS.LIST/>
<INVOICEWISEDETAILS.LIST/>
<VATITCDETAILS.LIST/>
</ALLLEDGERENTRIES.LIST>
<ALLLEDGERENTRIES.LIST>
<OLDAUDITENTRYIDS.LIST TYPE="Number">
<OLDAUDITENTRYIDS>-1</OLDAUDITENTRYIDS>
</OLDAUDITENTRYIDS.LIST>
<LEDGERNAME>Cash</LEDGERNAME>
<GSTCLASS/>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<LEDGERFROMITEM>No</LEDGERFROMITEM>
<REMOVEZEROENTRIES>No</REMOVEZEROENTRIES>
<ISPARTYLEDGER>Yes</ISPARTYLEDGER>
<ISLASTDEEMEDPOSITIVE>No</ISLASTDEEMEDPOSITIVE>
<AMOUNT>100.00</AMOUNT>
<SERVICETAXDETAILS.LIST/>
<BANKALLOCATIONS.LIST>
<DATE>20170331</DATE>
<INSTRUMENTDATE>20170331</INSTRUMENTDATE>
<NAME>d29faa3c-2cb8-429e-9d50-cb4243b68a8d</NAME>
<TRANSACTIONTYPE>Cheque</TRANSACTIONTYPE>
<PAYMENTFAVOURING>Water Exp</PAYMENTFAVOURING>
<CHEQUECROSSCOMMENT>A/c Payee</CHEQUECROSSCOMMENT>
<UNIQUEREFERENCENUMBER>3CODSsNV01ippV7T</UNIQUEREFERENCENUMBER>
<STATUS>No</STATUS>
<PAYMENTMODE>Transacted</PAYMENTMODE>
<BANKPARTYNAME>Water Exp</BANKPARTYNAME>
<ISCONNECTEDPAYMENT>No</ISCONNECTEDPAYMENT>
<ISSPLIT>No</ISSPLIT>
<ISCONTRACTUSED>No</ISCONTRACTUSED>
<AMOUNT>1000.00</AMOUNT>
<CONTRACTDETAILS.LIST/>
</BANKALLOCATIONS.LIST>
<BILLALLOCATIONS.LIST/>
<INTERESTCOLLECTION.LIST/>
<OLDAUDITENTRIES.LIST/>
<ACCOUNTAUDITENTRIES.LIST/>
<AUDITENTRIES.LIST/>
<INPUTCRALLOCS.LIST/>
<DUTYHEADDETAILS.LIST/>
<EXCISEDUTYHEADDETAILS.LIST/>
<SUMMARYALLOCS.LIST/>
<STPYMTDETAILS.LIST/>
<EXCISEPAYMENTALLOCATIONS.LIST/>
<TAXBILLALLOCATIONS.LIST/>
<TAXOBJECTALLOCATIONS.LIST/>
<TDSEXPENSEALLOCATIONS.LIST/>
<VATSTATUTORYDETAILS.LIST/>
<COSTTRACKALLOCATIONS.LIST/>
<REFVOUCHERDETAILS.LIST/>
<INVOICEWISEDETAILS.LIST/>
<VATITCDETAILS.LIST/>
</ALLLEDGERENTRIES.LIST>
<PAYROLLMODEOFPAYMENT.LIST></PAYROLLMODEOFPAYMENT.LIST>
<ATTDRECORDS.LIST></ATTDRECORDS.LIST>
</VOUCHER>
</TALLYMESSAGE>
</REQUESTDATA>
</IMPORTDATA>
</BODY>
</ENVELOPE>

我的xml文件中是否有任何错误, 请帮我。网上没有足够的文件。

6 个答案:

答案 0 :(得分:1)

@shimbu shambu,我也遇到了同样的问题,并通过更改DATE标记中的日期值来解决它。此问题是由于传入xml的日期和计数中的当前日期的变化而发生的。如果您使用的是教育版本的计数,则无法更改计数中的日期。您必须在xml文件中更改它。

答案 1 :(得分:0)

尝试传递无效的XML数据,如下所示:<![CDATA[ {INVALID XML}]]>

答案 2 :(得分:0)

当我尝试执行您正在执行的相同任务时,我看到了这篇文章,希望与大家分享我为解决这个问题而做的事情,这可能会帮助您继续前进......

java代码如下所示

TallyRequest.java

package tallyrequest;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class TallyRequest {

    public String CreateRequest() {
        String TXML = null;

        TXML = "<ENVELOPE>"
                + "<HEADER><TALLYREQUEST>Import Data</TALLYREQUEST></HEADER>"
                + "<BODY>"
                + "<IMPORTDATA>"
                + "<REQUESTDESC><REPORTNAME>Vouchers</REPORTNAME><STATICVARIABLES><SVCURRENTCOMPANY>Crane</SVCURRENTCOMPANY></STATICVARIABLES></REQUESTDESC>"
                + "<REQUESTDATA>"
                + "<TALLYMESSAGE xmlns:UDF=\"TallyUDF\">"
                + "<VOUCHER REMOTEID=\"00000001\" VCHTYPE=\"Receipt\" ACTION=\"Create\" OBJVIEW=\"Accounting Voucher View\">"      
                + "<DATE>20160701</DATE>"
                + "<VOUCHERTYPENAME>Receipt</VOUCHERTYPENAME>"
                + "<VOUCHERNUMBER>3</VOUCHERNUMBER>"
                + "<PARTYLEDGERNAME>Cash</PARTYLEDGERNAME>"
                + "<PERSISTEDVIEW>Accounting Voucher View</PERSISTEDVIEW>"      
                + "<ALLLEDGERENTRIES.LIST>"
                + "<LEDGERNAME>Mahes</LEDGERNAME>"
                + "<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>"
                + "<AMOUNT>0</AMOUNT>"       
                + "</ALLLEDGERENTRIES.LIST>"
                + "<ALLLEDGERENTRIES.LIST>"      
                + "<LEDGERNAME>Cash</LEDGERNAME>"
                + "<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>"
                + "<AMOUNT>-150000.00</AMOUNT>"          
                + "</ALLLEDGERENTRIES.LIST>"    
                + "</VOUCHER>"
                + "</TALLYMESSAGE>"
                + "</REQUESTDATA>"
                + "</IMPORTDATA>"
                + "</BODY>"
                + "</ENVELOPE>";
        return TXML;
    }

    public void SendToTally() throws Exception {
        String Url = "http://127.0.0.1:9000/";

        String SOAPAction = "";

        String Voucher = this.CreateRequest();

        // Create the connection where we're going to send the file.
        URL url = new URL(Url);
        URLConnection connection = url.openConnection();
        HttpURLConnection httpConn = (HttpURLConnection) connection;

        ByteArrayInputStream bin = new ByteArrayInputStream(Voucher.getBytes());
        ByteArrayOutputStream bout = new ByteArrayOutputStream();

        // Copy the SOAP file to the open connection.

        copy(bin, bout);

        byte[] b = bout.toByteArray();

        // Set the appropriate HTTP parameters.
        httpConn.setRequestProperty("Content-Length", String.valueOf(b.length));
        httpConn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
        httpConn.setRequestProperty("SOAPAction", SOAPAction);
        httpConn.setRequestMethod("POST");
        httpConn.setDoOutput(true);
        httpConn.setDoInput(true);

        // Everything's set up; send the XML that was read in to b.
        OutputStream out = httpConn.getOutputStream();
        out.write(b);
        out.close();

        // Read the response and write it to standard out.

        InputStreamReader isr = new InputStreamReader(httpConn.getInputStream());
        BufferedReader in = new BufferedReader(isr);

        String inputLine;

        while ((inputLine = in.readLine()) != null) {
            System.out.println(inputLine);
        }

        in.close();
    }

    public static void copy(InputStream in, OutputStream out)
            throws IOException {

        // do not allow other threads to read from the
        // input or write to the output while copying is
        // taking place

        synchronized (in) {
            synchronized (out) {

                byte[] buffer = new byte[256];
                while (true) {
                    int bytesRead = in.read(buffer);
                    if (bytesRead == -1) {
                        break;
                    }
                    out.write(buffer, 0, bytesRead);
                }
            }
        }
    }

    public static void main(String[] args) throws Exception {
        TallyRequest r = new TallyRequest();
        r.SendToTally();
    }
}

这里将xml输出发送为

XML消息,如下所示

<ENVELOPE>
    <HEADER>
        <TALLYREQUEST>Import Data</TALLYREQUEST>
    </HEADER>
        <BODY>
        <IMPORTDATA>
            <REQUESTDESC>
                <REPORTNAME>Vouchers</REPORTNAME>
                <STATICVARIABLES>
                    <SVCURRENTCOMPANY>Crane</SVCURRENTCOMPANY>
                </STATICVARIABLES>
            </REQUESTDESC>
            <REQUESTDATA>
                <TALLYMESSAGE xmlns:UDF="TallyUDF">
                    <VOUCHER REMOTEID="00000001" VCHTYPE="Receipt" ACTION="Create" OBJVIEW="Accounting Voucher View">
                        <DATE>20160701</DATE>
                        <VOUCHERTYPENAME>Receipt</VOUCHERTYPENAME>
                        <VOUCHERNUMBER>3</VOUCHERNUMBER>
                        <PARTYLEDGERNAME>Cash</PARTYLEDGERNAME>
                        <PERSISTEDVIEW>Accounting Voucher View</PERSISTEDVIEW>
                        <ALLLEDGERENTRIES.LIST>
                            <LEDGERNAME>Mahes</LEDGERNAME>
                            <ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
                            <AMOUNT>0</AMOUNT>
                        </ALLLEDGERENTRIES.LIST>
                        <ALLLEDGERENTRIES.LIST>
                            <LEDGERNAME>Cash</LEDGERNAME>
                            <ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
                            <AMOUNT>-150000.00</AMOUNT>
                        </ALLLEDGERENTRIES.LIST>
                    </VOUCHER>
                </TALLYMESSAGE>
            </REQUESTDATA>
        </IMPORTDATA>
    </BODY>
</ENVELOPE>

上面的代码将指示分类帐和从Java传递给tally的账单作为公司名称,当XML消息传递给tally时确保tally具有相同的参数,这些参数在必要时传递或修改,否则消息将无法通过,您将收到一个错误,可以在java控制台以及 Tally.ERP 根文件夹中的 tally.imp 文件中看到。有关您的计数器中的计数XML消息结构的疑问,只需获取Ledger的备份或任何其他您需要发送数据以获取格式的链接..或者引用对我来说发送正确格式的XML有用的链接

Full reference to Tally and Java integration based on SOAP

Architecture Reference

对于进一步的询问,请注意详细说明您的需求,以便我尽力帮助您!

答案 3 :(得分:0)

删除凭证标签中的远程ID和GUID标签中的ID。保留标签,看看是否在响应中创建了凭证。

答案 4 :(得分:0)

您可能正在使用教育版Tally。

Tally尚未处理无法在Tally中访问Date的XML错误响应-仅在教育版本中才可用,该版本只有第1月,第2月和月末可用。

尝试将日期更改为20160401(您也可以使用日期格式-年月,月初或日)。

答案 5 :(得分:-1)

此错误的唯一原因是编码数据。

只需在这2行中从反逗号中删除或删除数据-

<VOUCHER REMOTEID="face3a8f-f920-4781-a14b-ed095d0b0145-00000006" 
 VCHKEY="face3a8f-f920-4781-a14b-ed095d0b0145-0000a748:000000061"

并且在这一行中

<GUID>face3a8f-f920-4781-a14b-ed095d0b0145-00000006</GUID>

仅删除

  

“ face3a8f-f920-4781-a14b-ed095d0b0145-00000006”

并解决了问题。 :D