Ejemplo BAPI_PRODORDCONF_CREATE_TT y BAPI_GOODSMVT_CREATE

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • rogerclavell
    Junior Member
    • may
    • 7

    #1

    Ejemplo BAPI_PRODORDCONF_CREATE_TT y BAPI_GOODSMVT_CREATE

    Hola gente,

    Os paso un ejemplo de como utilizar las bapis BAPI_PRODORDCONF_CREATE_TT y BAPI_GOODSMVT_CREATE. Esta hecho de manera rápida simplemente para ver que funciona.

    Para programar he utilizado el VS2010 y el connector sap 3.0

    Imports SAP.Middleware.Connector

    Private Sub notificar()

    'Parametros de conexión de SAP
    Dim SapParametros As New RfcConfigParameters
    SapParametros(RfcConfigParameters.User) = "tu_usuario"
    SapParametros(RfcConfigParameters.Password) = "tu_password"
    SapParametros(RfcConfigParameters.SystemID) = "sap_maquina"
    SapParametros(RfcConfigParameters.Client) = "sap_mandante"
    SapParametros(RfcConfigParameters.Name) = "sap_groupname"
    SapParametros(RfcConfigParameters.AppServerHost) = "sap_ip"
    SapParametros(RfcConfigParameters.SystemNumber) = "sap_numero_systema"
    SapParametros(RfcConfigParameters.Language) = "ES"


    Try
    'Conexión SAP
    Dim destino As RfcDestination
    destino = RfcDestinationManager.GetDestination(SapParametros )


    'Nueva función para ejecutar la BAPI_PRODORDCONF_CREATE_TT
    Dim funcion As IRfcFunction = destino.Repository.CreateFunction("BAPI_PRODORDCON F_CREATE_TT")

    'Notificaciones para guardar en SAP
    Dim tbl_TIMETICKETS As IRfcTable = funcion.GetTable("TIMETICKETS")
    tbl_TIMETICKETS.Append()
    tbl_TIMETICKETS.SetValue("ORDERID", "000001001811") 'Orden de fabricación
    tbl_TIMETICKETS.SetValue("SEQUENCE", "000000") 'Sequencia
    tbl_TIMETICKETS.SetValue("OPERATION", "0010") 'Operación
    tbl_TIMETICKETS.SetValue("WORK_CNTR", "puesto_trabajo") 'Puesto de trabajo
    tbl_TIMETICKETS.SetValue("PLANT", "sap_centro") 'Centro
    tbl_TIMETICKETS.SetValue("YIELD", "400") 'Cantidad buena
    tbl_TIMETICKETS.SetValue("CONF_ACTIVITY1", "5") 'Tiempo a notificar
    tbl_TIMETICKETS.SetValue("RECORDTYPE", "L20")
    tbl_TIMETICKETS.SetValue("FIN_CONF", "")
    tbl_TIMETICKETS.SetValue("POSTG_DATE", Format(Now, "yyyyMMdd")) 'Fecha contable
    tbl_TIMETICKETS.SetValue("DEV_REASON", "P010")
    tbl_TIMETICKETS.SetValue("SCRAP", "2") 'Cantidad de rotura
    tbl_TIMETICKETS.SetValue("CONF_TEXT", "PRUEBAS") 'Texto notificación


    'Ejecutar la BAPI
    Dim ejecuta As New RfcTransaction
    funcion.Invoke(destino)
    ejecuta.AddFunction(funcion)
    ejecuta.Commit(destino)

    'Resultados de la BAPI
    Dim tbl_DETAIL_RETURN As IRfcTable = funcion.GetTable("DETAIL_RETURN")



    'Nueva función para ejecutar la BAPI_GOODSMVT_CREATE
    Dim funcion2 As IRfcFunction = destino.Repository.CreateFunction("BAPI_GOODSMVT_C REATE")

    'Parametros de GOODSMVT_HEADER
    Dim str_GOODSMVT_HEADER As IRfcStructure = funcion2.GetStructure("GOODSMVT_HEADER")
    str_GOODSMVT_HEADER.SetValue("PSTNG_DATE", Format(Now, "yyyyMMdd"))
    str_GOODSMVT_HEADER.SetValue("DOC_DATE", Format(Now, "yyyyMMdd"))
    str_GOODSMVT_HEADER.SetValue("PR_UNAME", "rfcuser")

    'Parametros de GOODSMVT_CODE
    Dim str_GOODSMVT_CODE As IRfcStructure = funcion2.GetStructure("GOODSMVT_CODE")
    str_GOODSMVT_CODE.SetValue("GM_CODE", "02")

    'Movimientos de mercancia a generar en SAP
    Dim tbl_GOODSMVT_ITEM As IRfcTable = funcion2.GetTable("GOODSMVT_ITEM")
    tbl_GOODSMVT_ITEM.Append()
    tbl_GOODSMVT_ITEM.SetValue("MATERIAL", "000000000100010264") 'Material
    tbl_GOODSMVT_ITEM.SetValue("PLANT", "sap_centro") 'Centro
    tbl_GOODSMVT_ITEM.SetValue("STGE_LOC", "sap_almacen") 'Almacén
    tbl_GOODSMVT_ITEM.SetValue("BATCH", "lote_material") 'Lote
    tbl_GOODSMVT_ITEM.SetValue("MOVE_TYPE", "901") 'Tipo mov.
    tbl_GOODSMVT_ITEM.SetValue("MVT_IND", "F") 'Indicador mov.
    tbl_GOODSMVT_ITEM.SetValue("STCK_TYPE", "F") 'T.Stock
    tbl_GOODSMVT_ITEM.SetValue("ORDERID", "000001001811") 'Orden de fabricación
    tbl_GOODSMVT_ITEM.SetValue("ENTRY_QNT", "400") 'Cantidad
    tbl_GOODSMVT_ITEM.SetValue("ENTRY_UOM", "PZS") 'UMB

    'Ejecutar la BAPI
    Dim ejecuta2 As New RfcTransaction
    funcion2.Invoke(destino)
    ejecuta2.AddFunction(funcion2)
    ejecuta2.Commit(destino)

    'Resultado de la ejecución
    Dim tbl_RETURN As IRfcTable = funcion2.GetTable("RETURN")

    Catch ex As Exception
    MsgBox(ex.ToString)
    End Try

    End Sub


    Espero sirva de ayuda para la gente que esta empezando, como yo.
  • dcontreras80
    Junior Member
    • feb
    • 29

    #2
    Ejemplo BAPI_PRODORDCONF_CREATE_TT y BAPI_GOODSMVT_CREATE

    Hola Roger,

    Muchas Gracias por el tema.

    Tengo una inquietud.

    Estoy ejecutando la BAPI BAPI_PRODORDCONF_PDC_UPLOAD_TT

    solo llenando la tabla TIMETICKETS
    ya que solo quiero probar la notificación sin los movimientos de mercancías.

    Cuando ejecuto la Tx SE37 no me genera errores
    En Return no sale mensaje, solo 000. Si por favor me puedes ayudar.

    La tabla TIMETICKETS
    La estoy llenando con estos parámetros.

    CONF_NO 0000000000
    ORDERID 21000348
    SEQUENCE
    OPERATION 0011
    SUB_OPER
    CAPA_CATEGORY
    SPLIT 0
    FIN_CONF 1
    CLEAR_RES X
    POSTG_DATE 18.09.2012
    DEV_REASON
    CONF_TEXT
    PLANT
    WORK_CNTR
    RECORDTYPE
    CONF_QUAN_UNIT
    CONF_QUAN_UNIT_ISO
    YIELD 0,000
    SCRAP 0,000
    REWORK 0,000
    CONF_ACTI_UNIT1 MIN
    CONF_ACTI_UNIT1_ISO
    CONF_ACTIVITY1 0,000
    NO_REMN_ACTI1
    CONF_ACTI_UNIT2 MIN
    CONF_ACTI_UNIT2_ISO
    CONF_ACTIVITY2 30,000
    NO_REMN_ACTI2
    CONF_ACTI_UNIT3 MIN
    CONF_ACTI_UNIT3_ISO
    CONF_ACTIVITY3 353,363
    NO_REMN_ACTI3
    CONF_ACTI_UNIT4 MIN
    CONF_ACTI_UNIT4_ISO
    CONF_ACTIVITY4 256,060
    NO_REMN_ACTI4
    CONF_ACTI_UNIT5 MIN
    CONF_ACTI_UNIT5_ISO
    CONF_ACTIVITY5 639,423
    NO_REMN_ACTI5
    CONF_ACTI_UNIT6 MIN
    CONF_ACTI_UNIT6_ISO
    CONF_ACTIVITY6 256,060
    NO_REMN_ACTI6

    Muchas Gracias


    Originalmente publicado por rogerclavell
    Hola gente,

    Os paso un ejemplo de como utilizar las bapis BAPI_PRODORDCONF_CREATE_TT y BAPI_GOODSMVT_CREATE. Esta hecho de manera rápida simplemente para ver que funciona.

    Para programar he utilizado el VS2010 y el connector sap 3.0

    Imports SAP.Middleware.Connector

    Private Sub notificar()

    'Parametros de conexión de SAP
    Dim SapParametros As New RfcConfigParameters
    SapParametros(RfcConfigParameters.User) = "tu_usuario"
    SapParametros(RfcConfigParameters.Password) = "tu_password"
    SapParametros(RfcConfigParameters.SystemID) = "sap_maquina"
    SapParametros(RfcConfigParameters.Client) = "sap_mandante"
    SapParametros(RfcConfigParameters.Name) = "sap_groupname"
    SapParametros(RfcConfigParameters.AppServerHost) = "sap_ip"
    SapParametros(RfcConfigParameters.SystemNumber) = "sap_numero_systema"
    SapParametros(RfcConfigParameters.Language) = "ES"


    Try
    'Conexión SAP
    Dim destino As RfcDestination
    destino = RfcDestinationManager.GetDestination(SapParametros )


    'Nueva función para ejecutar la BAPI_PRODORDCONF_CREATE_TT
    Dim funcion As IRfcFunction = destino.Repository.CreateFunction("BAPI_PRODORDCON F_CREATE_TT")

    'Notificaciones para guardar en SAP
    Dim tbl_TIMETICKETS As IRfcTable = funcion.GetTable("TIMETICKETS")
    tbl_TIMETICKETS.Append()
    tbl_TIMETICKETS.SetValue("ORDERID", "000001001811") 'Orden de fabricación
    tbl_TIMETICKETS.SetValue("SEQUENCE", "000000") 'Sequencia
    tbl_TIMETICKETS.SetValue("OPERATION", "0010") 'Operación
    tbl_TIMETICKETS.SetValue("WORK_CNTR", "puesto_trabajo") 'Puesto de trabajo
    tbl_TIMETICKETS.SetValue("PLANT", "sap_centro") 'Centro
    tbl_TIMETICKETS.SetValue("YIELD", "400") 'Cantidad buena
    tbl_TIMETICKETS.SetValue("CONF_ACTIVITY1", "5") 'Tiempo a notificar
    tbl_TIMETICKETS.SetValue("RECORDTYPE", "L20")
    tbl_TIMETICKETS.SetValue("FIN_CONF", "")
    tbl_TIMETICKETS.SetValue("POSTG_DATE", Format(Now, "yyyyMMdd")) 'Fecha contable
    tbl_TIMETICKETS.SetValue("DEV_REASON", "P010")
    tbl_TIMETICKETS.SetValue("SCRAP", "2") 'Cantidad de rotura
    tbl_TIMETICKETS.SetValue("CONF_TEXT", "PRUEBAS") 'Texto notificación


    'Ejecutar la BAPI
    Dim ejecuta As New RfcTransaction
    funcion.Invoke(destino)
    ejecuta.AddFunction(funcion)
    ejecuta.Commit(destino)

    'Resultados de la BAPI
    Dim tbl_DETAIL_RETURN As IRfcTable = funcion.GetTable("DETAIL_RETURN")



    'Nueva función para ejecutar la BAPI_GOODSMVT_CREATE
    Dim funcion2 As IRfcFunction = destino.Repository.CreateFunction("BAPI_GOODSMVT_C REATE")

    'Parametros de GOODSMVT_HEADER
    Dim str_GOODSMVT_HEADER As IRfcStructure = funcion2.GetStructure("GOODSMVT_HEADER")
    str_GOODSMVT_HEADER.SetValue("PSTNG_DATE", Format(Now, "yyyyMMdd"))
    str_GOODSMVT_HEADER.SetValue("DOC_DATE", Format(Now, "yyyyMMdd"))
    str_GOODSMVT_HEADER.SetValue("PR_UNAME", "rfcuser")

    'Parametros de GOODSMVT_CODE
    Dim str_GOODSMVT_CODE As IRfcStructure = funcion2.GetStructure("GOODSMVT_CODE")
    str_GOODSMVT_CODE.SetValue("GM_CODE", "02")

    'Movimientos de mercancia a generar en SAP
    Dim tbl_GOODSMVT_ITEM As IRfcTable = funcion2.GetTable("GOODSMVT_ITEM")
    tbl_GOODSMVT_ITEM.Append()
    tbl_GOODSMVT_ITEM.SetValue("MATERIAL", "000000000100010264") 'Material
    tbl_GOODSMVT_ITEM.SetValue("PLANT", "sap_centro") 'Centro
    tbl_GOODSMVT_ITEM.SetValue("STGE_LOC", "sap_almacen") 'Almacén
    tbl_GOODSMVT_ITEM.SetValue("BATCH", "lote_material") 'Lote
    tbl_GOODSMVT_ITEM.SetValue("MOVE_TYPE", "901") 'Tipo mov.
    tbl_GOODSMVT_ITEM.SetValue("MVT_IND", "F") 'Indicador mov.
    tbl_GOODSMVT_ITEM.SetValue("STCK_TYPE", "F") 'T.Stock
    tbl_GOODSMVT_ITEM.SetValue("ORDERID", "000001001811") 'Orden de fabricación
    tbl_GOODSMVT_ITEM.SetValue("ENTRY_QNT", "400") 'Cantidad
    tbl_GOODSMVT_ITEM.SetValue("ENTRY_UOM", "PZS") 'UMB

    'Ejecutar la BAPI
    Dim ejecuta2 As New RfcTransaction
    funcion2.Invoke(destino)
    ejecuta2.AddFunction(funcion2)
    ejecuta2.Commit(destino)

    'Resultado de la ejecución
    Dim tbl_RETURN As IRfcTable = funcion2.GetTable("RETURN")

    Catch ex As Exception
    MsgBox(ex.ToString)
    End Try

    End Sub


    Espero sirva de ayuda para la gente que esta empezando, como yo.

    Comentario

    • rogerclavell
      Junior Member
      • may
      • 7

      #3
      Hola dcontreras80,

      He visto que no le pasas ningún valor en el campo SECUENCE, yo siempre le paso 000000, prueba a ver.

      Saludos.

      Comentario

      • jbarajas
        Junior Member
        • jun
        • 6

        #4
        Testrun

        Hola.
        En el ejemplo mencionado, ¿se puede usar el "TESTRUN"?
        Lo intenté pero marca un valor de nothing.
        Dim str_TESTRUN As IRfcStructure = funcion2.GetStructure("TESTRUN")
        str_TESTRUN.SetValue("TESTRUN", "X") 'Modo de Prueba
        Gracias.



        Originalmente publicado por rogerclavell
        Hola gente,

        Os paso un ejemplo de como utilizar las bapis BAPI_PRODORDCONF_CREATE_TT y BAPI_GOODSMVT_CREATE. Esta hecho de manera rápida simplemente para ver que funciona.

        Para programar he utilizado el VS2010 y el connector sap 3.0

        Imports SAP.Middleware.Connector

        Private Sub notificar()

        'Parametros de conexión de SAP
        Dim SapParametros As New RfcConfigParameters
        SapParametros(RfcConfigParameters.User) = "tu_usuario"
        SapParametros(RfcConfigParameters.Password) = "tu_password"
        SapParametros(RfcConfigParameters.SystemID) = "sap_maquina"
        SapParametros(RfcConfigParameters.Client) = "sap_mandante"
        SapParametros(RfcConfigParameters.Name) = "sap_groupname"
        SapParametros(RfcConfigParameters.AppServerHost) = "sap_ip"
        SapParametros(RfcConfigParameters.SystemNumber) = "sap_numero_systema"
        SapParametros(RfcConfigParameters.Language) = "ES"


        Try
        'Conexión SAP
        Dim destino As RfcDestination
        destino = RfcDestinationManager.GetDestination(SapParametros )


        'Nueva función para ejecutar la BAPI_PRODORDCONF_CREATE_TT
        Dim funcion As IRfcFunction = destino.Repository.CreateFunction("BAPI_PRODORDCON F_CREATE_TT")

        'Notificaciones para guardar en SAP
        Dim tbl_TIMETICKETS As IRfcTable = funcion.GetTable("TIMETICKETS")
        tbl_TIMETICKETS.Append()
        tbl_TIMETICKETS.SetValue("ORDERID", "000001001811") 'Orden de fabricación
        tbl_TIMETICKETS.SetValue("SEQUENCE", "000000") 'Sequencia
        tbl_TIMETICKETS.SetValue("OPERATION", "0010") 'Operación
        tbl_TIMETICKETS.SetValue("WORK_CNTR", "puesto_trabajo") 'Puesto de trabajo
        tbl_TIMETICKETS.SetValue("PLANT", "sap_centro") 'Centro
        tbl_TIMETICKETS.SetValue("YIELD", "400") 'Cantidad buena
        tbl_TIMETICKETS.SetValue("CONF_ACTIVITY1", "5") 'Tiempo a notificar
        tbl_TIMETICKETS.SetValue("RECORDTYPE", "L20")
        tbl_TIMETICKETS.SetValue("FIN_CONF", "")
        tbl_TIMETICKETS.SetValue("POSTG_DATE", Format(Now, "yyyyMMdd")) 'Fecha contable
        tbl_TIMETICKETS.SetValue("DEV_REASON", "P010")
        tbl_TIMETICKETS.SetValue("SCRAP", "2") 'Cantidad de rotura
        tbl_TIMETICKETS.SetValue("CONF_TEXT", "PRUEBAS") 'Texto notificación


        'Ejecutar la BAPI
        Dim ejecuta As New RfcTransaction
        funcion.Invoke(destino)
        ejecuta.AddFunction(funcion)
        ejecuta.Commit(destino)

        'Resultados de la BAPI
        Dim tbl_DETAIL_RETURN As IRfcTable = funcion.GetTable("DETAIL_RETURN")



        'Nueva función para ejecutar la BAPI_GOODSMVT_CREATE
        Dim funcion2 As IRfcFunction = destino.Repository.CreateFunction("BAPI_GOODSMVT_C REATE")

        'Parametros de GOODSMVT_HEADER
        Dim str_GOODSMVT_HEADER As IRfcStructure = funcion2.GetStructure("GOODSMVT_HEADER")
        str_GOODSMVT_HEADER.SetValue("PSTNG_DATE", Format(Now, "yyyyMMdd"))
        str_GOODSMVT_HEADER.SetValue("DOC_DATE", Format(Now, "yyyyMMdd"))
        str_GOODSMVT_HEADER.SetValue("PR_UNAME", "rfcuser")

        'Parametros de GOODSMVT_CODE
        Dim str_GOODSMVT_CODE As IRfcStructure = funcion2.GetStructure("GOODSMVT_CODE")
        str_GOODSMVT_CODE.SetValue("GM_CODE", "02")

        'Movimientos de mercancia a generar en SAP
        Dim tbl_GOODSMVT_ITEM As IRfcTable = funcion2.GetTable("GOODSMVT_ITEM")
        tbl_GOODSMVT_ITEM.Append()
        tbl_GOODSMVT_ITEM.SetValue("MATERIAL", "000000000100010264") 'Material
        tbl_GOODSMVT_ITEM.SetValue("PLANT", "sap_centro") 'Centro
        tbl_GOODSMVT_ITEM.SetValue("STGE_LOC", "sap_almacen") 'Almacén
        tbl_GOODSMVT_ITEM.SetValue("BATCH", "lote_material") 'Lote
        tbl_GOODSMVT_ITEM.SetValue("MOVE_TYPE", "901") 'Tipo mov.
        tbl_GOODSMVT_ITEM.SetValue("MVT_IND", "F") 'Indicador mov.
        tbl_GOODSMVT_ITEM.SetValue("STCK_TYPE", "F") 'T.Stock
        tbl_GOODSMVT_ITEM.SetValue("ORDERID", "000001001811") 'Orden de fabricación
        tbl_GOODSMVT_ITEM.SetValue("ENTRY_QNT", "400") 'Cantidad
        tbl_GOODSMVT_ITEM.SetValue("ENTRY_UOM", "PZS") 'UMB

        'Ejecutar la BAPI
        Dim ejecuta2 As New RfcTransaction
        funcion2.Invoke(destino)
        ejecuta2.AddFunction(funcion2)
        ejecuta2.Commit(destino)

        'Resultado de la ejecución
        Dim tbl_RETURN As IRfcTable = funcion2.GetTable("RETURN")

        Catch ex As Exception
        MsgBox(ex.ToString)
        End Try

        End Sub


        Espero sirva de ayuda para la gente que esta empezando, como yo.

        Comentario

        • jbarajas
          Junior Member
          • jun
          • 6

          #5
          Se salta folios

          Hola. Estoy corriendo el ejemplo para generar entrada, pero el detalle es que se salta folios cada vez que se ejecuta. Lo raro es que en el resultado muestra el folio que sigue, pero al consultar el movimiento en sap es otro numero.
          Por ejemplo, se corre el programa y dice que generó el folio 5000000391, y consultas en sap y es el 5000000392. Se vuelve a correr el programa y dice que generó el folio 5000000393, y se consulta en SAP y es el 5000000394, y así sucesivamente.
          Tengo un solo Invoke y commit, que estará sucediendo?
          Gracias de antemano.

          Comentario

          • mastsolutions
            Junior Member
            • jul
            • 1

            #6
            proble with folio generation

            I also have the same problem with the generation of the document, you have solved? Could you help me? thank you and greetings

            Comentario

            Trabajando...