Ayuda en creacion de programa.

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • fagarcia
    Junior Member
    • jul
    • 4

    #1

    Ayuda en creacion de programa.

    Hola, he seguido mucho este foro con las diferentes dudas que se me han presentado y encontrado la mayoria de respuesta. En el caso actual estoy aprendiendo un poco de abap y creando un programa el cual no podido lograr resolver el problema.

    Estoy tratando de realizar un programa que busque los datos y lo inserte en una tabla interna y luego de buscar los datos de la función spell_amount actualizar en la tabla interna en su campo correspondiente.

    El problema esta en llenar el campo ITAB01-IMPORTE_TEXTO

    Ver codigo del progama:
    *&---------------------------------------------------------------------*
    *& Report Z_IMPRESION_ORDEN_PAGO
    *&
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*

    REPORT Z_IMPRESION_ORDEN_PAGO.

    TABLES : RBKP, LFA1, LFBK, BNKA.

    DATA: monto_en_letras TYPE spell, "VARIABLES PARA FUNCIONES"
    texto type string. "VARIABLES PARA FUNCIONES"

    DATA: BEGIN OF ITAB01 OCCURS 0,
    BELNR LIKE RBKP-BELNR , " Numero de Factura
    XBLNR LIKE RBKP-XBLNR , " Referencia
    RMWWR LIKE RBKP-RMWWR, " IMPORTE EN MONEDA BRUTO"
    WAERS LIKE RBKP-WAERS, "MONEDA DE DOCUMENTO
    ZZNUMFISC LIKE RBKP-ZZNUMFISC, " NUMERO DE COMPROBANTES FISCALES
    LIFNR LIKE LFA1-LIFNR, "NO DE ACREEDOR
    NAME1 LIKE LFA1-NAME1, " NOMBRE DE ACREEDOR
    STCD1 LIKE LFA1-STCD1," RNC O CEDULA
    ORT01 like LFA1-ORT01, " POBLACION
    ORT02 LIKE LFA1-ORT02, " DISTRITO
    STRAS LIKE LFA1-STRAS, "CALLE
    KOINH like LFBK-KOINH, " TITULAR DE LA CUENTA
    BANKN LIKE LFBK-BANKN, " CUENTA CONTABLE
    BANKA LIKE BNKA-BANKA, "NOMBRE DE BANCO
    ZZPERSONAFISICA LIKE BUT000-ZZPERSONAFISICA, " TIPO DE EMPRESA
    TIPO_PROPIEDAD LIKE ZBP_PERSONAFISIC-TIPO_PROPIEDAD,
    SOLICT LIKE LFA1-NAME1, "SOLICITADOR
    APROBA LIKE LFA1-NAME1, "APROBADO
    IMPORTE_TEXTO TYPE string, " IMPORTE EN VERSION TEXTO
    END OF ITAB01.

    DATA ITAB01_wa LIKE ITAB01.

    SELECTION-SCREEN BEGIN OF BLOCK blk1.


    PARAMETERS: P_FACT TYPE RBKP-BELNR OBLIGATORY,
    P_EJE TYPE RBKP-GJAHR OBLIGATORY,
    P_SOC TYPE RBKP-BUKRS OBLIGATORY,
    P_CONC TYPE BUT000-ZZDESC_ACTIV OBLIGATORY,
    P_SOLT TYPE LFA1-NAME1 OBLIGATORY,
    P_APR TYPE LFA1-NAME1 OBLIGATORY.

    SELECTION-SCREEN END OF BLOCK blk1.



    START-OF-SELECTION.


    SELECT SINGLE
    RBKP~BELNR
    RBKP~XBLNR
    RBKP~RMWWR
    RBKP~WAERS
    RBKP~ZZNUMFISC
    LFA1~LIFNR
    LFA1~NAME1
    LFA1~STCD1
    LFA1~ORT01
    LFA1~ORT02
    LFBK~KOINH
    LFBK~BANKN
    BNKA~BANKA
    but000~ZZPERSONAFISICA
    INTO CORRESPONDING FIELDS OF ITAB01
    from RBKP LEFT JOIN LFA1 ON RBKP~LIFNR = LFA1~LIFNR JOIN BUT000 ON LFA1~LIFNR = BUT000~PARTNER JOIN LFBK ON BUT000~PARTNER = LFBK~LIFNR JOIN BNKA ON BNKA~BANKL = LFBK~BANKL
    WHERE RBKP~BELNR = P_FACT AND RBKP~GJAHR = P_EJE AND RBKP~BUKRS = P_SOC.


    SELECT SINGLE TIPO_PROPIEDAD INTO ITAB01-TIPO_PROPIEDAD FROM ZBP_PERSONAFISIC
    WHERE COD_PERSONAFISICA = ITAB01-ZZPERSONAFISICA.

    CALL FUNCTION 'SPELL_AMOUNT'
    EXPORTING
    amount = ITAB01-RMWWR "Importe (valor) a convertir
    currency = 'X'
    filler = ' '
    language = sy-langu
    IMPORTING
    in_words = monto_en_letras. "Cantidad o importe en letras

    "Ejemplo de como leer el importe en letras
    concatenate monto_en_letras-word 'con'
    monto_en_letras-decimal(2) '/100' " 'decimales'
    into texto separated by space.


    loop at itab01.
    CASE ITAB01-BELNR.
    WHEN P_FACT.
    ITAB01-IMPORTE_TEXTO = texto.
    WHEN OTHERS.
    ENDCASE.
    MODIFY ITAB01.
    ENDLOOP.


    WRITE: / 'IMPORTE' , ITAB01-RMWWR.
    WRITE: / 'REFERENCIA:' , ITAB01-XBLNR.
    WRITE: / 'MONEDA:' , ITAB01-WAERS.
    WRITE: / 'COMPROBANTE' , ITAB01-ZZNUMFISC.
    WRITE: / 'ACREEDOR' , ITAB01-LIFNR.
    WRITE: / 'NOMBRE' , ITAB01-NAME1.
    WRITE: / 'RNC' , ITAB01-STCD1.
    WRITE: / 'DISTRITO' , ITAB01-ORT01.
    WRITE: / 'POBLACION' , ITAB01-ORT02.
    WRITE: / 'CALLE ' , ITAB01-STRAS.
    WRITE: / 'TITULAR' , ITAB01-KOINH.
    WRITE: / 'NUMERO DE CUENTA',ITAB01-BANKN.
    WRITE: / 'BANCO', ITAB01-BANKA.
    WRITE: / 'PERSONA FISICA', ITAB01-ZZPERSONAFISICA.
    WRITE: / 'TIPO DE PROPIEDAD', ITAB01-TIPO_PROPIEDAD.
    WRITE: / 'IMPORTE TEXTO: ', ITAB01-IMPORTE_TEXTO.
    WRITE: / 'IMPORTE TEXTO: ', texto .
  • J e f f
    Member
    • nov
    • 90

    #2
    Originalmente publicado por fagarcia
    Hola, he seguido mucho este foro con las diferentes dudas que se me han presentado y encontrado la mayoria de respuesta. En el caso actual estoy aprendiendo un poco de abap y creando un programa el cual no podido lograr resolver el problema.

    Estoy tratando de realizar un programa que busque los datos y lo inserte en una tabla interna y luego de buscar los datos de la función spell_amount actualizar en la tabla interna en su campo correspondiente.

    El problema esta en llenar el campo ITAB01-IMPORTE_TEXTO

    Ver codigo del progama:
    *&---------------------------------------------------------------------*
    *& Report Z_IMPRESION_ORDEN_PAGO
    *&
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*

    REPORT Z_IMPRESION_ORDEN_PAGO.

    TABLES : RBKP, LFA1, LFBK, BNKA.

    DATA: monto_en_letras TYPE spell, "VARIABLES PARA FUNCIONES"
    texto type string. "VARIABLES PARA FUNCIONES"

    DATA: BEGIN OF ITAB01 OCCURS 0,
    BELNR LIKE RBKP-BELNR , " Numero de Factura
    XBLNR LIKE RBKP-XBLNR , " Referencia
    RMWWR LIKE RBKP-RMWWR, " IMPORTE EN MONEDA BRUTO"
    WAERS LIKE RBKP-WAERS, "MONEDA DE DOCUMENTO
    ZZNUMFISC LIKE RBKP-ZZNUMFISC, " NUMERO DE COMPROBANTES FISCALES
    LIFNR LIKE LFA1-LIFNR, "NO DE ACREEDOR
    NAME1 LIKE LFA1-NAME1, " NOMBRE DE ACREEDOR
    STCD1 LIKE LFA1-STCD1," RNC O CEDULA
    ORT01 like LFA1-ORT01, " POBLACION
    ORT02 LIKE LFA1-ORT02, " DISTRITO
    STRAS LIKE LFA1-STRAS, "CALLE
    KOINH like LFBK-KOINH, " TITULAR DE LA CUENTA
    BANKN LIKE LFBK-BANKN, " CUENTA CONTABLE
    BANKA LIKE BNKA-BANKA, "NOMBRE DE BANCO
    ZZPERSONAFISICA LIKE BUT000-ZZPERSONAFISICA, " TIPO DE EMPRESA
    TIPO_PROPIEDAD LIKE ZBP_PERSONAFISIC-TIPO_PROPIEDAD,
    SOLICT LIKE LFA1-NAME1, "SOLICITADOR
    APROBA LIKE LFA1-NAME1, "APROBADO
    IMPORTE_TEXTO TYPE string, " IMPORTE EN VERSION TEXTO
    END OF ITAB01.

    DATA ITAB01_wa LIKE ITAB01.

    SELECTION-SCREEN BEGIN OF BLOCK blk1.


    PARAMETERS: P_FACT TYPE RBKP-BELNR OBLIGATORY,
    P_EJE TYPE RBKP-GJAHR OBLIGATORY,
    P_SOC TYPE RBKP-BUKRS OBLIGATORY,
    P_CONC TYPE BUT000-ZZDESC_ACTIV OBLIGATORY,
    P_SOLT TYPE LFA1-NAME1 OBLIGATORY,
    P_APR TYPE LFA1-NAME1 OBLIGATORY.

    SELECTION-SCREEN END OF BLOCK blk1.



    START-OF-SELECTION.


    SELECT SINGLE
    RBKP~BELNR
    RBKP~XBLNR
    RBKP~RMWWR
    RBKP~WAERS
    RBKP~ZZNUMFISC
    LFA1~LIFNR
    LFA1~NAME1
    LFA1~STCD1
    LFA1~ORT01
    LFA1~ORT02
    LFBK~KOINH
    LFBK~BANKN
    BNKA~BANKA
    but000~ZZPERSONAFISICA
    INTO CORRESPONDING FIELDS OF ITAB01
    from RBKP LEFT JOIN LFA1 ON RBKP~LIFNR = LFA1~LIFNR JOIN BUT000 ON LFA1~LIFNR = BUT000~PARTNER JOIN LFBK ON BUT000~PARTNER = LFBK~LIFNR JOIN BNKA ON BNKA~BANKL = LFBK~BANKL
    WHERE RBKP~BELNR = P_FACT AND RBKP~GJAHR = P_EJE AND RBKP~BUKRS = P_SOC.


    SELECT SINGLE TIPO_PROPIEDAD INTO ITAB01-TIPO_PROPIEDAD FROM ZBP_PERSONAFISIC
    WHERE COD_PERSONAFISICA = ITAB01-ZZPERSONAFISICA.

    CALL FUNCTION 'SPELL_AMOUNT'
    EXPORTING
    amount = ITAB01-RMWWR "Importe (valor) a convertir
    currency = 'X'
    filler = ' '
    language = sy-langu
    IMPORTING
    in_words = monto_en_letras. "Cantidad o importe en letras

    "Ejemplo de como leer el importe en letras
    concatenate monto_en_letras-word 'con'
    monto_en_letras-decimal(2) '/100' " 'decimales'
    into texto separated by space.


    loop at itab01.
    CASE ITAB01-BELNR.
    WHEN P_FACT.
    ITAB01-IMPORTE_TEXTO = texto.
    WHEN OTHERS.
    ENDCASE.
    MODIFY ITAB01.
    ENDLOOP.


    WRITE: / 'IMPORTE' , ITAB01-RMWWR.
    WRITE: / 'REFERENCIA:' , ITAB01-XBLNR.
    WRITE: / 'MONEDA:' , ITAB01-WAERS.
    WRITE: / 'COMPROBANTE' , ITAB01-ZZNUMFISC.
    WRITE: / 'ACREEDOR' , ITAB01-LIFNR.
    WRITE: / 'NOMBRE' , ITAB01-NAME1.
    WRITE: / 'RNC' , ITAB01-STCD1.
    WRITE: / 'DISTRITO' , ITAB01-ORT01.
    WRITE: / 'POBLACION' , ITAB01-ORT02.
    WRITE: / 'CALLE ' , ITAB01-STRAS.
    WRITE: / 'TITULAR' , ITAB01-KOINH.
    WRITE: / 'NUMERO DE CUENTA',ITAB01-BANKN.
    WRITE: / 'BANCO', ITAB01-BANKA.
    WRITE: / 'PERSONA FISICA', ITAB01-ZZPERSONAFISICA.
    WRITE: / 'TIPO DE PROPIEDAD', ITAB01-TIPO_PROPIEDAD.
    WRITE: / 'IMPORTE TEXTO: ', ITAB01-IMPORTE_TEXTO.
    WRITE: / 'IMPORTE TEXTO: ', texto .
    Chequeaste que el programa pase por la setenncia del case donde haces la asignacion a ITAB01-IMPORTE_TEXTO? Si pasa por aca y hace la asignacion correctamente, no deberias tener problemas para visualizar el importe en texto.
    Si no es eso, cual es el problema especificamente?
    Código:
    [B]*** ABAP Developer (since 2007)[/B]

    Comentario

    • fagarcia
      Junior Member
      • jul
      • 4

      #3
      El pasa por el case pero el modify al campo no me funciona.

      Puedes verificar o darme un ejemplo de ingresar los datos de una función en tabla interna para verificar que estoy haciendo mal

      Comentario

      • J e f f
        Member
        • nov
        • 90

        #4
        Originalmente publicado por fagarcia
        El pasa por el case pero el modify al campo no me funciona.

        Puedes verificar o darme un ejemplo de ingresar los datos de una función en tabla interna para verificar que estoy haciendo mal
        El error esta en el modify! Deberia ser MODIFY TABLE itab o MODIFY TABLE itab FROM itab. Prueba con eso y dime!

        Saludos,
        Código:
        [B]*** ABAP Developer (since 2007)[/B]

        Comentario

        • fagarcia
          Junior Member
          • jul
          • 4

          #5
          Todavia....sigue trayendo el campo en blanco.

          Comentario

          • J e f f
            Member
            • nov
            • 90

            #6
            Originalmente publicado por fagarcia
            Todavia....sigue trayendo el campo en blanco.
            Acabo de probar parte del codigo y con el MODIFY funciona. Estas seguro que pasa por el case y por la asignacion? Sino proba antes de hacer el LOOP llamar a la funcion

            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
            input = p_fact
            IMPORTING
            output = p_fact.

            Como te digo, me funciono sin problemas! El codigo parece estar bien.
            Editado por última vez por J e f f; 28/07/2016, 21:43:28.
            Código:
            [B]*** ABAP Developer (since 2007)[/B]

            Comentario

            • fagarcia
              Junior Member
              • jul
              • 4

              #7
              No se todavia por que no funciona el progama.

              Cree otro programa de prueba para verificar y todavia no me funciona.

              Favor tu ayuda para ver por que este tampoco me funciona.

              REPORT zprueba.

              DATA: monto_en_letras TYPE spell, "VARIABLES PARA FUNCIONES"
              texto type string. "VARIABLES PARA FUNCIONES"


              SELECTION-SCREEN BEGIN OF BLOCK blk1.


              PARAMETERS: P_NUMERO TYPE RBKP-BELNR OBLIGATORY.


              SELECTION-SCREEN END OF BLOCK blk1.


              DATA: BEGIN OF ITAB01 OCCURS 0,
              BELNR LIKE RBKP-BELNR ,
              END OF ITAB01.


              loop at itab01.
              ITAB01-BELNR = '100'. "P_NUMERO'.
              MODIFY TABLE itab01.
              ENDLOOP.

              WRITE: / 'IMPORTE TABLA' , ITAB01-BELNR.

              Comentario

              • J e f f
                Member
                • nov
                • 90

                #8
                Originalmente publicado por fagarcia
                No se todavia por que no funciona el progama.

                Cree otro programa de prueba para verificar y todavia no me funciona.

                Favor tu ayuda para ver por que este tampoco me funciona.

                REPORT zprueba.

                DATA: monto_en_letras TYPE spell, "VARIABLES PARA FUNCIONES"
                texto type string. "VARIABLES PARA FUNCIONES"

                SELECTION-SCREEN BEGIN OF BLOCK blk1.
                PARAMETERS: P_NUMERO TYPE RBKP-BELNR OBLIGATORY.
                SELECTION-SCREEN END OF BLOCK blk1.

                DATA: BEGIN OF ITAB01 OCCURS 0,
                BELNR LIKE RBKP-BELNR ,
                END OF ITAB01.

                loop at itab01.
                ITAB01-BELNR = '100'. "P_NUMERO'.
                MODIFY TABLE itab01.
                ENDLOOP.

                WRITE: / 'IMPORTE TABLA' , ITAB01-BELNR.
                Ok. El prob aca es el siguiente. No tenes registros en la tabla ITAB. Deberias antes de hacer el loop insertar un registro, sino no loopea y por lo tanto no hace el modify. Fijate en el programa anterior, si el select levanta registros.

                Saludos,
                Código:
                [B]*** ABAP Developer (since 2007)[/B]

                Comentario

                Trabajando...