Dynamics GP的销售订单税

时间:2016-03-29 04:38:04

标签: dynamics-crm microsoft-dynamics dynamics-gp

在Microsoft Dynamics GP中,我需要将单个订单的税收设置为应税/非应税(不能在客户记录中完成)。

出于某种原因,无论我传递给Web服务的CreateSalesOrder调用,它都不会保存税务信息。

我试过了:

  • 使用具有"创建税收行为"的CreateSalesInvoice政策;设置为"将提供税收"
  • 使用"使用标题级别税收行为"覆盖政策?和"创建税收行为"已经尝试了所有4种模式。
  • 在销售订单上提供税金总额
  • 提供税作为销售订单的税务明细
  • 在订单项
  • 上提供税金总额
  • 提供税作为销售订单的税务明细
  • 在订单
  • 上设置TaxScheduleKey
  • 在订单项
  • 上设置TaxScheduleKey

税收在GP中被淘汰,令人愤怒...... 任何 想法?我确实可以访问Dynamics数据库,但如果可能的话,我真的不想去那条路。

我的研究让我相信这已经被打破了(关于这个问题的每个主题都没有答案),微软也没有解决这个问题,但这真的会让自动化变得很糟糕。

1 个答案:

答案 0 :(得分:1)

今天进入这个问题。一点背景:

在尝试上述所有内容后,修改政策 - 特别是销售凭证 - 创建销售凭证政策,并且由于没有创建销售订单的政策以允许指定税收而感到沮丧,我遇到了这篇MSDN文章,内容涉及如何可以设计或扩展GP服务:https://msdn.microsoft.com/en-us/library/dd996499.aspx

没有兴趣走得那么远,我找到了 - " Program Files \ Microsoft Dynamics \ GPWebServices \ XSLT",特别是" Microsoft.Dynamics.GP.SalesOrderCreate.xslt&#34 ;文件。

随着GreatPlains的安装,根本没有转换来使用传入的税收数据(考虑到已经尝试的内容,这并不奇怪)。 USINGHEADERLEVELTAXES设置为0。

合并来自" Microsoft.Dynamics.GP.SalesInvoiceCreate.xslt"的税行。将文件放入SalesOrderCreate.xslt文件中,您可以修改发送到eConnect for SalesOrderCreate的XML以正确创建Taxes。

