Transferencia de stock con Ubicación DI API

Pues me parece que el lote es correcto, mira lo que tengo en la tabla.

Da el mismo error. Para descartar un problema con mi equipo probé en otra maquina pero obtengo el mismo error. Pudiera pensar que ya no es error en de “código”, ya que este error lo cacho en el “catch” y no en la validacion if (sttrans.Add() != 0), porque al mostrar oCompany.GetLastErrorCode() es 0. Por eso fue que decidí probar en otro equipo.

image

Buen día @thormex, cuando quiero realizar una transferencia a mi me solicita cuatro líneas:

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();
oDocuments.Lines.BatchNumbers.Quantity = double.Parse(dr["Cantidad"].ToString());

Has intentado agregar el SysNumber en los parámetros del lote?
No utilizas números de serie verdad?

Cuando colecto el mensaje de error lo hago así:

catch (Exception ex)
    error = "Error al crear transferencia: " + ex.Message;

Y recuerdo que en el mensaje detallaba un poco más donde estaba el problema, podrías intentar a ver si te cambia el error?

Espero que te sea de ayuda, saludos cordiales.

2 Me gusta

Hola Luis, no manejo número de serie. Si intente agregar el SysNumber pero el error sigue igual. También hago lo que tu en el catch. El Message en realidad me da una versión resumida del mismo error.
Gracias.

En ese caso lo último que te podría recomendar es que replicaras exactamente el ejemplo que intentas pero en el SAP, y luego obtuvieras el XML de ese documento para ver línea por línea lo que requieres declarar y qué tantos parámetros el DI API te solicita para hacer el movimiento correctamente.

Yo hice una breve función que lo genera, por si te es de utilidad, sólo debes conectarte al objeto oCompany y pasarle el DocEntry al método:

        private void SaveAsXML(int DocEntry)
        {
            if (oCompany == null || !oCompany.Connected)
                this.ConectarCompany();

            Documents xml = oCompany.GetBusinessObject(BoObjectTypes.oQuotations);

            xml.GetByKey(DocEntry);
            xml.SaveXML(@"C:\xml\xml_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xml");
        }

Nadamas se requiere que cambies el tipo de documento a StockTransfer, y personalizar la ruta del archivo.
Espero que puedas resolverlo. Saludos cordiales.

4 Me gusta

Buenos días

Excelente idea @l.villarreal, con esto se cerciora que no falta dato alguno tanto a nivel encabezado como a nivel linea.

Saludos

1 me gusta

Gracias por la sugerencia Luis, ya he generado el XML de una transferencia y estoy analizando que pudiera faltar. Espero con esto poder solucionarlo y regresas con el código final.
Saludos.

1 me gusta

Hola, finalmente logre hacerlo. Me pasaron un código de ejemplo y en resumen tenía los mismos campos, pero creo que la diferencia fue algo que había mencionado @alexnavarrova SerialAndBatchNumbersBaseLine. Es extraño porque ya lo había probado, pero entre tantas cosas que estuve probando posiblemente lo probé con alguna otra linea que no debería ir. Gracias a todos fueron de gran ayuda. Dejo aquí el código básico para hacer una transferencia de stock entre ubicaciones como a mi me funcionó.
Saludos.

            StockTransfer sttrans = oCompany.GetBusinessObject(BoObjectTypes.oStockTransfer);

            sttrans.DocDate = DateTime.Now;
            sttrans.FromWarehouse = "001";
            sttrans.ToWarehouse = "001";
            
            sttrans.Lines.ItemCode = "001-10002";
            sttrans.Lines.FromWarehouseCode = "001";
            sttrans.Lines.WarehouseCode = "001";
            sttrans.Lines.Quantity = 8;

            sttrans.Lines.BatchNumbers.BatchNumber = "0001";
            sttrans.Lines.BatchNumbers.Quantity = 8;
            sttrans.Lines.BatchNumbers.Add();

            sttrans.Lines.BinAllocations.BinActionType = BinActionTypeEnum.batFromWarehouse;
            sttrans.Lines.BinAllocations.SerialAndBatchNumbersBaseLine = 0;
            sttrans.Lines.BinAllocations.BinAbsEntry = 1;
            sttrans.Lines.BinAllocations.Quantity = 8;
            sttrans.Lines.BinAllocations.Add();

            sttrans.Lines.BinAllocations.BinActionType = BinActionTypeEnum.batToWarehouse;
            sttrans.Lines.BinAllocations.SerialAndBatchNumbersBaseLine = 0;
            sttrans.Lines.BinAllocations.BinAbsEntry = 6;
            sttrans.Lines.BinAllocations.Quantity = 8;
            sttrans.Lines.BinAllocations.Add();

            sttrans.Lines.Add();

            sttrans.Comments = "Transfer de prueba Sistemas";
            
            if (sttrans.Add() != 0)
            {
                throw new Exception(oCompany.GetLastErrorCode() + " >>" + oCompany.GetLastErrorDescription().ToString());
            }
2 Me gusta

Excelente @thormex que bueno que pudiste solucionarlo. No olvides marcar la respuesta que más te haya sido de utilidad para ayudarte en tu consulta.

Un saludo desde Monterrey!

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.