Member 14901284 Ответов: 2

В то время как я импортирую данные из C# в tally, он дает мне :- <ответ>неизвестный запрос, не может быть обработан</ответ>, Я не знаю, почему это происходит, пожалуйста, направьте меня


Пожалуйста, помогите мне, как решить эту проблему

Что я уже пробовал:

<pre> public static string SendRequest(string webRequeststr)
        {

            String rersponsestr = "";
            String result = "";

            String lTallyLocalHost = "http://localhost:9000";

            HttpWebRequest httprequest = (HttpWebRequest)WebRequest.Create(lTallyLocalHost);
            httprequest.Method = "POST";

            httprequest.ContentLength = (long)webRequeststr.Length;
            httprequest.ContentType = "application/x-www-form-urlencoded";
            StreamWriter stream = new StreamWriter(httprequest.GetRequestStream());
            stream.Write(webRequeststr);
            stream.Close();
            HttpWebResponse httpresponse = (HttpWebResponse)httprequest.GetResponse();
            Stream recivestream = httpresponse.GetResponseStream();
            StreamReader streamreader = new StreamReader(recivestream, Encoding.UTF8);
            rersponsestr = streamreader.ReadToEnd();
            httpresponse.Close();
            streamreader.Close();

            result = rersponsestr;
            return result;
        }


        private void ledgerCreateXML(RequestData req)
        {
            try
            {
                String XmlContent = "";
                XmlContent = XmlContent + "<ENVELOPE>\r\n";
                XmlContent = XmlContent + "<HEADER>\r\n";
                XmlContent = XmlContent + "<TALLYREQUEST>Import Data From CSM</TALLYREQUEST>\r\n";
                XmlContent = XmlContent + "</HEADER>\r\n";
                XmlContent = XmlContent + "<BODY>\r\n";
                XmlContent = XmlContent + "<IMPORTDATA>\r\n";
                XmlContent = XmlContent + "<REQUESTDESC>\r\n";
                XmlContent = XmlContent + "<REPORTNAME>All Masters</REPORTNAME>\r\n";
                XmlContent = XmlContent + "</REQUESTDESC>\r\n";
                XmlContent = XmlContent + "<REQUESTDATA>\r\n";
                XmlContent = XmlContent + "<TALLYMESSAGE xmlns:UDF="+"\""+"TallyUDF"+"\">\r\n";

                XmlContent = XmlContent + "<LEDGER NAME="+"\""+req.LedgerName+"\"Action="+"\""+"Create"+"\">\r\n";
                XmlContent = XmlContent + "<NAME>"+req.LedgerName+"</NAME>\r\n"; 
                XmlContent = XmlContent + "<PARENT>"+req.ParentName+"</PARENT>\r\n";
                XmlContent = XmlContent + "<OPENINGBALANCE>"+req.OpeningBalance+ "</OPENINGBALANCE>\r\n";
                XmlContent = XmlContent + "<ISBILLWISEON>Yes</ISBILLWISEON>\r\n";
                XmlContent = XmlContent + "</LEDGER>\r\n";
                XmlContent = XmlContent + "</TALLYMESSAGE>\r\n";
                XmlContent = XmlContent + "</REQUESTDATA>\r\n";
                XmlContent = XmlContent + "</IMPORTDATA>\r\n";
                XmlContent = XmlContent + "</BODY>\r\n";
                XmlContent = XmlContent + "</ENVELOPE>\r\n";

                String xmldata = XmlContent;
                String ledgerresponse = SendRequest(xmldata);



            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
        }

Richard MacCutchan

Проверьте сообщение на сервере, чтобы убедиться, что оно правильно сформировано. В частности, проверить запись TALLYMESSAGE.

Member 14901284

Эй, Ричард, спасибо за ответ, как я проверяю сообщение на сервере? я устанавливаю Tally ERP 9 и его odbc-сервер работает на 9000, и когда я ввожу localhost:9000, он показывает мне, что <response>Tally Erp server работает

Richard MacCutchan

Извините, понятия не имею. Я предлагаю вам ознакомиться с документацией.

2 Ответов

Рейтинг:
2

RickZeeland

Возможно, документация Tally API будет полезна:
Интеграция через XML-интерфейс[^]

http://mirror1.tallysolutions.com/Downloads/TDL%20Developer/Tally.ERP%209%20-%20интеграция%20Capabilities.pdf


Рейтинг:
0

Siddharth11041996

Шаг 1)Откройте приложение Tally проверьте, работает ли порт tally или нет. http://localhost:9000
Вы также можете изменить его.
Шаг 2) следуйте приведенному ниже коду для справки и замените свое значение my value(objdata).

