With the flow control "Set the quantity shipped value to zero when converting the sales order to sales invoice" set to True (Documents > Misc > Others > Others1), when trying to convert a sales order to an invoice via the API the non-inventoried items (mainly 'SH' for shipping) are set to zero.
Including the additional argument
sLineSequenceXML with ConvertLineItems XML, has no effect on this issue. There appears to be no way via the API to set the quantities of the non-inventoried items on an invoice.
There is a limitation from SDK: while "Set the quantity shipped value to zero when converting the sales order to sales invoice" is set to True, you can't submit non-inventory items with shipped quantity.
Option 1: All invoicing is handled through the API
If all invoicing is handled through the API, you can update the "Set the quantity shipped value to zero when converting the sales order to sales invoice" flag
false from the database while converting SO to SI from SDK and set back to
true after completing the transaction, while passing the sequence to be converted through the
Set the flow control flag to False:
WHERE "DIV_CODE"='<Div_Code>' AND "INVDEFQTYZ"='T'
Pass the sequence
This will convert only the second and fourth line item.
Set the flow control flag to True:
WHERE "DIV_CODE"='<Div_Code>' AND "INVDEFQTYZ"='F'
Option 2: Users are performing manual invoicing in addition to automated processes
If you have users performing manual invoicing, then the flow control switch affects their actions too. If the quantities are automatically set, then when the user presses F4 to invoice the order, the committed quantities are used for items that are committed, but items that are not committed are automatically set to the ordered quantity even though the committed quantity is zero. This causes problems because the user ends up invoicing the wrong quantities.
In this situation, you can create an inventory item (without maintaining price) instead of using a non-inventory item. That way you can convert the sale order to an invoice from the SDK with quantity.