【问题标题】:create netsuite invoice using web service使用 Web 服务创建 netsuite 发票
【发布时间】:2015-09-20 15:11:01
【问题描述】:

我正在尝试使用 Web 服务 C# 创建 Netsuite 发票:

Invoice nsInvoice = new Invoice();
        //trainid
        nsInvoice.tranId = invoice.Code;
        //createdDate
        nsInvoice.tranDate = invoice.Date;
        nsInvoice.tranDateSpecified = true;
        //createdFrom
        //nsVendorBill.entity = NSPurchaseOrder.getRef(nsPurchaseOrder.internalId);
        nsInvoice.entity = NSVendor.getRef(nsSaleOrder2.entity.internalId);

从销售订单行复制所有行:

var invoiceItems = new List<InvoiceItem>();
            //copy from purchase order
            foreach (SalesOrderItem poitem in nsSaleOrder.itemList.item)
            {
                var invoiceItem = new InvoiceItem();
                invoiceItem.item = poitem.item;
                invoiceItem.orderLine = poitem.line;
                invoiceItem.orderLineSpecified = true;
                invoiceItem.isTaxable = false;
                invoiceItem.isTaxableSpecified = true;
                invoiceItem.quantity = 0;
                invoiceItem.quantitySpecified = true;
                invoiceItem.tax1Amt = 0;
                invoiceItem.tax1AmtSpecified = true;

                invoiceItems.Add(invoiceItem);
            }

并检查要添加到发票的哪一行(数量>0):

//update quantity
                foreach (var invoiceItem in invoiceItems)
                {
                    if (invoiceItem.item.internalId == itemID)
                    {
                        invoiceItem.isTaxable = true;
                        invoiceItem.quantity = line.Quantity;
                        invoiceItem.tax1Amt = line.Tax;
                        //custom pricelevel
                        RecordRef plRef = new RecordRef();
                        plRef.type = RecordType.priceLevel;
                        plRef.typeSpecified = true;
                        plRef.internalId = "-1";
                        invoiceItem.price = plRef;
                        invoiceItem.rate = "" + line.UnitPrice;
                    }
                }

但是即使数量为零的所有行都列在发票中。

有没有办法取消选中零数量的行?

【问题讨论】:

  • 这个line 变量来自哪里?
  • 对不起。行是我的数据。

标签: c# netsuite


【解决方案1】:

已解决。无需从销售订单中复制所有行。只需将数量 >0 的行添加到发票中。

//itemlist
        {
            var invoiceItems = new List<InvoiceItem>();
            //override
            foreach (var line in invoice.SaleInvoiceLines)
            {
                //soline
                var soitem = (from t in nsSaleOrder.itemList.item
                              where t.item.internalId == line.PurchaseOrderLine.ProductSupplier.Product.NSInternalID
                              && t.poVendor.internalId == line.PurchaseOrderLine.ProductSupplier.Supplier.NSInternalID
                              select t).FirstOrDefault();
                if (soitem != null)
                {

                    //invoice item
                    var invoiceItem = new InvoiceItem();
                    invoiceItem.item = soitem.item;
                    invoiceItem.orderLine = soitem.line;
                    invoiceItem.orderLineSpecified = true;
                    invoiceItem.isTaxable = true;
                    invoiceItem.isTaxableSpecified = true;
                    invoiceItem.quantity = line.Quantity;
                    invoiceItem.quantitySpecified = true;
                    invoiceItem.tax1Amt = line.Tax;
                    invoiceItem.tax1AmtSpecified = true;
                    //price
                    RecordRef plRef = new RecordRef();
                    plRef.type = RecordType.priceLevel;
                    plRef.typeSpecified = true;
                    plRef.internalId = "-1";
                    invoiceItem.price = plRef;
                    invoiceItem.rate = "" + line.UnitPrice;

                    invoiceItems.Add(invoiceItem);
                }
                else
                {
                    throw new Exception(string.Format("Product [{0}] from Supplier [{1}] is missing",
                        line.PurchaseOrderLine.ProductSupplier.Product.Code,
                        line.PurchaseOrderLine.ProductSupplier.Supplier.Code));
                }
            }
            var itemReceiptItemList = new InvoiceItemList();
            itemReceiptItemList.item = invoiceItems.Where(t=>t.quantity>0).ToArray();
            itemReceiptItemList.replaceAll = true;
            nsInvoice.itemList = itemReceiptItemList;
        }

【讨论】:

  • 现在我想起来了,你不能把if (line.Quantity == 0) continue;放在foreach循环的开头吗?
  • 大家好,感谢分享一些有用的信息,有什么办法可以绕过信用额度创建发票。
猜你喜欢
  • 2018-08-01
  • 2022-10-19
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多