String lResponseStr = "";
                   String xmlstc = "";
                   xmlstc = "<ENVELOPE>\r\n";
                   xmlstc = xmlstc + "<HEADER>\r\n";
                   xmlstc = xmlstc + "<TALLYREQUEST>Import Data</TALLYREQUEST>\r\n";
                   xmlstc = xmlstc + "</HEADER>\r\n";
                   xmlstc = xmlstc + "<BODY>\r\n";
                   xmlstc = xmlstc + "<IMPORTDATA>\r\n";
                   xmlstc = xmlstc + "<REQUESTDESC>\r\n";
                   xmlstc = xmlstc + "<REPORTNAME>All Masters</REPORTNAME>\r\n";
                   xmlstc = xmlstc + "<STATICVARIABLES><SVCURRENTCOMPANY>Pratik </SVCURRENTCOMPANY></STATICVARIABLES>\r\n";
                   xmlstc = xmlstc + "</REQUESTDESC>\r\n";
                   xmlstc = xmlstc + "<REQUESTDATA>\r\n";
                   xmlstc = xmlstc + "<TALLYMESSAGE xmlns:UDF=" + "\"" + "TallyUDF" + "\">\r\n";
                   xmlstc = xmlstc + "<LEDGER NAME=" + "\"" + objData.Rows[i]["title"] + objData.Rows[i]["partyname"] + "\" Action =" + "\"" + "Create" + "\">\r\n";
                   xmlstc = xmlstc + "<NAME>" + objData.Rows[i]["title"] + objData.Rows[i]["partyname"] + "</NAME>\r\n";
                   xmlstc = xmlstc + "<PARENT>Sundry Debtors</PARENT>\r\n";
                   xmlstc = xmlstc + "<ADDRESS.LIST><ADDRESS>" + objData.Rows[i]["vinstaddress"] + ",City :" + objData.Rows[i]["city"] + ",Route :" + objData.Rows[i]["route"] + "</ADDRESS></ADDRESS.LIST>\r\n";
                   xmlstc = xmlstc + "<EMAIL>" + objData.Rows[i]["vinstemail"] + "</EMAIL>\r\n";
                   xmlstc = xmlstc + "<LEDGERMOBILE>" + objData.Rows[i]["vinsttel1"] + "</LEDGERMOBILE>\r\n";
                   xmlstc = xmlstc + "<LEDGERPHONE>" + objData.Rows[i]["vbilltel1"] + "</LEDGERPHONE>\r\n";
                   xmlstc = xmlstc + "<PINCODE>" + objData.Rows[i]["vinstpostalcode"] + "</PINCODE>\r\n";
                   xmlstc = xmlstc + "<WEBSITE>" + objData.Rows[i]["vwebsite"] + "</WEBSITE>\r\n";
                   xmlstc = xmlstc + "<LEDGERFAX>" + objData.Rows[i]["vinstfax"] + "</LEDGERFAX>\r\n";
                   xmlstc = xmlstc + "<LEDGERCONTACT>" + objData.Rows[i]["contactperson"] + "</LEDGERCONTACT>\r\n";
                   xmlstc = xmlstc + "<COUNTRYNAME>India</COUNTRYNAME>\r\n";
                   xmlstc = xmlstc + "</LEDGER>\r\n";
                   xmlstc = xmlstc + "</TALLYMESSAGE>\r\n";
                   xmlstc = xmlstc + "</REQUESTDATA>\r\n";
                   xmlstc = xmlstc + "</IMPORTDATA>\r\n";
                   xmlstc = xmlstc + "</BODY>";
                   xmlstc = xmlstc + "</ENVELOPE>";
                   try
                   {
                       String lTallyLocalHost = "http://localhost:9000";
                       HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(lTallyLocalHost);
                       httpWebRequest.Method = "POST";
                       httpWebRequest.ContentLength = (long)xmlstc.Length;
                       httpWebRequest.ContentType = "application/x-www-form-urlencoded";
                       StreamWriter lStrmWritr = new StreamWriter(httpWebRequest.GetRequestStream());
                       lStrmWritr.Write(xmlstc);
                       lStrmWritr.Close();
                       HttpWebResponse lhttpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                       Stream lreceiveStream = lhttpResponse.GetResponseStream();
                       StreamReader lStreamReader = new StreamReader(lreceiveStream, Encoding.UTF8);
                       lResponseStr = lStreamReader.ReadToEnd();
                       lhttpResponse.Close();
                       lStreamReader.Close();
                   }


