Les comento mi problema tengo una app creada en VB que usa DI API el problema que tengo es cuando uso transferencia de productos de almacenes con lotes no puedo me sale el error Cannot add row without complete selection of batch/serial numbers eso se debe a que no pongo el almacen y no tengo idea de como solucionarlo si podrian apoyarme con su experiencia.
Por lo que veo estas trabajando con lotes, en un documento no puedes agregar lineas de detalle si no seleccionas el lote, esa parte creo te hace falta agregar a tu código.
si claro pero sabes el codigo que se usa para usar lotes porque el codigo que tengo es este te muestro
Public Function TransferenciaStockInventarioSAP(SoltraID As Integer)
oCompany = New SAPbobsCOM.Company()
ConexionSAP(GlobalVariables.UsuarioSAP, GlobalVariables.PasswordSAP)
Dim sttrans As SAPbobsCOM.StockTransfer
Dim con As Integer
sttrans = oCompany.GetBusinessObject(BoObjectTypes.oStockTransfer)
sttrans.DocDate = DateTime.Now
sttrans.FromWarehouse = "PRODTER1"
sttrans.ToWarehouse = "CALIMPA1"
sttrans.UserFields.Fields.Item("U_EXX_TIPOOPER").Value = "10"
sttrans.Lines.ItemCode = "2ICAN00012"
sttrans.Lines.Quantity = 2
sttrans.Lines.FromWarehouseCode = "PRODTER1"
sttrans.Lines.WarehouseCode = "CALIMPA1"
sttrans.Lines.Add()
sttrans.Comments = "PRUEBAS"
sttrans.JournalMemo = "PROCESO PRUEBA"
con = sttrans.Add()
If (con <> 0) Then
MessageBox.Show(oCompany.GetLastErrorDescription())
Return False
Else
MessageBox.Show("SE GENERO CORRECTAMENTE EL TRASLADO")
Return True
oCompany.Disconnect()
End If
Hola @grofox, estoy leyendo tu post y creo que no resolveré ninguna duda que tienes, al contrario deseo preguntarte por algo que estoy investigando, ¿Cómo desarrollar app para SBO? Tengo BD HANA. Gracias
Buen día @grofox cuando yo realizo transferencias utilizo el siguiente código:
if (oCompany == null || !oCompany.Connected)
this.ConectarCompany();
try
{
IStockTransfer oDocuments = oCompany.GetBusinessObject(BoObjectTypes.oStockTransfer);
oDocuments.Series = 5; //La que corresponda
oDocuments.FromWarehouse = "Almacen Origen";
oDocuments.ToWarehouse = "Almacen Destino";
foreach (DataRow dr in DataTable.Rows)
{
if (oDocuments.Lines.ItemCode != string.Empty)
oDocuments.Lines.Add();
oDocuments.Lines.SetCurrentLine(int.Parse(dr["NumLineaArticulo"].ToString()));
oDocuments.Lines.ItemCode = dr["Artículo"].ToString();
oDocuments.Lines.Quantity = double.Parse(dr["Total"].ToString());
oDocuments.Lines.UoMEntry = int.Parse(dr["UomEntry"].ToString());
if(int.Parse(dr["UomEntry"].ToString()) != -1)
oDocuments.Lines.UseBaseUnits = BoYesNoEnum.tNO;
else
oDocuments.Lines.UseBaseUnits = BoYesNoEnum.tYES;
if (oDocuments.Lines.BatchNumbers.BatchNumber != string.Empty)
oDocuments.Lines.BatchNumbers.Add();
oDocuments.Lines.BatchNumbers.SetCurrentLine(int.Parse(dr["NumLineaLote"].ToString()));
oDocuments.Lines.BatchNumbers.BatchNumber = dr["Lote"].ToString();
oDocuments.Lines.BatchNumbers.ManufacturerSerialNumber = dr["SysNumber"].ToString(); //Campo SysNumber de la tabla OBTN
oDocuments.Lines.BatchNumbers.Quantity = double.Parse(dr["Cantidad"].ToString());
}
OJO cabe destacar que en este ejemplo sólo utilizo LOTES, no se están considerando números de serie ni ubicaciones, si en tu caso las manejas, sólo sería cuestión de agregar esas líneas al código.
Esto está en C# pero creo que te puedes dar una idea. Espero que te sea de utilidad. Saludos cordiales.