Ejemplo Abap - Adobe Forms ************************************************************************ ** NOMBRE : ZCO_FICHA_COSTES ** ** DESCRIPCIÓN : Ficha de costes ** ** AUTOR : Eduardo Campos (Sapas) ** ** FECHA : 09.10.2013 ** ************************************************************************ ** MODIFICACION 1 ** ** Fecha : 30-10-2014 ** ** Id : JMM-301014 ** ** Autor : Josep Martín (SAPAS) ** ** Descripción: INCMCM0005 : ** Los campos "Producto"/"GR/M2(Gramaje)", tienen los siguientes ** problemas en el Listado: ** ** - Campo "Producto": El problema es que ls desc.del producto ** está en "Inglés" y deberá de estar siempre en "Español". ** ** - Campo "GR/M2(Gramaje)": El Problema que el Gramaje que está ** mostrando no es correcto se deberá de verificar de donde ** saca el Gramaje y corregir el Error. ** ************************************************************************ REPORT zco_ficha_costes. *----------------------------------------------------------------------* * DEFINICIÓN DE TABLAS * *----------------------------------------------------------------------* TABLES: ckis. *----------------------------------------------------------------------* * DEFINICIÓN DE INCLUDES * *----------------------------------------------------------------------* *INCLUDE zut01. *----------------------------------------------------------------------* * DEFINICIÓN DE TIPOS * *----------------------------------------------------------------------* TYPES: BEGIN OF tp_tab, kostl TYPE ckis-kostl, matnr TYPE ckis-matnr, meeht TYPE ckis-meeht, menge TYPE ckis-menge, gpreis TYPE ckis-gpreis, peinh TYPE ckis-peinh, pmeht TYPE ckis-pmeht, wertn TYPE ckis-wertn, lstar TYPE ckis-lstar, maktx TYPE makt-maktx, werks TYPE ckis-werks, typps TYPE ckis-typps, arbid TYPE ckis-arbid, END OF tp_tab. TYPES: BEGIN OF tp_lista, kostl TYPE ckis-kostl, Pag. 1 de 33
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Ejemplo Abap - Adobe Forms
************************************************************************** NOMBRE : ZCO_FICHA_COSTES **** DESCRIPCIÓN : Ficha de costes **** AUTOR : Eduardo Campos (Sapas) **** FECHA : 09.10.2013 **************************************************************************** MODIFICACION 1 **** Fecha : 30-10-2014 **** Id : JMM-301014 **** Autor : Josep Martín (SAPAS) **** Descripción: INCMCM0005 :** Los campos "Producto"/"GR/M2(Gramaje)", tienen los siguientes** problemas en el Listado:**** - Campo "Producto": El problema es que ls desc.del producto** está en "Inglés" y deberá de estar siempre en "Español".**** - Campo "GR/M2(Gramaje)": El Problema que el Gramaje que está** mostrando no es correcto se deberá de verificar de donde** saca el Gramaje y corregir el Error.**************************************************************************REPORT zco_ficha_costes.
*----------------------------------------------------------------------** DEFINICIÓN DE TABLAS **----------------------------------------------------------------------*TABLES: ckis.
*----------------------------------------------------------------------** DEFINICIÓN DE INCLUDES **----------------------------------------------------------------------**INCLUDE zut01.
*----------------------------------------------------------------------** DEFINICIÓN DE TIPOS **----------------------------------------------------------------------*TYPES: BEGIN OF tp_tab, kostl TYPE ckis-kostl, matnr TYPE ckis-matnr, meeht TYPE ckis-meeht, menge TYPE ckis-menge, gpreis TYPE ckis-gpreis, peinh TYPE ckis-peinh, pmeht TYPE ckis-pmeht, wertn TYPE ckis-wertn, lstar TYPE ckis-lstar, maktx TYPE makt-maktx, werks TYPE ckis-werks, typps TYPE ckis-typps, arbid TYPE ckis-arbid, END OF tp_tab.
TYPES: BEGIN OF tp_lista, kostl TYPE ckis-kostl, matnr TYPE ckis-matnr, meeht TYPE ckis-meeht, menge TYPE ckis-menge, gpreis TYPE ckis-gpreis, peinh TYPE ckis-peinh, pmeht TYPE ckis-pmeht, wertn TYPE ckis-wertn, baugr TYPE ckis-baugr, ukaln TYPE ckis-ukaln,
Pag. 1 de 29
Ejemplo Abap - Adobe Forms
ukalka TYPE ckis-ukalka, ukadky TYPE ckis-ukadky, lstar TYPE ckis-lstar, werks TYPE ckis-werks, typps TYPE ckis-typps, arbid TYPE ckis-arbid, strat TYPE ckis-strat, END OF tp_lista.
TYPES: BEGIN OF tp_prods, kostl TYPE zed_cecotxt, prod TYPE zpp_product-zproduct, turno TYPE zed_turno, merma TYPE zpp_product-zmerma, tlote TYPE keko-losgr, END OF tp_prods.
TYPES: BEGIN OF tp_recorte, ceco TYPE ckis-kostl, produccion TYPE zco_ficha_coste_bloque02-produccion, mat_prima TYPE zco_ficha_coste_bloque02-mat_prima, tlote TYPE keko-losgr, um TYPE ckis-meeht, END OF tp_recorte.
TYPES: BEGIN OF tp_matnr, matnr TYPE mara-matnr, END OF tp_matnr.
TYPES: tt_tab TYPE TABLE OF tp_tab, tt_lista TYPE TABLE OF tp_lista.
*----------------------------------------------------------------------** DEFINICIÓN DE TABLAS INTERNAS **----------------------------------------------------------------------*DATA: BEGIN OF t_itab OCCURS 0, kostl LIKE ckis-kostl, matnr LIKE ckis-matnr, meeht LIKE ckis-meeht, menge LIKE ckis-menge, gpreis LIKE ckis-gpreis, peinh LIKE ckis-peinh, pmeht LIKE ckis-pmeht, wertn LIKE ckis-wertn, lstar LIKE ckis-lstar, maktx LIKE makt-maktx, werks LIKE ckis-werks, typps LIKE ckis-typps, arbid LIKE ckis-arbid, END OF t_itab.
DATA: gt_lista LIKE t_itab OCCURS 0.
DATA: gt_keko TYPE TABLE OF keko.
DATA: gt_cabecera TYPE zco_tt_ficha_coste_cabecera, gt_bloque01 TYPE zco_tt_ficha_coste_bloque01, gt_bloque02 TYPE zco_tt_ficha_coste_bloque02, gt_bloque02_tmp TYPE zco_tt_ficha_coste_bloque02, gt_prods TYPE TABLE OF tp_prods, gt_recorte TYPE TABLE OF tp_recorte, gt_matnr TYPE TABLE OF mara-matnr, gt_ficha_coste TYPE zco_tt_ficha_coste, gt_explo TYPE TABLE OF tp_lista.
Pag. 2 de 29
Ejemplo Abap - Adobe Forms
*----------------------------------------------------------------------** DEFINICIÓN DE ESTRUCTURAS **----------------------------------------------------------------------*DATA: gs_itab LIKE t_itab, gs_bloque01 TYPE zco_ficha_coste_bloque01, gs_bloque02 TYPE zco_ficha_coste_bloque02, gs_keko TYPE keko, gs_cabecera TYPE zco_ficha_coste_cabecera, gs_prods TYPE tp_prods, gs_recorte TYPE tp_recorte, gs_ficha_coste TYPE zco_st_ficha_coste, gs_explo TYPE tp_lista.
*----------------------------------------------------------------------** DEFINICIÓN DE VARIABLES **----------------------------------------------------------------------*DATA: v_lines TYPE i, v_bklas TYPE bklas, v_ceco TYPE ckis-kostl, txt_ceco TYPE c LENGTH 10, v_tabix TYPE sy-tabix, gv_matnr_exp TYPE mara-matnr, gv_matnr TYPE mara-matnr, txt_matnr TYPE c LENGTH 50, gv_lines TYPE i, gv_porcen TYPE i, gv_porcen_ant TYPE i, gv_tabix TYPE sy-tabix, gv_numlin TYPE i, gv_lote TYPE keko-losgr, gv_meins TYPE mara-meins, gv_pci TYPE zed_pciacum, gv_acum_ant TYPE zed_pciacum, gv_error TYPE c.
*----------------------------------------------------------------------** DEFINICIÓN DE CONSTANTES **----------------------------------------------------------------------*DATA: c_desglose TYPE tdltypnam VALUE '01_DESGLOSE', c_abonorecorte TYPE tdltypnam VALUE '02_ABONORECORTE', c_acumulado TYPE tdltypnam VALUE '03_ACUMULADO', c_recalculomerma TYPE tdltypnam VALUE '04_RECALCULOMERMA', c_totalrecorte TYPE tdltypnam VALUE '99_TOTALRECORTE', c_primerregistro TYPE i VALUE 1.
*----------------------------------------------------------------------** DEFINICIÓN DE RANGES **----------------------------------------------------------------------*RANGES: rg_bklas FOR mbew-bklas, rg_matpri FOR mbew-bklas, rg_matnr FOR mbew-bklas, rg_energia FOR ckis-lstar, rg_valora FOR ckis-lstar, rg_recorte FOR mbew-bklas.
*----------------------------------------------------------------------** DEFINICIÓN DE FIELD SYMBOLS **----------------------------------------------------------------------**field-symbols: <fs_xxxx>. "Descripción
* DATOS PARA IMPRESION FORMULARIO **----------------------------------------------------------------------*DATA: docparams TYPE sfpdocparams.DATA: formoutput TYPE fpformoutput.DATA: outputparams TYPE sfpoutputparams.DATA: gv_fm_name TYPE rs38l_fnam.
*----------------------------------------------------------------------** DEFINICIÓN DE LA PANTALLA DE SELECCIÓN **----------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: so_matnr FOR ckis-matnr OBLIGATORY. "Material
PARAMETERS: p_werks TYPE keko-werks OBLIGATORY, "Centro p_klvar TYPE keko-klvar OBLIGATORY, "Variante cálc.coste p_tvers TYPE keko-tvers OBLIGATORY DEFAULT '1',"Versión CC p_fecha TYPE keko-kadat OBLIGATORY. "Fecha CC
SELECTION-SCREEN END OF BLOCK bl1.
************************************************************************* PROGRAMA PRINCIPAL *************************************************************************
*----------------------------------------------------------------------**---------- AT SELECTION-SCREEN ----------**----------------------------------------------------------------------*AT SELECTION-SCREEN.
* Validación autorización Centro. AUTHORITY-CHECK OBJECT 'ZSD1_03' ID 'WERKS' FIELD p_werks ID 'ACTVT' FIELD '03'.
* Si hay falta, mostramos un error. IF sy-subrc NE 0. MESSAGE s004(zco) WITH p_werks DISPLAY LIKE 'E'. gv_error = 'X'. ELSE. gv_error = ''. ENDIF.
*----------------------------------------------------------------------**---------- START OF SELECTION -----------**----------------------------------------------------------------------*START-OF-SELECTION.
CHECK gv_error = ''.
* Preparamos los rangos que utilizaremos para filtrar. PERFORM preparar_rangos.
* Seleccionamos los materiales. PERFORM seleccion_materiales.
CHECK gt_matnr[] IS NOT INITIAL.
Pag. 4 de 29
Ejemplo Abap - Adobe Forms
* Abrimos el formulario para ir acumulando páginas. PERFORM abrir_formulario.
* Contamos las líneas para mostrar el porcentaje. DESCRIBE TABLE gt_matnr LINES gv_lines.
LOOP AT gt_matnr INTO gv_matnr.
gv_tabix = sy-tabix.
* Limpiamos todos los datos globales. PERFORM limpiar_datos.
* Mostramos el progreso. PERFORM mostrar_progreso.
* Seleccionamos los datos. PERFORM seleccion_datos.
* Si no hay datos del CC para este material, no se añade página. IF gt_keko[] IS NOT INITIAL.
* Tratamos los datos seleccionados. PERFORM tratar_datos.
* Mostramos el formulario. PERFORM generar_pagina_formulario.
ENDIF.
ENDLOOP.
*----------------------------------------------------------------------**---------- END OF SELECTION -----------**----------------------------------------------------------------------*END-OF-SELECTION.
CHECK gv_error = ''.
CHECK gt_matnr[] IS NOT INITIAL.
* Cerramos el formulario. PERFORM cerrar_formulario.
* PERFORM obt_campos_tabla_interna USING repname 'ITAB'.* PERFORM camb_descrip_campos_tabla USING 'MAKTX' 'Denominación'.* PERFORM camb_descrip_campos_tabla USING 'GPREIS' 'Precio unitario'.* PERFORM camb_descrip_campos_tabla USING 'PEINH' 'Cant.Base Prec.un.'.* PERFORM camb_descrip_campos_tabla USING 'WERTN' 'Total EUR'.* PERFORM camb_descrip_campos_tabla USING 'MENGE' 'Unidades necesarias'* PERFORM camb_descrip_campos_tabla USING 'MEEHT' 'UMB'.* PERFORM camb_descrip_campos_tabla USING 'PMEHT' 'UM Precio'.* PERFORM asignar_variante USING repname '/STANDARD'.* PERFORM carac_gen_listado.* PERFORM visualizar_grid TABLES itab USING repname .
************************************************************************************** SUBRUTINAS ********************************************************************************************&---------------------------------------------------------------------**& Form SELECCION_DATOS*&---------------------------------------------------------------------** text
* Seleccionamos los datos de la keko a partir de los campos de selección SELECT * FROM keko INTO TABLE gt_keko WHERE matnr = gv_matnr AND werks = p_werks AND klvar = p_klvar AND tvers = p_tvers AND kadat <= p_fecha AND bidat >= p_fecha.
* Contamos los registros encontrados. DESCRIBE TABLE gt_keko LINES v_lines.
* En caso de que haya más de uno, nos quedaremos sólo con uno.* Según el Status cálculo del coste(FEH_STA) que encontremos, nos* quedaremos con un registro u otro. IF v_lines > 1.
READ TABLE gt_keko INTO gs_keko WITH KEY feh_sta = 'FR'. IF sy-subrc = 0. DELETE gt_keko WHERE feh_sta <> 'FR'. ENDIF.
READ TABLE gt_keko INTO gs_keko WITH KEY feh_sta = 'VO'. IF sy-subrc = 0. DELETE gt_keko WHERE feh_sta <> 'VO'. ENDIF.
READ TABLE gt_keko INTO gs_keko WITH KEY feh_sta = 'KA'. IF sy-subrc = 0. DELETE gt_keko WHERE feh_sta <> 'KA'. ENDIF.
READ TABLE gt_keko INTO gs_keko WITH KEY feh_sta = 'KF'. IF sy-subrc = 0. DELETE gt_keko WHERE feh_sta <> 'KF'. ENDIF.
ELSE.
READ TABLE gt_keko INTO gs_keko INDEX 1.
ENDIF.
CLEAR gv_lote. gv_lote = gs_keko-losgr.
* Si hay cálculo del coste para el material. IF gt_keko[] IS NOT INITIAL.
* Obtenemos la lista de material de este cálculo de coste.* Este form es RECURSIVO, ojo! con las modificaciones dentro de él. PERFORM obtener_lista TABLES gt_lista[] USING gs_keko-kalnr gs_keko-kadky gs_keko-kalka gs_keko-matnr gs_keko-werks gs_keko-losgr
Pag. 6 de 29
Ejemplo Abap - Adobe Forms
gs_keko-losgr 0.
ENDIF.
ENDFORM. " SELECCION_DATOS
*&---------------------------------------------------------------------**& Form OBTENER_LISTA*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->P_GS_KEKO text* -->P_GT_LISTA text*----------------------------------------------------------------------*FORM obtener_lista TABLES pt_tab TYPE tt_tab USING pi_kalnr pi_kadky pi_kalka pi_matnr pi_werks pi_tlote pi_menge pi_peinh.
DATA: ls_lista TYPE tp_lista, lt_lista TYPE tt_lista, ls_tab TYPE tp_tab, l_kostl TYPE ckis-kostl, lt_conjunto TYPE tt_tab, lv_losgr TYPE keko-losgr, lv_kosar TYPE csks-kosar.
CLEAR lt_lista[].
* Obtenemos los datos de la lista de componentes. SELECT * FROM ckis INTO CORRESPONDING FIELDS OF TABLE lt_lista WHERE kalnr = pi_kalnr AND kalka = pi_kalka AND kadky = pi_kadky.
CLEAR l_kostl.
* Cogemos un registro que tenga el Ceco informado. LOOP AT lt_lista INTO ls_lista WHERE kostl <> ''.* Nos guardamos el registro. l_kostl = ls_lista-kostl. EXIT. ENDLOOP.
* Productividades CLEAR: gs_prods.* Seleccionamos la productividad y la merma. SELECT SINGLE zproduct zmerma FROM zpp_product INTO (gs_prods-prod, gs_prods-merma) WHERE matnr = pi_matnr AND werks = pi_werks.
CLEAR lv_kosar.
* Obtenemos el indicador de turno. SELECT SINGLE kosar INTO lv_kosar FROM csks WHERE kostl EQ l_kostl AND datbi GE pi_kadky.
* Modificamos la producción según los criterios siguientes.
Pag. 7 de 29
Ejemplo Abap - Adobe Forms
CASE lv_kosar. WHEN 'Y'. gs_prods-prod = gs_prods-prod / 8. gs_prods-turno = 'LIB/HORA'. WHEN 'F'. gs_prods-prod = gs_prods-prod * 3. gs_prods-turno = 'KG/DIA'. WHEN OTHERS. gs_prods-turno = 'KG/TURNO'. ENDCASE.
* Se dan casos en los que no hay centro de coste porque un material se* realiza en un centro diferente. En ese caso no lo tenemos en cuenta. IF l_kostl IS NOT INITIAL.* Buscamos los materiales que nos servirán para el cálculo del PCI* LOOP AT lt_lista INTO ls_lista WHERE strat = '' AND typps = 'M'.* CLEAR: gs_explo. gs_explo-kostl = l_kostl.
* Guardamos el registro para compararlo con el siguiente. gs_explo-kostl = l_kostl. gs_explo-matnr = pi_matnr. gs_explo-menge = pi_menge. gs_explo-peinh = pi_peinh.
* ENDLOOP. ENDIF.
* Cogemos los conjuntos. LOOP AT lt_lista INTO ls_lista WHERE baugr <> ''.
* Guardamos el material que se explota para llevarnos el último* de ellos. gv_matnr_exp = ls_lista-matnr.
CLEAR lv_losgr.* Obtenemos el tamaño del cálculo del coste para el material explotado SELECT SINGLE losgr FROM keko INTO lv_losgr WHERE kalnr = ls_lista-ukaln AND kadky = ls_lista-ukadky.
* Obtenemos los materiales del conjunto. PERFORM obtener_lista TABLES lt_conjunto[] USING ls_lista-ukaln ls_lista-ukadky ls_lista-ukalka ls_lista-matnr ls_lista-werks lv_losgr
Pag. 8 de 29
Ejemplo Abap - Adobe Forms
ls_lista-menge ls_lista-peinh.
* Guardamos el conjunto en la tabla final. LOOP AT lt_conjunto INTO ls_tab. APPEND ls_tab TO pt_tab. CLEAR ls_tab. ENDLOOP.
ENDLOOP.
* Recorremos la tabla inicial y la guardamos. LOOP AT lt_lista INTO ls_lista WHERE baugr = ''. MOVE-CORRESPONDING ls_lista TO ls_tab. ls_tab-kostl = l_kostl. APPEND ls_tab TO pt_tab. CLEAR ls_tab. ENDLOOP.
* Recorremos la lista obtenida. LOOP AT gt_lista INTO gs_itab.
IF gs_itab-matnr = ''.* Texto de la línea. SELECT SINGLE ktext INTO gs_itab-maktx FROM cslt WHERE spras = 'S' "Mod.JMM-301014 AND kokrs = '001' "Mod.JMM-301014 AND lstar = gs_itab-lstar.
ELSE.* Texto del maestro de materiales. SELECT SINGLE maktx INTO gs_itab-maktx FROM makt WHERE spras = 'S' "Mod.JMM-301014 AND matnr = gs_itab-matnr.
* Obtenemos la denominación del ceco. SELECT SINGLE ktext INTO lv_ktext FROM cskt WHERE spras = 'S' AND kokrs = gs_keko-kokrs AND kostl = gs_itab-kostl AND datbi >= p_fecha.
* Preparamos el texto separador. CONCATENATE '***' txt_ceco '***' INTO gs_bloque01-denominacion.
CONCATENATE gs_bloque01-denominacion lv_ktext INTO gs_bloque01-denominacion SEPARATED BY space.
CLEAR: gs_explo, lv_matnr, lv_maktx.
* Obtenemos el material explotado para este CeCo. READ TABLE gt_explo INTO gs_explo WITH KEY kostl = v_ceco.
Pag. 11 de 29
Ejemplo Abap - Adobe Forms
* Si lo encontramos. IF sy-subrc = 0.
* Buscamos el texto. SELECT SINGLE maktx FROM makt INTO lv_maktx WHERE spras = 'S' "Mod.JMM-301014 AND matnr = gs_explo-matnr.
* Convertimos el formato del material. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING input = gs_explo-matnr IMPORTING output = lv_matnr.
CONCATENATE gs_bloque01-denominacion '-' lv_matnr '-' lv_maktx INTO gs_bloque01-denominacion SEPARATED BY space.
ENDIF.
* Grabamos el registro. APPEND gs_bloque01 TO gt_bloque01.
* Comprobamos si la categoría de valoración del registro corresponde* a la de los acumulados. SELECT SINGLE bklas FROM mbew INTO v_bklas WHERE matnr = gs_itab-matnr AND bwkey = gs_itab-werks AND bklas IN rg_bklas.
* Si está dentro de las categorías de acumulados. IF sy-subrc = 0.
gs_bloque01-umb = '*'.
* Seleccionamos la denominación de la categoría de valoración. SELECT SINGLE bkbez INTO gs_bloque01-denominacion FROM t025t WHERE spras = 'S' "sy-langu - "Mod.JMM-301014 AND bklas = v_bklas.
* Acumulamos los valores de la categoría. COLLECT gs_bloque01 INTO gt_bloque01.
* Si no. ELSE.
gs_bloque01-umb = gs_itab-meeht.
Pag. 12 de 29
Ejemplo Abap - Adobe Forms
* Movemos la denominación del material. gs_bloque01-denominacion = gs_itab-maktx.
* Grabamos el registro. APPEND gs_bloque01 TO gt_bloque01.
* Obtenemos la denominación del ceco. SELECT SINGLE ktext INTO lv_ktext FROM cskt WHERE spras = 'S' AND kokrs = gs_keko-kokrs AND kostl = gs_bloque02-ceco AND datbi >= p_fecha.
CLEAR txt_ceco. WRITE gs_bloque02-ceco TO txt_ceco NO-ZERO NO-GAP. SHIFT txt_ceco LEFT DELETING LEADING space.
* Movemos la denominación del material. CONCATENATE txt_ceco lv_ktext INTO gs_bloque02-ceco SEPARATED BY space.
* Total de ceco gs_bloque02-total_ceco = gs_bloque02-materiales + gs_bloque02-mat_prima + gs_bloque02-energia + gs_bloque02-valor_a.
* Modificamos el registro. APPEND gs_bloque02 TO gt_bloque02.
* Posición de recorte. CLEAR gs_recorte. READ TABLE gt_recorte INTO gs_recorte WITH KEY ceco = txt_ceco.
* Puesto que los cambios de página en este formulario son un tanto* peculiares, se requiere controlar las páginas que se mostrarán. PERFORM preparar_paginas_formulario.
* Variables Locales DATA: lv_gramaje TYPE cabn-atinn, lv_cuobj LIKE inob-cuobj, lv_atflv LIKE ausp-atflv.
*-----------------------------------------------------------* Seleccionamos el número de característica del GRAMAJE.*----------------------------------------------------------- SELECT SINGLE atinn INTO lv_gramaje FROM cabn WHERE atnam = 'GRAMAJE'.
* Seleccionamos el código de objeto del material. CLEAR lv_cuobj.
SELECT SINGLE cuobj INTO lv_cuobj FROM inob WHERE objek = pi_matnr_exp.
* Obtenemos el GRAMAJE CLEAR: lv_atflv.
SELECT SINGLE atflv INTO lv_atflv FROM ausp WHERE objek = lv_cuobj AND atinn = lv_gramaje.
MOVE lv_atflv TO po_m2.
* FIN Modif <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Mod. JMM-301014
"Borrar tras salida (parámetros de impresión)* outputparams-REQDEL = 'X'. "Orden SPOOL nueva (parámetros de impresión) outputparams-reqnew = 'X'. "La orden SPOOL ha concluido outputparams-reqfinal = 'X'.
IF sy-batch = ''. "Salidas inmediatas (parámetros de impresión) outputparams-reqimm = 'X'. ELSE. outputparams-reqimm = ''. outputparams-dest = sy-pdest. ENDIF.
DATA: lv_tabix_bl1 TYPE sy-tabix, lv_tabix_bl2 TYPE sy-tabix, lv_tabix_ficha TYPE sy-tabix, lv_lin_bl1 TYPE sy-tabix, lv_lin_bl2 TYPE sy-tabix, lv_tot_bl1 TYPE sy-tabix, lv_tot_bl2 TYPE sy-tabix, lv_numpag TYPE sy-tabix.
DATA: ls_recalculoant TYPE zco_ficha_coste_bloque02, ls_abonorecorte TYPE zco_ficha_coste_bloque02, ls_desglose TYPE zco_ficha_coste_bloque02, ls_sigdesglose TYPE zco_ficha_coste_bloque02, ls_acumulado TYPE zco_ficha_coste_bloque02, ls_recalculo TYPE zco_ficha_coste_bloque02.
DATA: l_lineaant TYPE i, l_lineapost TYPE i, l_matnr TYPE mara-matnr.
Pag. 23 de 29
Ejemplo Abap - Adobe Forms
* Recorremos las posiciones de Detalle de Máquina a partir de la cual* calcularemos la posición de Acumulados y de Recálculo por merma. LOOP AT gt_bloque02 INTO ls_desglose WHERE tipolinea = c_desglose.
*** Línea de Acumulados **********************************************
* Restamos 1 al número de línea del registro de acumulados. l_lineaant = ls_desglose-numlin - 1.
CLEAR: ls_recalculoant.* Obtenemos la línea del recalculo por merma anterior. READ TABLE gt_bloque02 INTO ls_recalculoant WITH KEY numlin = l_lineaant tipolinea = c_recalculomerma.
CLEAR: ls_abonorecorte.* Obtenemos la línea del abono recorte de la línea actual. READ TABLE gt_bloque02 INTO ls_abonorecorte WITH KEY numlin = ls_desglose-numlin tipolinea = c_abonorecorte.
* Limpiamos la estructura donde crearemos la línea nueva. CLEAR: ls_acumulado.
CLEAR gs_explo.* Obtenemos el material del Ceco. READ TABLE gt_explo INTO gs_explo WITH KEY kostl = ls_acumulado-kostl.* Si existe. IF sy-subrc = 0. CLEAR l_matnr. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING input = gs_explo-matnr IMPORTING output = l_matnr.* Concatenamos el material a la descripción. CONCATENATE ls_acumulado-ceco l_matnr INTO ls_acumulado-ceco SEPARATED BY space. ENDIF.
* Calculamos los valores del registro de la línea. ls_acumulado-mat_prima = ls_desglose-mat_prima + ls_recalculoant-mat_prima + ls_abonorecorte-mat_prima. ls_acumulado-energia = ls_desglose-energia + ls_recalculoant-energia + ls_abonorecorte-energia. ls_acumulado-valor_a = ls_desglose-valor_a + ls_recalculoant-valor_a + ls_abonorecorte-valor_a. ls_acumulado-materiales = ls_desglose-materiales + ls_recalculoant-materiales + ls_abonorecorte-materiales.
* Cálculo de PCI. ls_acumulado-pci_acum = ls_acumulado-mat_prima + ls_acumulado-energia +
Pag. 24 de 29
Ejemplo Abap - Adobe Forms
ls_acumulado-valor_a + ls_acumulado-materiales.
* Esta variable es la que se utiliza para el total PCI de Cabecera.* El último valor que se asigne a esta variable es el que aparece. gv_pci = ls_acumulado-pci_acum.
* Guardamos el registro. APPEND ls_acumulado TO gt_bloque02.
*** Línea de Recálculo por merma *************************************
* Sumamos 1 al número de línea del registro de Desglose. l_lineapost = ls_acumulado-numlin + 1.
CLEAR ls_sigdesglose.* Obtenemos el registro siguiente de Ceco. READ TABLE gt_bloque02 INTO ls_sigdesglose WITH KEY numlin = l_lineapost tipolinea = c_desglose.
* Si lo encontramos. IF sy-subrc = 0.
* Si tiene merma, calculamos los importes. IF ls_sigdesglose-porc_merma <> 0.