繁体   English   中英

动态GP:读取销售发票的行项目

[英]Dynamic GP: Read Line Items of Sales Invoice

从Microsoft Dynamics GP 2013的Web服务通过以下代码创建销售发票:

    private void CreateInvoice()
    {
        CompanyKey companyKey;
        Context context;
        SalesInvoice salesInvoice;
        SalesDocumentTypeKey salesInvoiceType;
        CustomerKey customerKey;
        BatchKey batchKey;
        SalesInvoiceLine salesInvoiceLine;
        ItemKey invoiceItem;
        Quantity invoiceCount;
        Policy salesInvoiceCreatePolicy;
        MoneyAmount unitPrice;

        DynamicsGPClient wsDynamicsGP = new DynamicsGPClient();
        context = new Context();
        companyKey = new CompanyKey();
        companyKey.Id = (-1);
        context.OrganizationKey = (OrganizationKey)companyKey;
        salesInvoice = new SalesInvoice();
        salesInvoice.Key = new SalesDocumentKey();
        salesInvoice.Key.Id = "XX555";
        salesInvoiceType = new SalesDocumentTypeKey();
        salesInvoiceType.Type = SalesDocumentType.Invoice;
        salesInvoice.DocumentTypeKey = salesInvoiceType;
        customerKey = new CustomerKey();
        customerKey.Id = "ADAMPARK0001";// "AARONFIT0001";
        salesInvoice.CustomerKey = customerKey;
        batchKey = new BatchKey();
        batchKey.Id = "SALES INVOICES";
        salesInvoice.BatchKey = batchKey;

        IList<SalesInvoiceLine> salesInvoiceLines = new List<SalesInvoiceLine>();
        string[] itemId = { "ACCS-HDS-1EAR", "32X IDE" };    //"ACCS-RST-DXBK";// "512 SDRAM";//              
        for (int i = 0; i < itemId.Count(); i++)
        {
            salesInvoiceLine = new SalesInvoiceLine();
            invoiceItem = new ItemKey();
            invoiceItem.Id = itemId[i];
            salesInvoiceLine.ItemKey = invoiceItem;
            unitPrice = new MoneyAmount();
            unitPrice.Currency = "USD";
            unitPrice.DecimalDigits = 2;
            unitPrice.Value = 1.00M;
            salesInvoiceLine.UnitPrice = unitPrice;
            invoiceCount = new Quantity();
            invoiceCount.Value = 1 + i;
            salesInvoiceLine.Quantity = invoiceCount;
            salesInvoiceLines.Add(salesInvoiceLine);
        }            
        SalesInvoiceLine[] invoiceLines = salesInvoiceLines.ToArray();
        salesInvoice.Lines = invoiceLines;
        salesInvoiceCreatePolicy = wsDynamicsGP.GetPolicyByOperation("CreateSalesInvoice", context);
        wsDynamicsGP.CreateSalesInvoice(salesInvoice, context, salesInvoiceCreatePolicy);
        if (wsDynamicsGP.State != CommunicationState.Faulted)
        {
            wsDynamicsGP.Close();               
        }
    }

创建销售发票示例在这里

通过以下代码读取销售发票:

    private void ShowInvoice()
    {

        CompanyKey companyKey;
        Context context;
        LikeRestrictionOfstring salespersonIdRestriction;
        ListRestrictionOfNullableOfSalesTransactionState transactionStateRestriction;
        SalesInvoiceCriteria salesInvoiceCriteria;
        SalesInvoiceSummary[] salesInvoiceSummary;
        BetweenRestrictionOfNullableOfdateTime restriction;

        DynamicsGPClient wsDynamicsGP = new DynamicsGPClient();
        context = new Context();
        companyKey = new CompanyKey();
        companyKey.Id = (-1);
        context.OrganizationKey = (OrganizationKey)companyKey;
        salespersonIdRestriction = new LikeRestrictionOfstring();
        transactionStateRestriction = new ListRestrictionOfNullableOfSalesTransactionState();
        transactionStateRestriction.EqualValue = SalesTransactionState.Work;
        salesInvoiceCriteria = new SalesInvoiceCriteria();
        salesInvoiceCriteria.TransactionState = transactionStateRestriction;
        salesInvoiceCriteria.SalespersonId = salespersonIdRestriction;
        salesInvoiceSummary = wsDynamicsGP.GetSalesInvoiceList(salesInvoiceCriteria, context);

        StringBuilder summaryList = new StringBuilder();           
        foreach (SalesInvoiceSummary a in salesInvoiceSummary)
        {
           summaryList.AppendLine("<b>Invoice number:</b> " + a.Key.Id + "  <b>Invoice amount:</b> " + a.TotalAmount.Value.ToString("C"));
        }
        if (wsDynamicsGP.State != CommunicationState.Faulted)
        {
            wsDynamicsGP.Close();
        }
    }

阅读销售发票示例在这里

问题是: 如何获取特定发票的行项目?

您需要获取实际的SalesInvoice对象,其中包含关联的订单项。 您可以使用GetSalesInvoiceByKey()传递发票的订单号(SOPNUMBE)来执行此操作。

扩展第二个示例:

foreach (SalesInvoiceSummary a in salesInvoiceSummary)
{
    summaryList.AppendLine("<b>Invoice number:</b> " + a.Key.Id + "  <b>Invoice amount:</b> " + a.TotalAmount.Value.ToString("C"));

    SalesInvoice invoice = wsDynamicsGP.GetSalesInvoiceByKey(a.Key.Id, context);
    SalesInvoiceLine[] lineItems = invoice.Lines;
}

但是,不需要先调用GetSalesInvoiceList() -如果您知道订单号,则可以直接调用GetSalesInvoiceByKey()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM