Anuncio

Colapsar
No hay anuncio todavía.

Rutina final

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Rutina final

    Buenas,

    tengo que crear una rutina final y no se lo que esta pasando.

    Tengo un ods cuyos campos clave son 0BILL_NUM y 0BILL_ITEM. Como campos de datos tengo 0DELIV_NUMB (Entrega), 0DELIV_ITEM (Posicion de Entrega), ZNUM_TPE (Documento de Transporte), 0NT_WT_KG (Peso neto) y 0SUM_NET_WT (Suma de Pesos Netos).

    Lo que quiero es realizar una rutina final que recorra todos los documentos y almacene en 0SUM_NET_WT la suma de todos los pesos netos (0NT_WT_KG) de los documentos de transporte, ya que en un transporte puede haber varias entregas y necesito el peso total del transporte.

    He programado la rutina como sigue pero no funciona.

    *Seccion declaraciones:
    *$*$ begin of global - insert your declaration only below this line *-*
    DATA PACKAGE_LINE TYPE _ty_s_TG_1.
    DATA AUX_LINE TYPE _ty_s_TG_1.
    DATA Z_SUM_NET_WT TYPE /BI0/OISUM_NET_WT.
    DATA AUX TYPE _ty_t_TG_1.
    *$*$ end of global - insert your declaration only before this line *-*

    [....]

    *Rutina:
    *Clonamos los datos
    AUX[] = RESULT_PACKAGE[].
    *Inicializamos la suma de pesos
    CLEAR Z_SUM_NET_WT.

    *Loop por todas las facturas
    LOOP AT RESULT_PACKAGE INTO PACKAGE_LINE.
    *Loop por cada registro de documento de transporte
    LOOP AT AUX INTO AUX_LINE
    WHERE /BIC/ZNUM_TPTE = PACKAGE_LINE-/BIC/ZNUM_TPTE.
    *Sumamos los pesos netos
    Z_SUM_NET_WT = Z_SUM_NET_WT + AUX_LINE-NT_WT_KG.
    ENDLOOP.
    *Asignamos la suma a su campo correspondiente
    PACKAGE_LINE-SUM_NET_WT = Z_SUM_NET_WT.
    *Modificar la tabla interna con el valor de la Linea
    MODIFY RESULT_PACKAGE FROM PACKAGE_LINE.
    *Reseteamos la variable de suma
    CLEAR Z_SUM_NET_WT.
    ENDLOOP.


    Incluso he probado a hacer
    PACKAGE_LINE-SUM_GRS_WT = 1.
    para obtener la columna de suma rellena con valores fijos (1, en este caso) y tampoco funciona. Es un problema con el loop, pero no acabo de encontrar donde....

    Algun error que no he visto?? Alguna idea??

    Un saludo

  • #2
    Te hago una consulta tu problema es que despues de hacer el loop el campo 0SUM_NET_WT (Suma de Pesos Netos) te queda en cero no? para todo los casos no?

    Si es asi el problema es facil y la rutina estaria bien, si bien habria que hacer algunos retoques para que funcione mas rapido entre loop y loop. Fijate que en la transformation el campo 0SUM_NET_WT este mapeada con un valor inicial, ponele 0 o nada y por default te lo va a poner. Cuando hagas esto vas a ver en el nombre del campo el icono de constante.

    Avisame si es eso y sino lo vemos.

    Saludos
    Sebastian

    Comentario


    • #3
      Hola Scaffarelli,

      tenias razon. En la transformacion no habia 'inicializado' este campo como constante. Suponia que al hacerlo en la rutina funcionaria correctamente.

      Alguna consideracion para optimizar el uso de los loops?? Se aceptan sugerencias

      Muchas gracias

      Un saludo

      Comentario


      • #4
        Buenas,

        Me surge otra pregunta ... y si los pesos vinieran en diferentes unidades?? Existe alguna funcion para sumar independientemente de la unidad y que devuelva en Kg (por ejemplo)??? Como usarla???

        Un saludo

        Comentario


        • #5
          Bueno te voy a contestar las dos preguntas aca.

          Por un lado que bueno que ya funcione asi que sigamos haciendo que esto siga funcionando mucho mejor.

          Con respecto al codigo en general esta bien, pense a simple vista que estabas haciendo otra cosa pero igual modifique algo, aca te lo mando.

          **************************************************
          *Clonamos los datos
          AUX[] = RESULT_PACKAGE[].

          *Loop por todas las facturas
          LOOP AT RESULT_PACKAGE ASSIGNING <RESULT_FIELDS>.

          *Loop por cada registro de documento de transporte
          LOOP AT AUX INTO AUX_LINE
          WHERE /BIC/ZNUM_TPTE = <RESULT_FIELDS>-/BIC/ZNUM_TPTE.

          *Sumamos los pesos netos
          Z_SUM_NET_WT = Z_SUM_NET_WT + AUX_LINE-NT_WT_KG.
          ENDLOOP.

          *Asignamos la suma a su campo correspondiente
          <RESULT_FIELDS>-SUM_NET_WT = Z_SUM_NET_WT.

          *Reseteamos la variable de suma
          CLEAR Z_SUM_NET_WT.
          ENDLOOP.

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

          Fijate que el primer loop se asigna a <RESULT_FIELDS> esta es la forma correcta que se deberia usar en las end routine, siempre y cuando se pueda, obvio. Despues algo que vas a ver y vas a decir que me olvide es que no hago ningun modify... esta bien que no se haga porque al usar el <RESULT_FIELDS> estoy modificando directamente el valor y no es necesario utilizar esta linea, probala.

          Con respecto a las unidades de medida no tenes nada standard para hacerlo. Si son distintas tendras que usar distintos kety figures para cada una en particular.

          Suerte y espero que te sirva
          Sebastian

          Comentario

          Trabajando...
          X