简体   繁体   English

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

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

From Web Service of Microsoft Dynamics GP 2013 Creating Sales Invoice by following code: 从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();               
        }
    }

Creating Sales Invoice Example is here 创建销售发票示例在这里

Reading Sales Invoice by following code: 通过以下代码读取销售发票:

    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();
        }
    }

Reading Sales Invoice Example is here 阅读销售发票示例在这里

Question is: How to get Line Items of particular invoice? 问题是: 如何获取特定发票的行项目?

You need to get the actual SalesInvoice object, which contains the associated line items. 您需要获取实际的SalesInvoice对象,其中包含关联的订单项。 You can do this using GetSalesInvoiceByKey() passing in the order number (SOPNUMBE) of the invoice. 您可以使用GetSalesInvoiceByKey()传递发票的订单号(SOPNUMBE)来执行此操作。

Extending your second example: 扩展第二个示例:

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;
}

However, there's no requirement to call GetSalesInvoiceList() first -- you can call GetSalesInvoiceByKey() directly if you know the order number. 但是,不需要先调用GetSalesInvoiceList() -如果您知道订单号,则可以直接调用GetSalesInvoiceByKey()

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

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