Problema al Transferir con lotes DI API

Buenos Dias Expertos

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

End Function

En la sección Lines te falta agregar algo así:

                oTransRequest.Lines.ItemCode = TipoAuto
                oTransRequest.Lines.Quantity = 1
                oTransRequest.Lines.SerialNumbers.SetCurrentLine(0)
                oTransRequest.Lines.SerialNumbers.ManufacturerSerialNumber = PlacasAuto
                oTransRequest.Lines.SerialNumbers.Quantity = 1
                oTransRequest.Lines.Add()

en la propiedad Lines existe SerialNumbers

1 me gusta

OJO mi código esta para una solicitud de traslado, pero no cambia con la de un traslado.

coloque tu codigo pero me sigue saliendo lo mismo no comprendo podrias explicarme un poco mejor el tema de lotes porfavor

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.SerialNumbers.SetCurrentLine(0)
    sttrans.Lines.SerialNumbers.ManufacturerSerialNumber = 452
    sttrans.Lines.SerialNumbers.Quantity = 2
    sttrans.Lines.Add()

    sttrans.Comments = "PRUEBAS"
    sttrans.JournalMemo = "PROCESO PRUEBA"
    con = sttrans.Add()

FE DE ERRATAS.

El codigo que puse es para NUMEROS DE SERIE, pero ahi mismo busca la propiedad para lotes BATCH

1 me gusta

lo eh creado asi pero no hace nada no me arroja ningun error solo pasa hasta el final pero no genera ninguna trasnaccion

sttrans = oCompany.GetBusinessObject(BoObjectTypes.oStockTransfer)
        sttrans.DocDate = DateTime.Now
        sttrans.Lines.ItemCode = "2ICAN00012"
        sttrans.Lines.Quantity = 2
        sttrans.Lines.BatchNumbers.BatchNumber = "L2"
        sttrans.Lines.BatchNumbers.Quantity = 2

        sttrans.Lines.BinAllocations.BinActionType = BinActionTypeEnum.batFromWarehouse
        sttrans.Lines.BinAllocations.BaseLineNumber = 0
        sttrans.Lines.BinAllocations.BinAbsEntry = 452
        sttrans.Lines.BinAllocations.Quantity = 2
        sttrans.Lines.BinAllocations.Add()

        sttrans.Lines.BinAllocations.BinActionType = BinActionTypeEnum.batToWarehouse
        sttrans.Lines.BinAllocations.BaseLineNumber = 0
        sttrans.Lines.BinAllocations.BinAbsEntry = 452
        sttrans.Lines.BinAllocations.Quantity = 2
        sttrans.Lines.BinAllocations.Add()

        sttrans.Comments = "Transfer de prueba Sistemas"
        sttrans.Add()
  • You cannot allocate bin locations in document row 1

me sale este error al agregar de esa forma

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.

3 Me gusta

muchisimas gracias @l.villarreal con eso quedo solucionado te agradezco tu atencion saludos

1 me gusta