以下示例使用/测试了标题级别的税收行为。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:mbs="http://schemas.microsoft.com/dynamics/2006/01"
    xmlns:gputil="urn:Microsoft.Dynamics.GP.TransformUtilities"
    version="1.0">

  <xsl:import href="Microsoft.Dynamics.GP.SalesCreateUpdateLibrary.xslt"/>
  <xsl:import href="Microsoft.Dynamics.GP.StandardLibrary.xslt"/>

  <xsl:variable name="CompanyId">
    <xsl:value-of select="/SalesOrder/mbs:Context/mbs:OrganizationKey/mbs:Id"/>
  </xsl:variable>

  <xsl:template match ="/">
    <eConnect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsl:apply-templates />
    </eConnect>
  </xsl:template>

  <xsl:template match="SalesOrder">
    <SOPTransactionType>
      <xsl:apply-templates select="Lines/SalesOrderLine/Serials/SalesLineSerial">
        <xsl:with-param name="UpdateIfExists">0</xsl:with-param>
      </xsl:apply-templates>
      <xsl:apply-templates select="Lines/SalesOrderLine/Components/SalesOrderComponent/Serials/SalesComponentSerial">
        <xsl:with-param name="UpdateIfExists">0</xsl:with-param>
      </xsl:apply-templates>
      <xsl:apply-templates select="Lines/SalesOrderLine/Lots/SalesLineLot">
        <xsl:with-param name="UpdateIfExists">0</xsl:with-param>
      </xsl:apply-templates>
      <xsl:apply-templates select="Lines/SalesOrderLine/Components/SalesOrderComponent/Lots/SalesComponentLot">
        <xsl:with-param name="UpdateIfExists">0</xsl:with-param>
      </xsl:apply-templates>
      <xsl:apply-templates select="Lines/SalesOrderLine" />
      <xsl:apply-templates select="Lines/SalesOrderLine/Components/SalesOrderComponent" />
      <xsl:apply-templates select="TrackingNumbers/SalesTrackingNumber" />
      <xsl:apply-templates select="Taxes/SalesDocumentTax" />
      <xsl:apply-templates select="Commissions/SalesCommission" />
      <xsl:apply-templates select="Payments/SalesPayment">
        <xsl:with-param name="UpdateIfExists">0</xsl:with-param>
      </xsl:apply-templates>
      <xsl:apply-templates select="UserDefined" />
      <xsl:apply-templates select="Lines/SalesOrderLine/Bins/SalesLineBin" />
      <xsl:apply-templates select="Lines/SalesOrderLine/Components/SalesOrderComponent/Bins/SalesComponentBin" />
      <xsl:call-template name="SalesHeader" />
      <xsl:apply-templates select="ProcessHolds/SalesProcessHold">
        <xsl:with-param name="UpdateIfExists">0</xsl:with-param>
      </xsl:apply-templates>
    </SOPTransactionType>
  </xsl:template>

  <xsl:template match="SalesOrderLine">
    <taSopLineIvcInsert>
      <xsl:call-template name="CreateUpdateLine">
        <xsl:with-param name="UpdateIfExists">0</xsl:with-param>
        <xsl:with-param name="CompanyId">
          <xsl:value-of select="$CompanyId" />
        </xsl:with-param>
      </xsl:call-template>
      <xsl:if test="QuantityToBackorder/Value != ''">
        <QTYTBAOR>
          <xsl:value-of select="QuantityToBackorder/Value" />
        </QTYTBAOR>
      </xsl:if>
      <xsl:if test="QuantityToInvoice/Value != ''">
        <QUANTITY>
          <xsl:value-of select="QuantityToInvoice/Value" />
        </QUANTITY>
      </xsl:if>
      <xsl:if test="QuantityCanceled/Value != ''">
        <QTYCANCE>
          <xsl:value-of select="QuantityCanceled/Value" />
        </QTYCANCE>
      </xsl:if>
      <xsl:if test="QuantityFulfilled/Value != ''">
        <QTYFULFI>
          <xsl:value-of select="QuantityFulfilled/Value" />
        </QTYFULFI>
      </xsl:if>
      <xsl:if test="TaxAmount/Value != ''">
        <TAXAMNT>
          <xsl:value-of select="TaxAmount/Value" />
        </TAXAMNT>
      </xsl:if>
      <RecreateDist>0</RecreateDist>
    </taSopLineIvcInsert>
  </xsl:template>
  <xsl:template match="SalesOrderComponent">
    <taSopLineIvcInsertComponent>
      <xsl:call-template name="CreateUpdateComponent">
        <xsl:with-param name="UpdateIfExists">0</xsl:with-param>
      </xsl:call-template>
      <xsl:if test="QuantityToBackorder/Value != ''">
        <QTYTBAOR>
          <xsl:value-of select="QuantityToBackorder/Value" />
        </QTYTBAOR>
      </xsl:if>
      <xsl:if test="QuantityToInvoice/Value != ''">
        <QUANTITY>
          <xsl:value-of select="QuantityToInvoice/Value" />
        </QUANTITY>
      </xsl:if>
      <xsl:if test="QuantityCanceled/Value != ''">
        <QTYCANCE>
          <xsl:value-of select="QuantityCanceled/Value" />
        </QTYCANCE>
      </xsl:if>
      <xsl:if test="QuantityFulfilled/Value != ''">
        <QTYFULFI>
          <xsl:value-of select="QuantityFulfilled/Value" />
        </QTYFULFI>
      </xsl:if>
    </taSopLineIvcInsertComponent>
  </xsl:template>
  <xsl:template name="SalesHeader">
    <taSopHdrIvcInsert>
      <xsl:call-template name="CreateUpdateDocument">
        <xsl:with-param name="UpdateIfExists">0</xsl:with-param>
        <xsl:with-param name="CompanyId">
          <xsl:value-of select="$CompanyId" />
        </xsl:with-param>
      </xsl:call-template>
      <xsl:if test="PaymentAmount/Value != ''">
        <PYMTRCVD>
          <xsl:value-of select="PaymentAmount/Value" />
        </PYMTRCVD>
      </xsl:if>
      <xsl:if test="TaxAmount/Value != ''">
        <TAXAMNT>
          <xsl:value-of select="TaxAmount/Value" />
        </TAXAMNT>
      </xsl:if>
      <USINGHEADERLEVELTAXES>1</USINGHEADERLEVELTAXES>
      <CREATEDIST>0</CREATEDIST>
      <CREATETAXES>0</CREATETAXES>
    </taSopHdrIvcInsert>
  </xsl:template>
</xsl:stylesheet>
相关问题