Meses Con Field-symbols

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • budista1
    Senior Member
    • sep
    • 154

    #1

    Meses Con Field-symbols

    ¿Alguien sabe como tratar cantidades que van cambiando según el mes?
    Tengo entendido que hay una manera con field- symbols que sirve para ahorrar código.

    Gracias de antemano
  • kibo
    Senior Member
    • may
    • 177

    #2
    Tendrias que contarnos un poco mas que necesitas hacer...

    Igualmente el uso de FS no es muy complejo, puedes encontrar informacion en muchos lados (mismo en el f1 de sap); y entendiendo como funciona, usando la cabeza puedes resolver el problema de los meses facilmente
    http://diariotitular.com/contacto/

    Comentario

    • budista1
      Senior Member
      • sep
      • 154

      #3
      field-symbold meses

      Tienes un código a mano?

      Nunca trabajé con flied-symbols..

      Comentario

      • FBrazon
        Member
        • feb
        • 57

        #4
        Que tal budista1.

        Aqui te dejo un ejemplo sencillo de field symbols. LLevalo a tu ambiente de desarrollo y lo ejecutas. Tal vez no le veas la utilidad al algoritmo pero la idea es que veas como funciona. Te recomiendo que actives el modo debugging y observes cada asignación paso a paso, seguro lo entenderás.

        Espero te sea útil.

        *****INICIO DEL EJEMPLO ************

        REPORT ZFBRAZON_4 MESSAGE-ID zfi01. .

        DATA: w_num LIKE bkpf-monat,
        w_monto LIKE bsis-dmbtr,
        str_sem(20) TYPE C.

        DATA: BEGIN OF reg_imp OCCURS 0,
        NUM LIKE BKPF-MONAT,
        semana01 LIKE bsis-dmbtr,
        semana02 LIKE bsis-dmbtr,
        semana03 LIKE bsis-dmbtr,
        semana04 LIKE bsis-dmbtr,
        semana05 LIKE bsis-dmbtr,
        END OF reg_imp.

        FIELD-SYMBOLS: <semana>, <col>.

        reg_imp-semana01 = 100.
        reg_imp-semana02 = 350.
        reg_imp-semana03 = 420.
        reg_imp-semana04 = 530.
        reg_imp-semana05 = 750.


        reg_imp-num = 0.
        DO 6 times.
        reg_imp-num = reg_imp-num + 1.
        CONCATENATE 'reg_imp-semana' reg_imp-num INTO str_sem.
        ASSIGN (str_sem) TO <semana>.
        w_monto = <semana>.
        ENDDO.

        ****** FIN DEL EJEMPLO ********

        Comentario

        • budista1
          Senior Member
          • sep
          • 154

          #5
          merci

          Muchas gracias FBrazon, lo probaré!

          Yo necesito un field symbol de tipo mes que irá cambiando y así no tengo que hacer que hacer 12 códigos...a ver como lo diseño...mmm

          se aceptan ideas !

          Comentario

          • budista1
            Senior Member
            • sep
            • 154

            #6
            FIELD SYMBOLS para TRATAMIENTO DE MESES

            Hola foro,

            continuo sin solucionar el problema, teneis algún texto de

            FIELD SYMBOLS para TRATAMIENTO DE MESES?

            Comentario

            • DCErick
              Moderator
              • mar
              • 1090

              #7
              Originalmente publicado por budista1
              Hola foro,

              continuo sin solucionar el problema, teneis algún texto de

              FIELD SYMBOLS para TRATAMIENTO DE MESES?
              mmm mi estimado esque realmente en mi caso no entiendo que deseas hacer, podrias ampliarnos el panorama mencionando que es lo que buscas hacer?
              -------------------
              ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

              Comentario

              • budista1
                Senior Member
                • sep
                • 154

                #8
                FIELD SYMBOLS para TRATAMIENTO DE MESES

                Apreciado DCEric,

                tengo un programa que inserta valores en una tabla z en una serie de campos.
                Para ello he montado un perform.
                El problema se produce cuando hay un campo de tipo coste que según el mes de una fecha va cambiando.

                Por ejemplo,

                para fecha de enero cogemos el campo wkg001

                febrero......wkg002 y así sucesivamente.

                Que pasa entonces? Que en lugar de un perform qu inserta campos, tengo que hacer 12 PERFORMS por culpa del dichoso campito.

                Se que con field-symbols podría arreglarlo....UN SALUDO

                Comentario

                • DCErick
                  Moderator
                  • mar
                  • 1090

                  #9
                  Es algo así por lo que te entiendo:

                  FIELD-SYMBOLS: <mes>.
                  Data: lv_campo type string.

                  CONCATENATE 'ti_tabla-wkg0' sy-datum+5(02) INTO lv_campo.
                  ASSIGN (lv_campo) TO <mes>.

                  Ya con eso tienes direccionado <mes> al campo wkg0+mes (wkg001..wkg012) del work area (cabecera) de la tabla interna y ya puedes asignarle o coger el valor de dicho campo.
                  -------------------
                  ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

                  Comentario

                  • budista1
                    Senior Member
                    • sep
                    • 154

                    #10
                    graciasss

                    Eric lo probaré a ver que pasa,

                    muy agradecido!

                    Comentario

                    • budista1
                      Senior Member
                      • sep
                      • 154

                      #11
                      field-symbols sin resolver

                      Hola Eric,

                      aún no he resuelto esto, te paso una parte del código para que veas lo que quiero ahorrar. El form de enero funciona con el campo wkg001, el de febrero sería con wkg002 y así sucesivamente.
                      Cómo tendría que hacerlo con field-symbols ?

                      UN SALUDO Y GRACIAS DE ANTEMANO

                      Ivo



                      FORM fecha_mes .

                      * CLEAR p_mes.

                      * p_mes = ls_caufv-gltrp+4(2).

                      * CASE p_mes.
                      * WHEN c_enero.
                      * PERFORM enero.

                      * WHEN c_febrero.
                      * PERFORM febrero.

                      * WHEN c_marzo.
                      * PERFORM marzo.

                      * WHEN c_abril.
                      * PERFORM abril.

                      * WHEN c_mayo.
                      * PERFORM mayo.

                      * WHEN c_junio.
                      * PERFORM junio.

                      * WHEN c_julio.
                      * PERFORM julio.

                      * WHEN c_agosto.
                      * PERFORM agosto.

                      * WHEN c_septiembre.
                      * PERFORM septiembre.

                      * WHEN c_octubre.
                      * PERFORM octubre.

                      * WHEN c_noviembre.
                      * PERFORM noviembre.

                      * WHEN c_diciembre.
                      * PERFORM diciembre.

                      * WHEN OTHERS.

                      * ENDCASE.


                      *FORM enero .
                      *
                      *
                      ** * HOURS COST:
                      * CLEAR v_hour_cost1.
                      * SELECT SINGLE wkg001 FROM coss INTO v_hour_cost1
                      * WHERE objnr = ls_caufv-objnr
                      * AND vrgng = 'RKL'.
                      *
                      * IF sy-subrc = 0.
                      * CLEAR ls_final1-hrr_cst.
                      * ls_final1-hrr_cst = v_hour_cost1.
                      * ENDIF.
                      *
                      ** *Hours planed cost
                      **A
                      * CLEAR v_hour_pl_cost1.
                      * SELECT SINGLE wkg001 FROM coss INTO v_hour_pl_cost1
                      * WHERE objnr = ls_caufv-objnr
                      * AND vrgng = 'KPPS'.
                      *
                      * IF sy-subrc = 0.
                      * CLEAR ls_final1-hrp_vst.
                      *
                      * ls_final1-hrp_vst = v_hour_pl_cost1.
                      * ENDIF.
                      *
                      *
                      * CLEAR v_ext_serv_cost1.
                      **External service cost c
                      * SELECT SINGLE wkg001 FROM cosp INTO v_ext_serv_cost1
                      * WHERE objnr = ls_caufv-objnr
                      * AND vrgng = 'COIN'.
                      *
                      * IF sy-subrc = 0.
                      * CLEAR ls_final1-exr_cst.
                      *
                      * ls_final1-exr_cst = v_ext_serv_cost1.
                      *
                      * ENDIF.
                      *
                      *
                      **Service planed cost
                      * CLEAR v_serv_pla_cost1.
                      * SELECT SINGLE wkg001 FROM cosp INTO v_serv_pla_cost1
                      * WHERE objnr = ls_caufv-objnr
                      * AND vrgng = 'KPPP'.
                      *
                      * IF sy-subrc = 0.
                      * CLEAR ls_final1-exp_cst.
                      *
                      * ls_final1-exp_cst = v_serv_pla_cost1.
                      *
                      * ENDIF.
                      *
                      *
                      *ENDFORM. " ENERO

                      Comentario

                      • DCErick
                        Moderator
                        • mar
                        • 1090

                        #12
                        Pues creo que sería:
                        Código:
                        CONCATENATE 'wkg0' ls_caufv-gltrp+4(2) INTO lv_campo.
                        
                        * HOURS COST:
                          CLEAR v_hour_cost1.
                          SELECT SINGLE [B](lv_campo)[/B] FROM coss INTO v_hour_cost1
                          WHERE objnr = ls_caufv-objnr
                          AND vrgng = 'RKL'.
                        -------------------
                        ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

                        Comentario

                        • budista1
                          Senior Member
                          • sep
                          • 154

                          #13
                          Casi Me Funciona

                          Hola Eric,

                          muy bien lo del select single, ya veo que compila ,en cambio aquí no compila!
                          que pena! casi lo tenía!!

                          En (lv_campo) = l_wa-wkg016 dice que

                          lv_campo es desconocido.


                          Te paso el código, GRACIAS:


                          DATA lv_campo TYPE STRING.

                          p_mes = l_wa-gstrp+4(2).

                          CONCATENATE 'wkg0' l_wa-gstrp+4(2) INTO lv_campo.


                          UPDATE cosp CLIENT SPECIFIED SET (lv_campo) = l_wa-wkg016 muv001 = 'X' WHERE mandt = '001'

                          Comentario

                          • jtristan
                            Senior Member
                            • oct
                            • 240

                            #14
                            Podrías probar a mandar toda la parte del set en variable. Es decir, no sólo el campo, si no el campo más el valor.

                            CONCATENATE 'wkg0' l_wa-gstrp+4(2) ' = ' l_wa-wkg016 ' muv001 = ''X'' '
                            INTO lv_campo.


                            UPDATE cosp CLIENT SPECIFIED SET (lv_campo) WHERE mandt = '001'

                            Un saludo.

                            Comentario

                            • budista1
                              Senior Member
                              • sep
                              • 154

                              #15
                              merci pero..

                              Hola Tristan y Eric,

                              no acabo de rematar el código.

                              Ahora me salió un dump:

                              A dynamically specified column name is unknown.

                              **************

                              El código es el siguiente:

                              CONCATENATE 'wkg0' l_wa-gstrp+4(2) INTO lv_campo.


                              CONCATENATE 'l_wa_ins_ef-' lv_campo INTO lv_campo2.

                              lv_campo2 = l_wa-wkg016.



                              UPDATE cosp CLIENT SPECIFIED SET (lv_campo2) muv001 = 'X' WHERE mandt = '001' AND lednr = '00' AND objnr = l_wa-objnr
                              AND gjahr = l_wa-budat(4) AND wrttp = '04' AND versn = '000' AND kstar = v_vksta AND vrgng = 'COIN'
                              AND beknz = 'S' AND twaer = 'EUR' AND perbl = '016'.


                              Peta en el Update


                              Un saludo abapero

                              Comentario

                              Trabajando...