ejemplo - abap con adobe forms
Post on 11-Jul-2016
62 Views
Preview:
DESCRIPTION
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
*----------------------------------------------------------------------*
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.
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 *************************************************************************
*----------------------------------------------------------------------**---------- INITIALIZATION ----------**----------------------------------------------------------------------*INITIALIZATION.* repname = sy-repid.
*----------------------------------------------------------------------**---------- 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
Pag. 5 de 29
Ejemplo Abap - Adobe Forms
*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM seleccion_datos .
REFRESH gt_prods.
* 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.
gs_prods-kostl = l_kostl. gs_prods-tlote = pi_tlote. APPEND gs_prods TO gt_prods. CLEAR: gs_prods.
* 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.
IF pi_matnr = gs_explo-matnr. ELSE. gs_explo-matnr = pi_matnr. gs_explo-menge = pi_menge. gs_explo-peinh = pi_peinh. ENDIF.
APPEND gs_explo TO gt_explo.
ELSE.
* 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.
ENDFORM. " OBTENER_LISTA
*&---------------------------------------------------------------------**& Form GENERAR_PAGINA_FORMULARIO*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM generar_pagina_formulario .
CALL FUNCTION gv_fm_name EXPORTING* /1BCDWB/DOCPARAMS =* t_cabecera = gt_cabecera* t_bloque01 = gt_bloque01* t_bloque02 = gt_bloque02 t_ficha = gt_ficha_coste* IMPORTING* /1BCDWB/FORMOUTPUT = EXCEPTIONS usage_error = 1 system_error = 2 internal_error = 3 OTHERS = 4 . IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.
ENDFORM. " GENERAR_PAGINA_FORMULARIO
*&---------------------------------------------------------------------**& Form PREPARAR_RANGOS*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM preparar_rangos .
DATA: ls_datos TYPE zco_fcoste_datos.
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.
* Recorremos la tabla donde tenemos los valores de los rangos. SELECT * FROM zco_fcoste_datos INTO ls_datos.
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.
ENDFORM. " PREPARAR_RANGOS
*&---------------------------------------------------------------------**& 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.
*----------------------------------------------------------------------
CLEAR: gt_bloque01[], gt_bloque02[], gt_cabecera[], v_ceco, gt_bloque02_tmp[], gt_recorte[], lv_ceco.
* 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.
ENDIF.
*** Bloque 1 ***********************************************************
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.
* 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.
ENDIF.
CLEAR: gs_bloque01, v_bklas. gs_bloque01-kostl = gs_itab-kostl.
* Campos genéricos. gs_bloque01-un_necesarias = gs_itab-menge. gs_bloque01-precio_unit = gs_itab-gpreis. gs_bloque01-total_eur = gs_itab-wertn.
* 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.
ENDIF.
*** Bloque 2 ***********************************************************
CLEAR: gs_bloque02, gs_recorte.
gs_bloque02-ceco = gs_itab-kostl.
* Clasificamos el importe. CASE gs_itab-typps.
WHEN 'M' OR 'I' OR 'L' OR 'G' OR 'F'. "Materiales y Mat.Prima
CLEAR v_bklas.
* Obtenemos la categoría de valoración SELECT SINGLE bklas FROM mbew INTO v_bklas WHERE matnr = gs_itab-matnr AND bwkey = gs_itab-werks.
* 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.
WHEN 'E'. "Valor añadido y Energia.
* 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.
*** Desglose y Abono recorte ******************************************* LOOP AT gt_bloque02_tmp INTO gs_bloque02.
* Contador de número de línea. gv_numlin = gv_numlin + 1. gs_bloque02-numlin = gv_numlin. gs_bloque02-tipolinea = c_desglose. "Tipo desglose
* Si el ceco está en blanco. IF gs_bloque02-ceco IS INITIAL.* Movemos el ceco que hemos guardado previamente. gs_bloque02-kostl = lv_ceco.
* 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.
* Recuperamos la productividad y la merma. READ TABLE gt_prods INTO gs_prods WITH KEY kostl = gs_bloque02-ceco.
IF sy-subrc = 0.
gs_bloque02-produccion = gs_prods-prod. gs_bloque02-turno = gs_prods-turno.
* ecampos 27.01.2014 cambio de merma por JCLL. IF gs_prods-merma <> 0. gs_bloque02-porc_merma = gs_prods-merma * -1. ELSE. gs_bloque02-porc_merma = 0. ENDIF.
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.
* 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.
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.
*** Recorte total ****************************************************** PERFORM calcular_recorte.
*** Total con merma **************************************************** PERFORM acumulado_y_recalculo_merma.
* Ordenamos la tabla para que los registros de merma se ordenen. SORT gt_bloque02.
*** Cabecera ***********************************************************
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.
SELECT SINGLE maktx INTO gs_cabecera-denom_produ FROM makt WHERE spras = 'S' "Mod.JMM-301014 AND matnr = gs_cabecera-cod_produ.
gs_cabecera-cod_partida = gv_matnr_exp.
SELECT SINGLE maktx INTO gs_cabecera-denom_partida FROM makt WHERE spras = 'S' "Mod.JMM-301014 AND matnr = gs_cabecera-cod_partida.
gs_cabecera-variantecc = p_klvar. gs_cabecera-centro = p_werks.
SELECT SINGLE name1 INTO gs_cabecera-denom_centro FROM t001w WHERE werks = p_werks.
CLEAR gs_keko. READ TABLE gt_keko INTO gs_keko INDEX 1.
gs_cabecera-status_cc = gs_keko-feh_sta.
PERFORM calcular_gramaje USING gv_matnr_exp gs_keko-matnr CHANGING gs_cabecera-gr_m2 gs_cabecera-gr_lib.
gs_cabecera-tamlote = gv_lote. gs_cabecera-meins = gv_meins. gs_cabecera-pci = gv_pci.
APPEND gs_cabecera TO gt_cabecera.
* 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.
ENDFORM. " TRATAR_DATOS
*&---------------------------------------------------------------------**& Form CALCULAR_RECORTE*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM calcular_recorte .
DATA: ls_tot TYPE zco_ficha_coste_bloque02. CLEAR ls_tot.
ls_tot-ceco = 'Tot. Recorte'.
Pag. 16 de 29
Ejemplo Abap - Adobe Forms
* Acumulamos los recortes. LOOP AT gt_bloque02 INTO gs_bloque02 WHERE tipolinea = c_abonorecorte.
ls_tot-produccion = ls_tot-produccion + gs_bloque02-produccion. ls_tot-mat_prima = ls_tot-mat_prima + gs_bloque02-mat_prima.
ENDLOOP.
ls_tot-numlin = 99.
ls_tot-tipolinea = c_totalrecorte.
APPEND ls_tot TO gt_bloque02. CLEAR gs_bloque02.
ENDFORM. " CALCULAR_RECORTE
*&---------------------------------------------------------------------**& 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.
CLEAR: po_lib, po_m2.
* Obtenemos la unidad de medida del material. SELECT SINGLE meins INTO gv_meins FROM mara WHERE matnr = pi_matnr_ini.
CHECK gv_meins IS NOT INITIAL.
* ecampos 27.01.2014 cambiamos los GR/LIB por LIB/CJT.* Para libritos. IF gv_meins = 'LIB'.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' EXPORTING i_matnr = pi_matnr_ini i_in_me = 'CS' i_out_me = 'LIB' i_menge = 1 IMPORTING e_menge = po_lib EXCEPTIONS error_in_application = 1 error = 2 OTHERS = 3.
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
* INCIO Modif <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 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'.
* 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
ENDFORM. " CALCULAR_GRAMAJE
Pag. 18 de 29
Ejemplo Abap - Adobe Forms
*&---------------------------------------------------------------------**& Form SELECCION_MATERIALES*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM seleccion_materiales .
* Seleccionamos los datos del maestro. SELECT matnr INTO TABLE gt_matnr FROM mara WHERE matnr IN so_matnr.
SORT gt_matnr. DELETE ADJACENT DUPLICATES FROM gt_matnr.
ENDFORM. " SELECCION_MATERIALES
*&---------------------------------------------------------------------**& Form ABRIR_FORMULARIO*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM abrir_formulario .
CLEAR: docparams, formoutput, outputparams, gv_fm_name.
"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.
CALL FUNCTION 'FP_JOB_OPEN' CHANGING ie_outputparams = outputparams EXCEPTIONS cancel = 1 usage_error = 2 system_error = 3 internal_error = 4 OTHERS = 5.
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'.
CALL FUNCTION 'FP_FUNCTION_MODULE_NAME' EXPORTING i_name = 'ZCO_FICHA_COSTES_2' IMPORTING e_funcname = gv_fm_name.
ENDFORM. " ABRIR_FORMULARIO
*&---------------------------------------------------------------------**& Form CERRAR_FORMULARIO*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM cerrar_formulario .
CALL FUNCTION 'FP_JOB_CLOSE'* IMPORTING* E_RESULT = EXCEPTIONS usage_error = 1 system_error = 2 internal_error = 3 OTHERS = 4.
IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.
ENDFORM. " CERRAR_FORMULARIO
*&---------------------------------------------------------------------**& Form MOSTRAR_PROGRESO*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM mostrar_progreso .
* Sólo lo mostramos en proceso online CHECK sy-batch = ''.
CLEAR txt_matnr.
* Convertimos el material con los guiones. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING input = gv_matnr IMPORTING output = 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.
* Solo mostramos el progreso cuando cambia de número. IF gv_porcen <> gv_porcen_ant.
gv_porcen_ant = gv_porcen.
* Mostramos texto. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = gv_porcen text = txt_matnr.
ENDIF.
ENDFORM. " MOSTRAR_PROGRESO
*&---------------------------------------------------------------------**& Form LIMPIAR_DATOS*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM limpiar_datos .
REFRESH: gt_lista, gt_keko, gt_cabecera, gt_bloque01, gt_bloque02, gt_bloque02, gt_bloque02_tmp, gt_prods, gt_recorte, gt_explo.
CLEAR: gt_lista, gs_itab, gs_bloque01, gs_bloque02, gs_keko, gs_cabecera, gs_prods, gs_recorte, gs_explo.
CLEAR: v_lines, v_bklas, v_ceco, txt_ceco, v_tabix, gv_matnr_exp, txt_matnr, gv_porcen.
ENDFORM. " LIMPIAR_DATOS
*&---------------------------------------------------------------------**& Form PREPARAR_PAGINAS_FORMULARIO*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM preparar_paginas_formulario .
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.
CLEAR: gs_ficha_coste, lv_tabix_bl1, lv_tabix_bl2, lv_tot_bl1, lv_tot_bl2. REFRESH: gt_ficha_coste.
DESCRIBE TABLE gt_bloque01 LINES lv_tot_bl1. DESCRIBE TABLE gt_bloque02 LINES lv_tot_bl2.
Pag. 21 de 29
Ejemplo Abap - Adobe Forms
* La página 1 siempre existirá. gs_ficha_coste-numpag = lv_numpag = 1.
* 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.
* Recorremos la tabla del bloque1. LOOP AT gt_bloque01 INTO gs_bloque01.
* Guardamos la posición de la tabla en la que estamos. lv_tabix_bl1 = sy-tabix.
* Contador de líneas. lv_lin_bl1 = lv_lin_bl1 + 1.
* Grabamos la posición. APPEND gs_bloque01 TO gs_ficha_coste-bloque01.
* Si hemos llegado al final de la tabla. IF lv_tabix_bl1 = lv_tot_bl1.
* Grabamos el registro en la tabla. APPEND gs_ficha_coste TO gt_ficha_coste. CLEAR gs_ficha_coste.
* Si llegamos al máximo de líneas por página. ELSEIF lv_lin_bl1 >= 36.
* Grabamos el registro en la tabla. APPEND gs_ficha_coste TO gt_ficha_coste. CLEAR gs_ficha_coste.
* Añadimos una página nueva. lv_numpag = lv_numpag + 1. gs_ficha_coste-numpag = lv_numpag.
* Leemos la cabecera. READ TABLE gt_cabecera INTO gs_cabecera INDEX 1.* La grabamos. APPEND gs_cabecera TO gs_ficha_coste-cabecera.
* Limpiamos el contador de líneas. CLEAR: lv_lin_bl1.
ENDIF.
ENDLOOP.
CLEAR: gs_ficha_coste.
* Recorremos las páginas creadas en el bloque1 para añadir los registros* del bloque2 READ TABLE gt_ficha_coste INTO gs_ficha_coste INDEX 1.
* Guardamos el índice del registro. lv_tabix_ficha = sy-tabix.
* Limpiamos el contador de líneas.
Pag. 22 de 29
Ejemplo Abap - Adobe Forms
CLEAR: lv_lin_bl2.
* Recorremos la tabla del bloque2. LOOP AT gt_bloque02 INTO gs_bloque02.
* Guardamos la posición de la tabla en la que estamos. lv_tabix_bl2 = sy-tabix.
* Aumentamos el contador de líneas. lv_lin_bl2 = lv_lin_bl2 + 1.
* Grabamos la posición. APPEND gs_bloque02 TO gs_ficha_coste-bloque02.
* Si hemos llegado al final de la tabla. IF lv_tabix_bl2 = lv_tot_bl2.
* Modificamos el registro en la tabla. MODIFY gt_ficha_coste FROM gs_ficha_coste INDEX lv_tabix_ficha. CLEAR gs_ficha_coste.
* Si llegamos al máximo de líneas por página. ELSEIF lv_lin_bl2 >= 36.
* Modificamos el registro en la tabla. MODIFY gt_ficha_coste FROM gs_ficha_coste INDEX lv_tabix_ficha. CLEAR gs_ficha_coste.
lv_tabix_ficha = lv_tabix_ficha + 1.
* Leemos el siguiente registro de página. READ TABLE gt_ficha_coste INTO gs_ficha_coste INDEX lv_tabix_ficha.
* Limpiamos el contador de líneas. CLEAR: lv_lin_bl2.
ENDIF.
ENDLOOP.
ENDFORM. " PREPARAR_PAGINAS_FORMULARIO
*&---------------------------------------------------------------------**& Form ACUMULADO_Y_RECALCULO_MERMA*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM acumulado_y_recalculo_merma.
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.
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.
* 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 *************************************
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.
* 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.
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.
* Grabamos el registro de Recálculo por merma. APPEND ls_recalculo TO gt_bloque02.
Pag. 25 de 29
Ejemplo Abap - Adobe Forms
ENDIF.
ENDLOOP.
ENDFORM. " ACUMULADO_Y_RECALCULO_MERMA
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
top related