SAP BO, SAP Business One. Usando el DI API para un caso especial Parte I

     Hola que tal amigos consultores, antes que nada por acá en México fue el día del padre ayer y se que en gran parte de Sudamérica también. Así que antes de empezar a todos los padres felicidades espero que hayan recibidos muchos regalos pero sobre todo el amor de su familia. 

     Y para comenzar este post que tiene un titulo medio extraño, vamos a plantear las situaciones que veremos y como manejaremos todo este entorno. Y porque llame un caso especial? Ok pues empecemos por el principio y este principio es básico, ¿Cuantas veces uno como consultores no se han enfrentado al tema de tener la necesidad  de los mismos artículos en dos empresas de SAP Bussines One?. 

     Esta necesidad de tener los mismos artículos en la dos compañías diferentes muchas veces se dan en empresa medianas que por razones fiscales tienen dos o mas empresas. Al tener dos o mas empresas (generalmente solo en forma fiscal ya que el área de trabajo es la misma) una de las necesidades básicas de nuestros clientes se vuelve el ver toda la información "concentrada" de las compañías que tienen. Y comúnmente en nuestro ambiente las conocemos como concentradoras que es la compañía (ficticia) que funge de receptora de toda la información para poder generar reportes de manera natural en nuestro sistema. 

     Ahora bien existe software que se especializa en estos casos como por ejemplo Ibolt o SAP Netweaver ambas soluciones buenas. Por experiencia personal intente probar el SAP Netweaver que fue un problema instalarlo y después configurarlo según una guía a final de cuentas solo pude concentrar los asientos de ambas compañías y hacer objetos nuevos para concentrar realmente es difícil ya que no hay tanta documentación como para llevarlo a cabo de una manera optima y progresiva. Y por lo que respecta a Ibolt una solución buena y certificada pero no esta al alcance de todo las PyMES, porque de por si el ya estar comprando SAP Business One es una inversión grande el agregar este componente no lo haría accesible para cualquiera. 

     Pero bueno una de las cosas que nos da SAP Business One es la posibilidad (bajo ciertas reglas) de manipular y administrar nuestra información a nuestro antojo. Y para eso esta el DI API, el cual nos permite sacar de manera natural objetos de nuestra sociedad para obtener la información que sea pertinente. 

     Ya después de toda esta explicación y bla bla bla ¿Qué vamos hacer en este ejemplo?. Y la respuesta es sencilla; vamos a hacer que una empresa sea la que de de alta los artículos y por medio de un agente haga que 
el articulo se cree en las empresas que nosotros especifiquemos. 

     Y para dejar este post por el momento vamos a dar la manera de conectarnos a SAP Business One, en otras ocasiones lo hemos hecho pero mediante el UI API esta vez no queremos depender de que debamos de tener una instancia de SAP abierta para poder trabajar, así que la conexión la haremos por otro método, que es el de crear un objeto tipo company. 