CHill60

Размещение вашей электронной почты на открытом форуме-это просто приглашение к спаму

Siddharth11041996

Пожалуйста, откройте свой счет и проверьте, открыта ли компания или закрыта. Пожалуйста, выберите компанию перед отправкой данных
приведенный выше код является ошибкой меньше,пожалуйста, обратитесь к приведенному выше коду и замените мое значение на ваше

CHill60

Я не оперативник. Я пытался остановить тебя от спама.

Richard Deeming

Использование конкатенации строк для построения XML-документа-крайне плохая идея. Если ваши данные содержат какие-либо "специальные" символы, вы получите искаженный документ.

.NET имеет по крайней мере два встроенных способа создания XML-документов, которые позволят избежать этой проблемы и почти наверняка будут иметь лучшую производительность, чем повторная конкатенация строк.

Siddharth11041996

Это самый простой способ построить xml-формат и передать его в tally.Перед вводом специального символа, пожалуйста, вставьте этот специальный символ в подсчет, а затем перейдите к c#.
Если tally accecpt это значение, то на стороне бэкенда c# нет никаких проблем.Чтобы передать специальный символ передайте его в двойную кавычку вот и все


Пожалуйста, обратитесь к приведенному выше коду и замените мое значение на ваше

Richard Deeming

Конечно НЕ "самый простой способ" построить XML-файл!

XElement envelope = new XElement("envelope",
    new XElement("tallyrequest", "Import Data"),
    new XElement("importdata",
        new XElement("requestdesc",
            new XElement("reportname", "All Masters"),
            new XElement("staticvariables",
                new XElement("svcurrentcompany", "Siddharth")
            ),
            new XElement("requestdata",
                new XElement("tallymessage",
                    new XAttribute(XNamespace.Xmlns + "udf", "tallyudf"),
                    new XElement("ledger",
                        new XAttribute("name", objdata.rows[i]["title"]),
                        new XAttribute("action", "create")
                    ),
                    ...
                )
            )
        )
    )
);
Гораздо проще, гораздо лучше производительность и никаких проблем с генерацией недопустимого XML.

CHill60

Виртуальный 5.

CHill60

Ричард тоже не ОП.

Siddharth11041996

у вас есть 2 ответа, как указано выше.Используй кого угодно , что тебе еще нужно
Вам нужно просто скопировать мой код вставить в свой Вот и все
замените Название вашей компании только в соответствии с именем tally.

CHill60

Какую часть фразы "Это не мой вопрос" вы не понимаете? Оригинальный плакат (OP) вопроса идет под ручкой "член 14901284" - моя ручка - "CHill60". Прочтите, от кого эти комментарии, прежде чем отвечать

Dave Kreskowiak

Это может быть самый простой способ для вас, но не для профессионалов. Ваш метод невероятно небезопасен и легко ломается при вводе данных, которые вы не принимаете во внимание.