0

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

阅读销售发票示例在这里

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

4

1 回答 1

1

您需要获取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()

于 2014-05-01T19:32:20.487 回答