0

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

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

我试过了:

  • 使用已将“创建税收行为”设置为“将提供税收”的 CreateSalesInvoice 策略
  • 已尝试使用“使用标题级别税收行为”和“创建税收行为”的所有 4 种模式覆盖策略。
  • 在销售订单上提供税款总额
  • 提供税金作为销售订单的税金明细
  • 为行项目提供的税款总额
  • 提供税金作为销售订单的税金明细
  • 在订单上设置 TaxScheduleKey
  • 在行项目上设置 TaxScheduleKey

税收在 GP 中被忽略了,这真令人气愤……有什么想法吗?我确实可以访问 Dynamics 数据库,但如果可能的话,我真的不想走那条路。

我的研究让我相信这是被破坏的(关于这个主题的每个线程都没有答案)并且微软不会修复它,但这确实对自动化造成了可怕的伤害。

4

1 回答 1

1

今天碰到这个问题。一点背景:

在尝试了上述所有内容,修改策略 - 特别是销售文档 - 创建销售文档策略,并且对没有创建销售订单允许指定税款的策略感到沮丧之后,我遇到了这篇 MSDN 文章,介绍了 GP 服务如何设计或扩展: https ://msdn.microsoft.com/en-us/library/dd996499.aspx

对走那么远不感兴趣,我发现 - “Program Files\Microsoft Dynamics\GPWebServices\XSLT”,特别是“Microsoft.Dynamics.GP.SalesOrderCreate.xslt”文件。

由于它与 GreatPlains 一起安装,因此根本没有任何转换来利用税收数据(鉴于已经尝试过,这并不奇怪)。USINGHEADERLEVELTAXES 设置为 0。

将“Microsoft.Dynamics.GP.SalesInvoiceCreate.xslt”文件中的税行组合到 SalesOrderCreate.xslt 文件中,您可以修改发送到 eConnect for SalesOrderCreate 的 XML 以正确创建税。

下面的示例使用/已针对标题级别的税收行为进行了测试。

<?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>
于 2017-01-25T09:21:19.070 回答