public class ConnectSAP : iConnectSAP
    {
        #region iConnectSAP Members
        //private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        SAPbobsCOM.Company iConnectSAP.ConnectSAPSystem(string Type, string BDtype)
        {
            SAPbobsCOM.Company OCompany = new SAPbobsCOM.Company();
            SAPbobsCOM.BoDataServerTypes BDTipo;
            try
            {
                BDTipo = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2005;
                switch (BDtype)
                {
                    case ("SQL 2005"):
                        BDTipo = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2005;
                        break;
                    case ("SQL 2008"):
                        BDTipo = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2008;
                        break;
                }
                switch (Type)
                {
                    case ("Sender"):
                        OCompany.Server = ParamConexion.GetInstance().GetInfo(XMLConstantes.SenderSAPServer);
                        OCompany.CompanyDB = ParamConexion.GetInstance().GetInfo(XMLConstantes.SenderSAPCompanyDB);
                        OCompany.DbUserName = ParamConexion.GetInstance().GetInfo(XMLConstantes.SenderSAPDBUserName);
                        OCompany.DbPassword = ParamConexion.GetInstance().GetInfo(XMLConstantes.SenderSAPDBPassword);
                        OCompany.LicenseServer = ParamConexion.GetInstance().GetInfo(XMLConstantes.SenderSAPLicenseServer) + ":" + ParamConexion.GetInstance().GetInfo(XMLConstantes.SenderSAPLicensePort);
                        OCompany.UserName = ParamConexion.GetInstance().GetInfo(XMLConstantes.SenderSAPUserName);
                        OCompany.Password = ParamConexion.GetInstance().GetInfo(XMLConstantes.SenderSAPPassword);
                        OCompany.DbServerType = BDTipo;
                        break;
                    case ("Rec"):
                        OCompany.Server = ParamConexion.GetInstance().GetInfo(XMLConstantes.RecSAPServer);
                        OCompany.CompanyDB = ParamConexion.GetInstance().GetInfo(XMLConstantes.RecSAPCompanyDB);
                        OCompany.DbUserName = ParamConexion.GetInstance().GetInfo(XMLConstantes.RecSAPDBUserName);
                        OCompany.DbPassword = ParamConexion.GetInstance().GetInfo(XMLConstantes.RecSAPDBPassword);
                        OCompany.LicenseServer = ParamConexion.GetInstance().GetInfo(XMLConstantes.RecSAPLicenseServer) + ":" + ParamConexion.GetInstance().GetInfo(XMLConstantes.RecSAPLicensePort);
                        OCompany.UserName = ParamConexion.GetInstance().GetInfo(XMLConstantes.RecSAPUserName);
                        OCompany.Password = ParamConexion.GetInstance().GetInfo(XMLConstantes.RecSAPPassword);
                        OCompany.DbServerType = BDTipo;
                        break;
                    default:
                        OCompany = null;
                        break;
                }
                if (OCompany != null)
                {
                    OCompany.UseTrusted = false;
                    int Con = OCompany.Connect();
                    if (Con == 0)
                        return OCompany;
                }
            }
            catch (Exception ex)
            {
                //log.Warn("Error: " + ex.Message);
                Console.WriteLine(ex.Message);
            }
            return null;
        }

        #endregion
    }

    Esta manera de conexión es la usaremos en los siguientes post donde estaremos hablando de este tema si se dan cuenta en el código es una función que nos va a regresar un objeto tipo SAPbobsCOM.Company de  SAP Business One. 

    Los parámetros que paso a la compañía los tomo de un xml que cargo al inicio del sistema ya que con esto puedo tener de 2 a mas receptores de los artículos nuevos que iremos creando. Hasta aquí vamos a dejar esta parte en la segunda parte vamos hacer el motor que va a copiar el objeto ITEM y después veremos como saber que objetos mandar. 

     Saludos. 





Posted in |

8 comentarios:

  1. Christian Says:

    Muy buen tema Edgar. :D

  2. Gilberto Garza Says:

    Están muy interesantes tus artículos. Tengo duda si sabes como manejar pedimentos de importación. Somos una comercializadora y ese es nuestro coco.

  3. Edgar Avena Vázquez Says:

    si puedes mandarme a mi correo un poco ms claras las cosas podemos analizar mejor tu problematica. Saludos

  4. Jhonatan Chiquito Says:

    Hola que tal! estoy tratando de actualizar los datos de un socio de negocios desde el di api pero me sale un error en los campos de usuarios del ok one, hay alguna forma de forzar el update ignorando los errores de los campos de usuario, pues directamente desde sap si se pueden hacer modificaciones y no hay problema pero desde el di api no deja.

  5. Unknown Says:

    Hola a todos, tengo una consulta Edgar Avena Vázquez, soy nuevo en esto, te parecerá tonta la pregunta pero no encuentro de donde se puede sacar la interface iConnectSAP, agradecería tu respuesta, saludos

  6. Unknown Says:

    Con una solución SAP Business One se obtiene un software de gestión para mejorar la eficiencia y tomar decisiones más inteligentes.
    Este tipo de software de gestión garantiza un sistema SAP que permitirá optimizar el tiempo, dar soporte a sus necesidades y hacer crecer su negocio.
    Con SAP Business One se tiene todo el poder de un sistema SAP para integrar los procesos comerciales y de atención al cliente, con las áreas técnicas y finanzas, obteniendo una visión global de todo el negocio.

  7. Anónimo Says:

    Hola, podrías publicar el archivo xml que utilizaste en este ejemplo ?.
    Gracias

  8. sap one Says:

    Este artículo ofrece una visión valiosa sobre el desafío común que enfrentan los consultores al sincronizar la información de artículos en múltiples entidades de SAP Business One. La descripción detallada de las soluciones potenciales como Ibolt o SAP Netweaver resalta las opciones disponibles, destacando sus ventajas y limitaciones. Además, la implementación del DI API para manipular datos de manera eficiente muestra cómo SAP Business One proporciona flexibilidad para gestionar la información según las necesidades específicas de cada empresa. Este enfoque práctico y la anticipación de la continuación en futuros posts para desarrollar un motor de copia de objetos ITEM prometen ofrecer soluciones concretas y aplicables.





Related Posts with Thumbnails