Crear Solicitud de Compras en SAP por el SDK

Hola expertos,

Quisiera su apoyo para crear solicitudes de compras en SAP.

Yo lo inserto por XML,

pero también trabajo con C# o VB

Hola Jesús, no entiendo tu post, ¿podrías explicarte mejor? ¿Tu eres el que realiza esto? ¿Que tal si nos haces un tutorial?

Hola @Shadowdancer

Lo que necesito es crear solicitudes de compra en SAP B1 mediante el SDK de SAP.

Hola Jesus
Sino sabes SDK tiene la opción del DTW o B1if.
En caso de tener hana podrías utilizar el service layer donde puedes trabajar con servicios REST mediante la ASP.NET WEB-API.
cualquier duda especifica, con gusto!

@andresramirez Hola,

Necesito que sea por codigo del SDK ya sea C# o VB porque estoy creando un sistema Web que inserta en SAP.

Que tal @jesusdja

Te paso un ejemplo en C#, de como crear una solicitud de compra en SAP, he creado diferentes documentos pero solicitudes no había tenido necesidad, sin embargo, hice algunas pruebas y este código me funcionó.

private void btnCrearSolicitudDeCompra_Click(object sender, EventArgs e) {
    Company oEmpresa = new SAPbobsCOM.Company();

    try {
        string baseDeDatosEMPRESA = "NombreBaseDeDatos";
        oEmpresa.Server = "SERVIDOR";
        oEmpresa.LicenseServer = "SERVIDOR:30000";
        oEmpresa.CompanyDB = baseDeDatosEMPRESA;
        oEmpresa.UserName = "usuario";
        oEmpresa.Password = "password";
        oEmpresa.DbUserName = "sa";
        oEmpresa.DbPassword = "claveSQL";
        oEmpresa.DbServerType = BoDataServerTypes.dst_MSSQL2014;
        oEmpresa.language = BoSuppLangs.ln_Spanish_La;
        oEmpresa.UseTrusted = false;

        if (oEmpresa.Connect() != 0) {
            //int errNumero = 0; string errMensaje = "";
            oEmpresa.GetLastError(out int errNumero, out string errMensaje);
            oEmpresa.Disconnect();
            Marshal.ReleaseComObject(oEmpresa);
            oEmpresa = null;
            MessageBox.Show("Ha ocurrido el siguiente error al intentar conectar a la Base de Datos " + baseDeDatosEMPRESA + " en SAP\n\n" + errMensaje, tituloMSGBOX, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            return;
        }

        // inicia transaction para asegurarse de que si NO se realicen con éxito todas las operaciones, deshaga cualquier cambio realizado hasta antes del error en caso de ocurrir
        oEmpresa.StartTransaction();

        // procede a crear la solicutd de compra
        SAPbobsCOM.Documents solicitudCOMPRA = oEmpresa.GetBusinessObject(BoObjectTypes.oPurchaseRequest);
        solicitudCOMPRA.ReqType = (int)BoMsgRcpTypes.rt_InternalUser;
        solicitudCOMPRA.RequesterBranch = -2;		// asignar un valor válido
        solicitudCOMPRA.RequesterDepartment = -2;	// asignar un valor válido

        solicitudCOMPRA.DocDate = DateTime.Now;
        solicitudCOMPRA.DocDueDate = DateTime.Now;
        solicitudCOMPRA.TaxDate = DateTime.Now;
        solicitudCOMPRA.RequriedDate = DateTime.Now.AddDays(1);     // para efectos de prueba, solo adicioné un día a la fecha actual
        //solicitudCOMPRA.Series = 99; // en caso de que tengas más de una serie (puede existir un combo como en SAP donde muestre la descripción y aquí plasmas su número
        solicitudCOMPRA.Lines.ItemCode = "codigoProducto";
        solicitudCOMPRA.Lines.LineVendor = "codigoProveedor";  // no estoy seguro, sin embargo, de acuerdo a las pruebas realizadas, si no asignas un proveedor, te asigna el de la última compra, a reserva de que lo verifiques
        solicitudCOMPRA.Lines.RequiredDate = DateTime.Now.AddDays(1);	// para efectos de prueba, solo adicioné un día a la fecha actual
        solicitudCOMPRA.Lines.Quantity = 1;
        solicitudCOMPRA.Lines.UnitPrice = 5;
        solicitudCOMPRA.Lines.TaxCode = "IVAA0001";
        solicitudCOMPRA.Comments = "Concepto de la Solicitud de Compra";

        int resultado = solicitudCOMPRA.Add();
        if (resultado != 0) {
            //int errNumero = 0; string errMensaje = "";
            oEmpresa.GetLastError(out int errNumero, out string errMensaje);
            if (oEmpresa.InTransaction == true) {
                oEmpresa.EndTransaction(BoWfTransOpt.wf_RollBack);
            }        // si la transacción sigue abierta, la cierra deshaciendo todos los cambios realizados hasta el momento
            throw new Exception("Ha ocurrido el siguiente error, al intentar crear la Solicitud de Compra, revise por favor ...\n\n" + errMensaje);
        }

        // guarda en firma la información en la base de datos
        oEmpresa.EndTransaction(BoWfTransOpt.wf_Commit);
        MessageBox.Show("Las operaciones fueron realizadas con éxito, revise por favor ...", tituloMSGBOX, MessageBoxButtons.OK, MessageBoxIcon.Information);
        if (oEmpresa.Connected) {
            oEmpresa.Disconnect();
        }
        oEmpresa = null;
    }
    catch (Exception err) {
        // Control de errores
        MessageBox.Show(err.Message, tituloMSGBOX, MessageBoxButtons.OK, MessageBoxIcon.Warning);
        if (oEmpresa.InTransaction == true) {
            oEmpresa.EndTransaction(BoWfTransOpt.wf_RollBack);
        }        // si la transacción sigue abierta, la cierra deshaciendo todos los cambios realizados hasta el momento
        if (oEmpresa.Connected) {
            oEmpresa.Disconnect();
        }
        oEmpresa = null;
    }
}

Recomendaciones:
1.- Correrlo en una Base de Datos de PRUEBAS
2.- Cuando se hace por primera vez o cuando hay cambios de versión, crear exactamente el mismo documento de forma manual y comparar las tablas (campo por campo) con el documento creado desde el proceso, con esto nos podemos dar cuenta de posibles datos que estemos omitiendo.

Espero te ayude a solucionar tu problema o al menos para darte una idea.

Saludos
SAP B1 v9.2 PL03
México

4 Me gusta

Muchisimas gracias de verdad es lo que necesitaba.

El de servicio tambien lo necesito pero de aqui mismo lo saco.

Perfecto.!!

Que bien que te fue útil @jesusdja

Solo te pido de favor no olvides marcarlo como solucionado, para que esto sirve de ayuda para otros usuarios que tengan el mismo problema. Gracias

Saludos

1 me gusta

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