Ejemplo Abap Con Adobe Forms
Ejemplo Abap Con Adobe Forms
Ejemplo Abap Con 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.
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.
*----------------------------------------------------------------------*
* 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.
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
*----------------------------------------------------------------------*
Pag. 3 de 29
Ejemplo Abap - Adobe Forms
* 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.
************************************************************************
* PROGRAMA PRINCIPAL *
************************************************************************
*----------------------------------------------------------------------*
*---------- INITIALIZATION ----------*
*----------------------------------------------------------------------*
INITIALIZATION.
* repname = sy-repid.
*----------------------------------------------------------------------*
*---------- AT SELECTION-SCREEN ----------*
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
*----------------------------------------------------------------------*
*---------- START OF SELECTION -----------*
*----------------------------------------------------------------------*
START-OF-SELECTION.
Pag. 4 de 29
Ejemplo Abap - Adobe Forms
* Abrimos el formulario para ir acumulando páginas.
PERFORM abrir_formulario.
gv_tabix = sy-tabix.
* Mostramos el progreso.
PERFORM mostrar_progreso.
* Mostramos el formulario.
PERFORM generar_pagina_formulario.
ENDIF.
ENDLOOP.
*----------------------------------------------------------------------*
*---------- END OF SELECTION -----------*
*----------------------------------------------------------------------*
END-OF-SELECTION.
* Cerramos el formulario.
PERFORM cerrar_formulario.
************************************************************************
************** SUBRUTINAS *******************
************************************************************************
*&---------------------------------------------------------------------*
*& Form SELECCION_DATOS
*&---------------------------------------------------------------------*
* text
Pag. 5 de 29
Ejemplo Abap - Adobe Forms
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM seleccion_datos .
REFRESH gt_prods.
* 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.
ELSE.
ENDIF.
CLEAR gv_lote.
gv_lote = gs_keko-losgr.
Pag. 6 de 29
Ejemplo Abap - Adobe Forms
gs_keko-losgr 0.
ENDIF.
*&---------------------------------------------------------------------*
*& 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.
CLEAR lt_lista[].
CLEAR l_kostl.
* 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.
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.
gs_prods-kostl = l_kostl.
gs_prods-tlote = pi_tlote.
APPEND gs_prods TO gt_prods.
CLEAR: gs_prods.
IF pi_matnr = gs_explo-matnr.
ELSE.
gs_explo-matnr = pi_matnr.
gs_explo-menge = pi_menge.
gs_explo-peinh = pi_peinh.
ENDIF.
ELSE.
* ENDLOOP.
ENDIF.
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.
Pag. 8 de 29
Ejemplo Abap - Adobe Forms
ls_lista-menge ls_lista-peinh.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form GENERAR_PAGINA_FORMULARIO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM generar_pagina_formulario .
*&---------------------------------------------------------------------*
*& Form PREPARAR_RANGOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM preparar_rangos .
Pag. 9 de 29
Ejemplo Abap - Adobe Forms
CLEAR: rg_bklas, rg_matpri, rg_matnr, rg_energia,
rg_valora, rg_recorte.
REFRESH: rg_bklas, rg_matpri, rg_matnr, rg_energia,
rg_valora, rg_recorte.
CASE ls_datos-concepto.
WHEN 'ACUMULADOS'.
rg_bklas-option = 'EQ'.
rg_bklas-sign = 'I'.
rg_bklas-low = ls_datos-valor.
APPEND rg_bklas.
CLEAR rg_bklas.
WHEN 'MAT_PRIMA'.
rg_matpri-option = 'EQ'.
rg_matpri-sign = 'I'.
rg_matpri-low = ls_datos-valor.
APPEND rg_matpri.
CLEAR rg_matpri.
WHEN 'ENERGIA'.
rg_energia-option = 'EQ'.
rg_energia-sign = 'I'.
rg_energia-low = ls_datos-valor.
APPEND rg_energia.
CLEAR rg_energia.
WHEN 'VALOR_A'.
rg_valora-option = 'EQ'.
rg_valora-sign = 'I'.
rg_valora-low = ls_datos-valor.
APPEND rg_valora.
CLEAR rg_valora.
WHEN 'MATERIALES'.
rg_matnr-option = 'EQ'.
rg_matnr-sign = 'I'.
rg_matnr-low = ls_datos-valor.
APPEND rg_matnr.
CLEAR rg_matnr.
WHEN 'RECORTE'.
rg_recorte-option = 'EQ'.
rg_recorte-sign = 'I'.
rg_recorte-low = ls_datos-valor.
APPEND rg_recorte.
CLEAR rg_recorte.
WHEN OTHERS.
ENDCASE.
ENDSELECT.
*&---------------------------------------------------------------------*
*& Form TRATAR_DATOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM tratar_datos .
Pag. 10 de 29
Ejemplo Abap - Adobe Forms
DATA: lv_ktext TYPE cskt-ktext,
lv_ceco TYPE ckis-kostl,
lv_matnr(12) TYPE c,
lv_maktx TYPE makt-maktx,
ls_bloque02 TYPE zco_ficha_coste_bloque02.
*----------------------------------------------------------------------
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.
ENDIF.
CLEAR: gs_bloque01.
gs_bloque01-kostl = gs_itab-kostl.
* Separador de ceco.
IF v_ceco <> gs_itab-kostl.
v_ceco = gs_itab-kostl.
CLEAR txt_ceco.
WRITE gs_itab-kostl TO txt_ceco NO-ZERO NO-GAP.
CLEAR lv_ktext.
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.
ENDIF.
* Grabamos el registro.
APPEND gs_bloque01 TO gt_bloque01.
ENDIF.
* Campos genéricos.
gs_bloque01-un_necesarias = gs_itab-menge.
gs_bloque01-precio_unit = gs_itab-gpreis.
gs_bloque01-total_eur = gs_itab-wertn.
gs_bloque01-umb = '*'.
* Si no.
ELSE.
gs_bloque01-umb = gs_itab-meeht.
Pag. 12 de 29
Ejemplo Abap - Adobe Forms
* Grabamos el registro.
APPEND gs_bloque01 TO gt_bloque01.
ENDIF.
gs_bloque02-ceco = gs_itab-kostl.
* Clasificamos el importe.
CASE gs_itab-typps.
CLEAR v_bklas.
* Materia prima.
IF v_bklas IN rg_matpri.
gs_bloque02-mat_prima = gs_itab-wertn.
* Materiales.
ELSEIF v_bklas IN rg_matnr.
gs_bloque02-materiales = gs_itab-wertn.
* Abono recorte.
ELSEIF v_bklas IN rg_recorte.
* Si es positivo.
IF gs_itab-menge > 0.
* Se considera materia prima.
gs_bloque02-mat_prima = gs_itab-wertn.
ELSE.
gs_recorte-ceco = gs_bloque02-ceco.
SHIFT gs_recorte-ceco LEFT DELETING LEADING '0'.
gs_recorte-mat_prima = gs_itab-wertn.
gs_recorte-produccion = gs_itab-menge.
gs_recorte-um = gs_itab-meeht.
COLLECT gs_recorte INTO gt_recorte.
* Seguimos con el siguiente registro.
CONTINUE.
ENDIF.
ENDIF.
* Energia.
IF gs_itab-lstar IN rg_energia.
Pag. 13 de 29
Ejemplo Abap - Adobe Forms
gs_bloque02-energia = gs_itab-wertn.
* Valor añadido.
ELSEIF gs_itab-lstar IN rg_valora.
gs_bloque02-valor_a = gs_itab-wertn.
ENDIF.
WHEN OTHERS.
ENDCASE.
* Grabamos el registro.
COLLECT gs_bloque02 INTO gt_bloque02_tmp.
CLEAR gs_itab.
ENDLOOP.
CLEAR gv_numlin.
* Si no.
ELSE.
* Asignamos el ceco de la línea al bloque y a la variable local.
gs_bloque02-kostl = gs_bloque02-ceco.
lv_ceco = gs_bloque02-ceco.
ENDIF.
CLEAR gs_prods.
IF sy-subrc = 0.
gs_bloque02-produccion = gs_prods-prod.
gs_bloque02-turno = gs_prods-turno.
IF gs_prods-tlote <> 0.
* Coste unitario.
gs_bloque02-coste_unitario = gs_bloque02-produccion *
gs_bloque02-valor_a /
Pag. 14 de 29
Ejemplo Abap - Adobe Forms
gs_prods-tlote.
ENDIF.
ENDIF.
CLEAR lv_ktext.
CLEAR txt_ceco.
WRITE gs_bloque02-ceco TO txt_ceco NO-ZERO NO-GAP.
SHIFT txt_ceco LEFT DELETING LEADING 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.
CLEAR gs_bloque02.
gs_bloque02-kostl = lv_ceco.
gs_bloque02-numlin = gv_numlin.
gs_bloque02-tipolinea = c_abonorecorte. "Abono Recorte
gs_bloque02-ceco = 'Abono Recorte'.
gs_bloque02-produccion = gs_recorte-produccion.
gs_bloque02-mat_prima = gs_recorte-mat_prima.
gs_bloque02-total_ceco = gs_recorte-mat_prima.
gs_bloque02-turno = gs_recorte-um.
* Añadimos el registro.
APPEND gs_bloque02 TO gt_bloque02.
ENDLOOP.
Pag. 15 de 29
Ejemplo Abap - Adobe Forms
CLEAR: gs_cabecera, gt_cabecera[].
gs_cabecera-fecha = sy-datum.
gs_cabecera-hora = sy-uzeit.
gs_cabecera-cod_produ = gv_matnr.
gs_cabecera-cod_partida = gv_matnr_exp.
gs_cabecera-variantecc = p_klvar.
gs_cabecera-centro = p_werks.
CLEAR gs_keko.
READ TABLE gt_keko INTO gs_keko INDEX 1.
gs_cabecera-status_cc = gs_keko-feh_sta.
gs_cabecera-tamlote = gv_lote.
gs_cabecera-meins = gv_meins.
gs_cabecera-pci = gv_pci.
*&---------------------------------------------------------------------*
*& Form CALCULAR_RECORTE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM calcular_recorte .
Pag. 16 de 29
Ejemplo Abap - Adobe Forms
* Acumulamos los recortes.
LOOP AT gt_bloque02 INTO gs_bloque02 WHERE tipolinea = c_abonorecorte.
ENDLOOP.
ls_tot-numlin = 99.
ls_tot-tipolinea = c_totalrecorte.
*&---------------------------------------------------------------------*
*& Form CALCULAR_GRAMAJE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GV_MATNR_EXP text
* <--P_GS_CABECERA_GR_M2 text
* <--P_GS_CABECERA_GR_LIB text
*----------------------------------------------------------------------*
FORM calcular_gramaje USING pi_matnr_exp pi_matnr_ini
CHANGING po_m2
po_lib.
ENDIF.
*-----------------------------------------------------------
* Para el resto.
*-----------------------------------------------------------
Pag. 17 de 29
Ejemplo Abap - Adobe Forms
* INCIO Delete <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Mod. JMM-
301014
**
** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
** EXPORTING
** i_matnr = pi_matnr_exp
** i_in_me = 'M2'
** i_out_me = 'G'
** i_menge =1
** IMPORTING
** e_menge = po_m2
** EXCEPTIONS
** error_in_application = 1
** error =2
** OTHERS = 3.
**
** EXIT.
**
* FIN Delete <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Mod. JMM-
301014
* 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'.
* Obtenemos el GRAMAJE
CLEAR: lv_atflv.
Pag. 18 de 29
Ejemplo Abap - Adobe Forms
*&---------------------------------------------------------------------*
*& Form SELECCION_MATERIALES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM seleccion_materiales .
SORT gt_matnr.
DELETE ADJACENT DUPLICATES FROM gt_matnr.
*&---------------------------------------------------------------------*
*& Form ABRIR_FORMULARIO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM abrir_formulario .
IF sy-batch = ''.
"Salidas inmediatas (parámetros de impresión)
outputparams-reqimm = 'X'.
ELSE.
outputparams-reqimm = ''.
outputparams-dest = sy-pdest.
ENDIF.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Pag. 19 de 29
Ejemplo Abap - Adobe Forms
* docparams-langu = 'E'.
* docparams-country = 'US'.
* docparams-fillable = 'X'.
*&---------------------------------------------------------------------*
*& Form CERRAR_FORMULARIO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM cerrar_formulario .
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*&---------------------------------------------------------------------*
*& Form MOSTRAR_PROGRESO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM mostrar_progreso .
CLEAR txt_matnr.
* Confeccionamos texto.
CONCATENATE 'Calculando material:' txt_matnr INTO txt_matnr
SEPARATED BY space.
Pag. 20 de 29
Ejemplo Abap - Adobe Forms
* Calculamos el porcentaje
gv_porcen = gv_tabix * 100 / gv_lines.
gv_porcen_ant = gv_porcen.
* Mostramos texto.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = gv_porcen
text = txt_matnr.
ENDIF.
*&---------------------------------------------------------------------*
*& Form LIMPIAR_DATOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM limpiar_datos .
*&---------------------------------------------------------------------*
*& Form PREPARAR_PAGINAS_FORMULARIO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM preparar_paginas_formulario .
Pag. 21 de 29
Ejemplo Abap - Adobe Forms
* Leemos la cabecera.
READ TABLE gt_cabecera INTO gs_cabecera INDEX 1.
* La grabamos.
APPEND gs_cabecera TO gs_ficha_coste-cabecera.
CLEAR: lv_lin_bl1.
* Contador de líneas.
lv_lin_bl1 = lv_lin_bl1 + 1.
* Grabamos la posición.
APPEND gs_bloque01 TO gs_ficha_coste-bloque01.
* Leemos la cabecera.
READ TABLE gt_cabecera INTO gs_cabecera INDEX 1.
* La grabamos.
APPEND gs_cabecera TO gs_ficha_coste-cabecera.
ENDIF.
ENDLOOP.
CLEAR: gs_ficha_coste.
Pag. 22 de 29
Ejemplo Abap - Adobe Forms
CLEAR: lv_lin_bl2.
* Grabamos la posición.
APPEND gs_bloque02 TO gs_ficha_coste-bloque02.
lv_tabix_ficha = lv_tabix_ficha + 1.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form ACUMULADO_Y_RECALCULO_MERMA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM acumulado_y_recalculo_merma.
Pag. 23 de 29
Ejemplo Abap - Adobe Forms
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.
ls_acumulado-numlin = ls_desglose-numlin.
ls_acumulado-tipolinea = c_acumulado.
ls_acumulado-kostl = ls_desglose-kostl.
ls_acumulado-ceco = '*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.
* 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.
* Guardamos el registro.
APPEND ls_acumulado TO gt_bloque02.
CLEAR: ls_recalculo.
ls_recalculo-numlin = ls_acumulado-numlin.
ls_recalculo-tipolinea = c_recalculomerma.
ls_recalculo-ceco = ''.
ls_recalculo-pci_acum = 0.
ls_recalculo-kostl = ls_acumulado-kostl.
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.
ls_recalculo-mat_prima = ls_acumulado-mat_prima /
( ( 100 - ls_sigdesglose-porc_merma ) /
100 ).
ls_recalculo-energia = ls_acumulado-energia /
( ( 100 - ls_sigdesglose-porc_merma ) /
100 ).
ls_recalculo-valor_a = ls_acumulado-valor_a /
( ( 100 - ls_sigdesglose-porc_merma ) /
100 ).
ls_recalculo-materiales = ls_acumulado-materiales /
( ( 100 - ls_sigdesglose-porc_merma ) /
100 ).
ELSE.
ls_recalculo-mat_prima = ls_acumulado-mat_prima.
ls_recalculo-energia = ls_acumulado-energia.
ls_recalculo-valor_a = ls_acumulado-valor_a.
ls_recalculo-materiales = ls_acumulado-materiales.
ENDIF.
* Acumulado de ceco.
ls_recalculo-total_ceco = ls_recalculo-mat_prima +
ls_recalculo-energia +
ls_recalculo-valor_a +
ls_recalculo-materiales.
Pag. 25 de 29
Ejemplo Abap - Adobe Forms
ENDIF.
ENDLOOP.
Pag. 26 de 29
Ejemplo Abap - Adobe Forms
Pag. 27 de 29
Ejemplo Abap - Adobe Forms
Transacción SFP :
Formulario : ZCO_FICHA_COSTES_2
Pag. 28 de 29
Ejemplo Abap - Adobe Forms
Pag. 29 de 29