*&---------------------------------------------------------------------*
*& Include ZCRMP0004_CLS
*&---------------------------------------------------------------------*
CLASS gcl_main DEFINITION FINAL.
PUBLIC SECTION.
TYPES:
BEGIN OF gty_coep_sum,
aufnr TYPE aufnr,
objnr TYPE j_objnr,
wkgbtr TYPE fins_vkcur12, "@005 wkgxxx,
END OF gty_coep_sum,
BEGIN OF gty_ctaserv,
versn TYPE versn_011,
ergsl TYPE ergsl,
ktopl TYPE ktopl,
zelco TYPE char5,
proce TYPE flag,
begks TYPE kstar,
endks TYPE kstar,
END OF gty_ctaserv,
BEGIN OF gty_coep,
"bukrs TYPE bukrs,
rbukrs TYPE acdoca-rbukrs,
kokrs TYPE kokrs,
aufnr TYPE aufnr,
objnr TYPE j_objnr,
racct TYPE acdoca-racct,
"kstar TYPE kstar,
ktopl TYPE ktopl,
awtyp TYPE awtyp,
wrttp TYPE co_wrttp,
* versn TYPE versn, "@005
* owaer TYPE owaer, "@005
rtcur TYPE acdoca-rtcur,
hsl TYPE acdoca-hsl,
rkcur TYPE acdoca-rkcur, "+
kwaer TYPE kwaer,
wkgbtr TYPE wkgxxx,
zelco TYPE char5,
END OF gty_coep,
*c~rbukrs, c~kokrs, t~aufnr, t~objnr, c~racct,
"CAST( ' ' AS CHAR( 4 ) ) AS ktopl,
* c~awtyp, c~wrttp, c~versn, c~owaer, "@005
"c~awtyp, c~rtcur, "@005
* SUM( c~wogbtr ) AS wogbtr, c~kwaer, "@005 "esta lento
* SUM( c~wogbtr ) AS wogbtr, c~kwaer, "@005
"SUM( c~HSL ) AS hsl, c~rkcur, "@005 aqui creo me webie es
rtcur en la tabla pero aqui tomas de rkcur
* SUM( c~wkgbtr ) AS wkgbtr, "@005
"SUM( c~ksl ) AS wkgbtr, "@005
"CAST( ' ' AS CHAR( 5 ) ) AS zelco
gtyd_coep_sum TYPE STANDARD TABLE OF gty_coep_sum,
gtyd_ctaserv TYPE STANDARD TABLE OF gty_ctaserv,
gtyd_coep TYPE STANDARD TABLE OF gty_coep,
gtyd_repo TYPE STANDARD TABLE OF ztcrm_0001,
gtyd_datum TYPE RANGE OF sy-datum,
gtyd_chang TYPE RANGE OF crms4d_serv_h-changed_at_h.
DATA:
ls_error TYPE flag,
ldt_repo TYPE gtyd_repo.
METHODS:
run,
valid
CHANGING
cs_erro TYPE flag,
get_data
CHANGING
cs_erro TYPE flag
ct_repo TYPE gtyd_repo,
get_data_estand
CHANGING
cs_erro TYPE flag
ct_repo TYPE gtyd_repo,
get_date
CHANGING
cd_datum TYPE gtyd_datum
cd_chang TYPE gtyd_chang,
get_data_tablaz
CHANGING
ct_repo TYPE gtyd_repo,
show_report
CHANGING
cs_erro TYPE flag
ct_repo TYPE ANY TABLE,
set_fieldcat
CHANGING
co_columns TYPE REF TO cl_salv_columns.
ENDCLASS.
CLASS gcl_main IMPLEMENTATION.
METHOD run.
CLEAR: me->ls_error.
REFRESH: me->ldt_repo.
"Validar
me->valid( CHANGING
cs_erro = me->ls_error
).
CHECK me->ls_error = abap_false.
"Obtener registros
CALL METHOD me->get_data(
CHANGING
cs_erro = me->ls_error
ct_repo = me->ldt_repo ).
"Mostrar registros
CALL METHOD me->show_report(
CHANGING
cs_erro = me->ls_error
ct_repo = me->ldt_repo ).
ENDMETHOD.
METHOD valid.
cs_erro = abap_false.
LOOP AT s_vkorg ASSIGNING FIELD-SYMBOL(<lfs_vkorg>).
AUTHORITY-CHECK OBJECT 'ZSD_VKORG'
ID 'VKORG' FIELD <lfs_vkorg>-low
ID 'ACTVT' FIELD '03'.
IF sy-subrc <> 0.
cs_erro = abap_true.
MESSAGE s065 DISPLAY LIKE 'E'
WITH <lfs_vkorg>-low .
ENDIF.
ENDLOOP.
CHECK me->ls_error = abap_false.
"Validamos parametros obligatorios en online
IF p_onlin = abap_true.
IF s_vkorg[] IS INITIAL.
"Org. de Ventas obligatorio
MESSAGE s401 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
IF s_vkgrp[] IS INITIAL.
"Grp. de Ventas obligatorio
MESSAGE s402 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
IF s_prtyp[] IS INITIAL.
"Process Type obligatorio
MESSAGE s403 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
IF s_acind[] IS INITIAL.
"Acounting Indicador obligatorio
MESSAGE s404 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
IF s_statu[] IS INITIAL.
"Status obligatorio
MESSAGE s405 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
IF s_datum[] IS INITIAL.
"Fecha Modificación obligatorio
MESSAGE s406 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
ENDIF.
ENDMETHOD."METHOD valid.
METHOD get_data.
CASE 'X'.
WHEN p_onlin.
CALL METHOD me->get_data_estand(
CHANGING
cs_erro = cs_erro
ct_repo = ct_repo ).
WHEN p_lectu.
CALL METHOD me->get_data_tablaz(
CHANGING
ct_repo = ct_repo ).
ENDCASE.
ENDMETHOD.
METHOD get_data_tablaz.
SELECT FROM ztcrm_0001
FIELDS
mandt, bukrs, kokrs, aufnr, kstar,
ktopl, hkont, waers, posnr, wkgbt,
datco, awtyp, wrttp, versn, messa
INTO TABLE @ct_repo.
ENDMETHOD.
METHOD get_data_estand.
DATA:
lrg_saorg TYPE RANGE OF crmc_sorg_r3org-sales_org,
lrg_sales TYPE RANGE OF crmc_sgrp_r3grp-sales_grp,
lrg_vkgrp TYPE RANGE OF tvgrt-vkgrp,
lrg_bemot TYPE RANGE OF tbmotx-bemot,
lrg_kstar TYPE RANGE OF coep-kstar,
lrg_ksta2 TYPE RANGE OF coep-kstar,
lrg_chang TYPE gtyd_chang,
ldt_coep_sum_tmp TYPE gtyd_coep_sum,
ldt_coep_sum TYPE gtyd_coep_sum,
ldt_ctaserv_tmp TYPE gtyd_ctaserv,
ldt_ctaserv TYPE gtyd_ctaserv,
ldt_coep_tmp TYPE gtyd_coep,
ldt_coep TYPE gtyd_coep,
ls_posnr TYPE posnr.
DATA ldr_aufnr_aux TYPE RANGE OF ztcrm_0001-aufnr.
CALL METHOD me->get_date(
CHANGING
cd_datum = s_datum[]
cd_chang = lrg_chang
).
"1. Validamos
"1.1 Organización de ventas
SELECT FROM crmc_sorg_r3org
FIELDS
'I' AS sign, 'EQ' AS option,
sales_org AS low
WHERE
vkorg IN @s_vkorg
INTO TABLE @lrg_saorg
BYPASSING BUFFER.
IF lrg_saorg[] IS INITIAL.
"No existe Org. Ventas
MESSAGE s077 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
"1.2. Constante ZCRMP0004_BEMOT
SELECT FROM tvarvc AS t
FIELDS
t~sign, t~opti, t~low, t~high
WHERE
t~name = 'ZCRMP0004_BEMOT'
INTO TABLE @lrg_bemot.
IF lrg_bemot[] IS INITIAL.
"No existe constantes ZCRMP0004_BEMOT
MESSAGE s069 DISPLAY LIKE 'E' WITH 'ZCRMP0004_BEMOT'.
cs_erro = abap_true.
EXIT.
ENDIF.
"1.3 Constante ZCRMP0004_VKGRP
SELECT FROM tvarvc AS t
FIELDS
t~sign, t~opti, t~low, t~high
WHERE
t~name = 'ZCRMP0004_VKGRP'
INTO TABLE @lrg_vkgrp.
IF lrg_vkgrp[] IS INITIAL.
"No existe constantes ZCRMP0004_VKGRP
MESSAGE s069 DISPLAY LIKE 'E' WITH 'ZCRMP0004_VKGRP'.
cs_erro = abap_true.
EXIT.
ENDIF.
"1.4. Grupo de venta
SELECT FROM crmc_sgrp_r3grp
FIELDS
'I' AS sign, 'EQ' AS option,
sales_grp AS low
WHERE
vkgrp IN @lrg_vkgrp AND
vkgrp IN @s_vkgrp
INTO TABLE @lrg_sales.
IF lrg_sales[] IS INITIAL.
"No existe Grupo de Ventas
MESSAGE s085 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
"2. Obtener IO de WO validas
SELECT FROM crms4d_serv_h AS h
INNER JOIN crms4d_serv_i AS i ON
h~objtype_h = i~objtype_h AND
h~object_id = i~object_id AND
i~ordered_prod = 'SEGMENT'
INNER JOIN crm_jest AS j ON
j~objnr = h~header_guid AND
j~inact = @space
INNER JOIN iaom_crm_aufk AS f ON
f~object_id = h~object_id
FIELDS DISTINCT
h~objtype_h, h~object_id, h~header_guid, h~sales_org,
h~sales_group, h~process_type, h~changed_at_h, i~ordered_prod,
i~ac_indicator, j~inact, f~aufnr,
"Se obtiene OBJNR OR y AUFNR:
CAST( concat( 'OR', lpad( f~aufnr, 12, '0' ) ) AS CHAR( 22 ) )
AS objnr
WHERE
h~sales_org IN @lrg_saorg AND
h~object_id IN @s_objec AND
h~process_type IN @s_prtyp AND
h~changed_at_h IN @lrg_chang AND
h~sales_group IN @lrg_sales AND
i~ac_indicator IN @s_acind AND
* i~ac_indicator IN @lrg_bemot AND DELETE @002
j~stat IN @s_statu
INTO TABLE @DATA(ldt_serv_h).
IF ldt_serv_h[] IS INITIAL.
"No existe IO relacionadas a los filtros
MESSAGE s078 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
"3. Obtenemos montos de IO para validar IO
SELECT FROM @ldt_serv_h AS h
INNER JOIN jest AS j ON
j~objnr = h~objnr AND
j~stat = 'I0045' AND
j~inact = @space
* {INSERT @005
** {DELETE @005 LEFT OUTER JOIN acdoca AS c ON c~rldnr = '0L'
* AND c~objnr = j~objnr
*coep-kstar = ACDOCA-RACCT
* }INSERT @005
LEFT JOIN acdoca AS c ON
c~RACCT LIKE '71*' AND
c~objnr = j~objnr AND
c~RLDNR = '0L'
* LEFT JOIN coep AS c ON
* c~kstar LIKE '71*' AND
* c~objnr = j~objnr
FIELDS
h~aufnr, c~objnr, SUM( c~KSL ) AS wkgbtr "INSERT @005
WHERE
c~KSL > 0 "INSERT @005
GROUP BY h~aufnr, c~objnr
ORDER BY h~aufnr, c~objnr
INTO TABLE @ldt_coep_sum_tmp.
"4. Validamos que aufnr son validas
LOOP AT ldt_serv_h ASSIGNING FIELD-SYMBOL(<lfs_serv_h>).
READ TABLE ldt_coep_sum_tmp ASSIGNING
FIELD-SYMBOL(<lfs_coep_sum>) WITH KEY
aufnr = <lfs_serv_h>-aufnr.
IF sy-subrc = 0.
IF <lfs_coep_sum>-wkgbtr <> 0.
"Objnr valido para liquidación
APPEND <lfs_coep_sum> TO ldt_coep_sum.
ENDIF.
ELSE.
APPEND INITIAL LINE TO ldt_coep_sum
ASSIGNING FIELD-SYMBOL(<lfs_coep_sum_tmp>).
<lfs_coep_sum_tmp>-aufnr = <lfs_serv_h>-aufnr.
<lfs_coep_sum_tmp>-objnr = <lfs_serv_h>-objnr.
"Objnr valido para liquidación
APPEND <lfs_coep_sum_tmp> TO ldt_coep_sum.
ENDIF.
ENDLOOP.
IF ldt_coep_sum[] IS INITIAL.
"No existe IO para liquidar
MESSAGE s079 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
SORT ldt_coep_sum BY aufnr objnr.
DELETE ADJACENT DUPLICATES FROM ldt_coep_sum
COMPARING aufnr objnr.
"5. Obtenemos constantes
SELECT FROM tvarvc AS t
FIELDS
CAST( substring( t~low , 1,4 ) AS CHAR( 4 ) ) AS versn,
CAST( substring( t~low , 6,2 ) AS CHAR( 10 ) ) AS ergsl,
CAST( ' ' AS CHAR( 4 ) ) AS ktopl,
CAST( substring( t~low , 9,5 ) AS CHAR( 5 ) ) AS zelco,
CAST( substring( t~low ,15,1 ) AS CHAR( 1 ) ) AS proce
WHERE
t~name = 'ZCRMP0004_CTASERV'
INTO TABLE @ldt_ctaserv_tmp.
IF ldt_ctaserv_tmp[] IS INITIAL.
"No existe constantes ZCRMP0004_CTASERV
MESSAGE s069 DISPLAY LIKE 'E' WITH 'ZCRMP0004_CTASERV'.
cs_erro = abap_true.
EXIT.
ENDIF.
"5.1. Obtenemos registros de fagl_011zc
SELECT FROM @ldt_ctaserv_tmp AS t
INNER JOIN fagl_011zc AS f ON
f~versn = t~versn AND
f~ergsl = t~ergsl
FIELDS
f~versn, f~ergsl, f~ktopl, t~zelco,
t~proce, f~vonkt, f~biskt
INTO TABLE @ldt_ctaserv.
IF ldt_ctaserv[] IS INITIAL.
"No existe configuración en FAGL_011ZC
MESSAGE s070 DISPLAY LIKE 'E' WITH 'FAGL_011ZC'.
cs_erro = abap_true.
EXIT.
ENDIF.
FREE: ldt_ctaserv_tmp.
"6. Obtener montos de COEP para cuentas origen
*{I-@004
TYPES ltyr_beknz TYPE RANGE OF coep-beknz.
DATA(lr_beknz) = VALUE ltyr_beknz( FOR lwa_range IN
zcl_constantes=>meth_stat_pub_get_range(
im_name = 'ZCRMP0004_BEKNZ01' )
( sign = lwa_range-sign
option = lwa_range-option
low = CONV #( lwa_range-low )
high = CONV #( lwa_range-high )
) ). "E EQ ['A','']
*}I-@004
SELECT FROM @ldt_coep_sum AS t
INNER JOIN acdoca AS c ON "@005
c~kokrs = '1000' AND
c~objnr = t~objnr AND
* c~wrttp = '04' AND "@005
* c~versn = '000' AND "@005
c~rldnr = '0L' "@005
FIELDS
c~rbukrs, c~kokrs, t~aufnr, t~objnr, c~racct,
CAST( ' ' AS CHAR( 4 ) ) AS ktopl,
* c~awtyp, c~wrttp, c~versn, c~owaer, "@005
c~awtyp, c~rtcur, "@005
* SUM( c~wogbtr ) AS wogbtr, c~kwaer, "@005
* SUM( c~wogbtr ) AS wogbtr, c~kwaer, "@005
SUM( c~HSL ) AS hsl, c~rkcur, "@005
* SUM( c~wkgbtr ) AS wkgbtr, "@005
SUM( c~ksl ) AS wkgbtr, "@005
CAST( ' ' AS CHAR( 5 ) ) AS zelco
* WHERE c~beknz IN @lr_beknz "I-@004 Exluir 'A' "@005
WHERE c~co_beknz IN @lr_beknz
GROUP BY c~rbukrs, c~kokrs, t~aufnr, t~objnr, c~racct, "@005
c~awtyp, c~rtcur, c~rkcur "@005
ORDER BY c~rbukrs, c~kokrs, t~aufnr, t~objnr, c~racct, "@005
c~awtyp, c~rtcur, c~rkcur "@005
INTO TABLE @ldt_coep_tmp.
IF ldt_coep_tmp[] IS INITIAL.
"No existe cuentas origen para liquidar
MESSAGE s071 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
"6.1. Se obtiene solo montos de cuentas validas
REFRESH: lrg_ksta2.
LOOP AT ldt_ctaserv ASSIGNING
FIELD-SYMBOL(<lfs_ctaserv>).
"Procesamos
REFRESH: lrg_kstar[].
lrg_kstar = VALUE #(
( sign = 'I' option = 'BT'
low = <lfs_ctaserv>-begks
high = <lfs_ctaserv>-endks ) ) .
APPEND LINES OF lrg_kstar TO lrg_ksta2.
"Identifica cta deben considerarse
"Si no esta marcado no debe de continuar
"De esta forma no se considerara en filtro
"lrg_kstar ni cuando se filte con lrg_ksta2
IF <lfs_ctaserv>-proce = abap_false.
CONTINUE.
ENDIF.
LOOP AT ldt_coep_tmp ASSIGNING
FIELD-SYMBOL(<lfs_coep_tmp>)
WHERE
kstar IN lrg_kstar[].
<lfs_coep_tmp>-ktopl = <lfs_ctaserv>-ktopl.
<lfs_coep_tmp>-zelco = <lfs_ctaserv>-zelco.
APPEND <lfs_coep_tmp> TO ldt_coep.
ENDLOOP.
ENDLOOP.
LOOP AT ldt_coep_tmp ASSIGNING
<lfs_coep_tmp>
WHERE
kstar NOT IN lrg_ksta2[].
<lfs_coep_tmp>-ktopl = <lfs_ctaserv>-ktopl.
<lfs_coep_tmp>-zelco = 'CTATE'.
APPEND <lfs_coep_tmp> TO ldt_coep.
ENDLOOP.
SORT ldt_coep BY aufnr zelco.
"7. Obtener montos de COBRB para cuentas destino
SELECT FROM @ldt_coep_sum AS t
INNER JOIN cobrb AS c ON
c~objnr = t~objnr AND
"c~konty = 'CTM' AND CTM convertido es SK
c~konty = 'SK' AND
( c~urzuo = '010' OR
c~urzuo = '020' OR
c~urzuo = ' ' )
FIELDS
c~objnr, t~aufnr, c~urzuo, c~konty,
c~hkont, c~prozs
ORDER BY t~aufnr
INTO TABLE @DATA(ldt_cobrb).
IF ldt_cobrb[] IS INITIAL.
"No existe cuentas destino para liquidar
MESSAGE s072 DISPLAY LIKE 'E'.
cs_erro = abap_true.
EXIT.
ENDIF.
"8. Se realiza el pase de datos desde cuenta origen
"a cuenta destino segun los casos:
LOOP AT ldt_cobrb ASSIGNING
FIELD-SYMBOL(<lfs_cobrb>).
"8.1. Se obtiene linea para performance
REFRESH: ldt_coep_tmp[].
CASE <lfs_cobrb>-urzuo.
WHEN '010'.
ldt_coep_tmp = VALUE #(
FOR lwa_coep_tmp IN ldt_coep
WHERE (
aufnr = <lfs_cobrb>-aufnr AND
zelco <> 'CTARE')
( lwa_coep_tmp ) ).
WHEN '020'.
ldt_coep_tmp = VALUE #(
FOR lwa_coep_tmp IN ldt_coep
WHERE (
aufnr = <lfs_cobrb>-aufnr AND
zelco = 'CTARE' )
( lwa_coep_tmp ) ).
WHEN ' '.
ldt_coep_tmp = VALUE #(
FOR lwa_coep_tmp IN ldt_coep
WHERE (
aufnr = <lfs_cobrb>-aufnr )
( lwa_coep_tmp ) ).
ENDCASE.
"8.3. Se vuelve a acumular para realizar calculo y montos.
LOOP AT ldt_coep_tmp ASSIGNING
FIELD-SYMBOL(<lfs_coep>).
APPEND INITIAL LINE TO ct_repo ASSIGNING
FIELD-SYMBOL(<lfs_repo>).
<lfs_repo>-ergsl = VALUE #( ldt_ctaserv[ begks = <lfs_coep>-kstar ]-ergsl
OPTIONAL )."INSERT @001
IF <lfs_repo>-ergsl IS INITIAL.
<lfs_repo>-ergsl = '10'.
ENDIF.
ls_posnr = ls_posnr + 1.
<lfs_repo>-bukrs = <lfs_coep>-bukrs.
<lfs_repo>-kokrs = <lfs_coep>-kokrs.
<lfs_repo>-aufnr = <lfs_coep>-aufnr.
<lfs_repo>-kstar = <lfs_coep>-kstar.
<lfs_repo>-ktopl = <lfs_coep>-ktopl.
<lfs_repo>-hkont = <lfs_cobrb>-hkont.
<lfs_repo>-posnr = ls_posnr .
<lfs_repo>-datco = sy-datum .
<lfs_repo>-awtyp = <lfs_coep>-awtyp.
<lfs_repo>-wrttp = <lfs_coep>-wrttp.
* <lfs_repo>-versn = <lfs_coep>-versn. "@005
<lfs_repo>-waers = <lfs_coep>-kwaer.
IF <lfs_cobrb>-prozs IS INITIAL.
<lfs_repo>-messa = 'Error en porcentaje'.
ELSE.
*Insert @005
DATA: resultado TYPE p DECIMALS 2,
ref_exc TYPE REF TO CX_ROOT,
error TYPE STRING.
TRY.
resultado = ( <lfs_coep>-wkgbtr * <lfs_cobrb>-prozs ) / 100.
<lfs_repo>-wkgbt = resultado.
CATCH cx_sy_zerodivide INTO ref_exc.
error = ref_exc->get_text( ).
MESSAGE error TYPE 'I'.
ENDTRY.
*Insert @005
ENDIF.
APPEND INITIAL LINE TO ct_repo ASSIGNING
FIELD-SYMBOL(<lfs_repo_tmp>).
ls_posnr = ls_posnr + 1.
<lfs_repo_tmp> = <lfs_repo>.
<lfs_repo_tmp>-posnr = ls_posnr .
<lfs_repo_tmp>-waers = <lfs_coep>-rtcur.
IF <lfs_cobrb>-prozs IS INITIAL.
<lfs_repo>-messa = 'Error en porcentaje'.
ELSE.
<lfs_repo_tmp>-wkgbt = ( <lfs_coep>-hsl * <lfs_cobrb>-prozs ) / 100.
"#EC CI_FLDEXT_OK[2610650] "005
ENDIF.
ENDLOOP."LOOP AT ldt_coep_tmp
ENDLOOP."LOOP AT ldt_cobrb
"9. Limpiamos tabla e insertamos registro
COMMIT WORK.
* INSERT @001{
DATA(lr_kstar) = zcl_constantes=>meth_stat_pub_get_range( im_name =
'ZCRMP0004_KSTAR' ).
* Consultamos todas las ordenes que no tengan la clase de costo 7150000000
SELECT FROM ztcrm_0001
FIELDS DISTINCT 'I' AS sign, 'BT' AS option, aufnr AS low, aufnr AS high
WHERE kstar IN @lr_kstar
INTO TABLE @DATA(ldr_aufnr).
* INSERT @001}
* DELETE FROM ztcrm_0001. DELETE @001
* INSERT @001{
IF ldr_aufnr IS INITIAL.
DELETE FROM ztcrm_0001. "#EC CI_NOWHERE
ELSE.
DELETE FROM ztcrm_0001 WHERE aufnr NOT IN ldr_aufnr. "#EC CI_NOFIELD
ENDIF.
* INSERT @001 }
IF sy-subrc = 0.
COMMIT WORK.
MESSAGE s086 WITH 'ZTCRM_0001'.
ENDIF.
"INSERT @001 {
IF ct_repo IS NOT INITIAL.
" DELETE @002 {
* ldr_aufnr_aux = VALUE #( FOR <lfs_repo_aux> IN ct_repo
* sign = if_fsbp_const_range=>sign_include
* option = if_fsbp_const_range=>option_equal
* ( low = <lfs_repo_aux>-aufnr )
* ).
" DELETE @002 }
" INSERT @002 {
ldr_aufnr_aux = VALUE #( FOR GROUPS <lfs_aufnr> OF <lfs_repo_aux> IN ct_repo
GROUP BY <lfs_repo_aux>-aufnr
sign = if_fsbp_const_range=>sign_include
option = if_fsbp_const_range=>option_equal
( low = <lfs_aufnr> )
).
" INSERT @002 }
ENDIF.
DELETE FROM ztcrm_0001 WHERE aufnr IN ldr_aufnr_aux .
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.
"INSERT @001 }
INSERT ztcrm_0001 FROM TABLE ct_repo.
IF sy-subrc = 0.
COMMIT WORK.
MESSAGE i073 WITH 'ZTCRM_0001'.
ENDIF.
ENDMETHOD.
METHOD get_date.
DATA:
ld_datum TYPE datum.
IF cd_datum[] IS INITIAL.
EXIT.
ENDIF.
LOOP AT cd_datum ASSIGNING FIELD-SYMBOL(<lfs_datum>).
APPEND INITIAL LINE TO cd_chang ASSIGNING
FIELD-SYMBOL(<lfs_chang>).
IF p_edia EQ abap_true. " INSERT @002
<lfs_chang>-sign = 'I'.
<lfs_chang>-option = 'BT'.
IF <lfs_datum>-high IS INITIAL.
ld_datum = <lfs_datum>-low.
ELSE.
ld_datum = <lfs_datum>-high.
ENDIF.
CALL FUNCTION 'FRE_CONVERT_DATE_TO_TIMESTMP'
EXPORTING
ip_start_date = <lfs_datum>-low
ip_end_date = ld_datum
IMPORTING
ep_start_date = <lfs_chang>-low
ep_end_date = <lfs_chang>-high
EXCEPTIONS
conversion_error = 1
OTHERS = 2.
" INSERT @002 {
ELSE.
<lfs_chang>-sign = <lfs_datum>-sign.
<lfs_chang>-option = <lfs_datum>-option.
IF <lfs_chang>-option EQ 'BT'.
<lfs_chang>-low = |{ <lfs_datum>-low }050000|.
<lfs_chang>-high = |{ <lfs_datum>-high }045959|.
ELSE.
<lfs_chang>-low = |{ <lfs_datum>-low }050000|.
ENDIF.
ENDIF.
" INSERT @002 }
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD show_report.
DATA:
lo_table TYPE REF TO cl_salv_table,
lo_columns TYPE REF TO cl_salv_columns_table,
lo_not_found TYPE REF TO cx_salv_not_found,
ls_mensaje TYPE string,
* INSERT @001{
lo_column TYPE REF TO cl_salv_column.
DATA: ls_short TYPE scrtext_s,
ls_medium TYPE scrtext_m,
ls_large TYPE scrtext_l.
* INSERT @001}
IF cs_erro = abap_true.
EXIT.
ENDIF.
"1. Validar resultado
DATA(li_count) = lines( ct_repo ).
CASE li_count.
WHEN 0.
MESSAGE s074 DISPLAY LIKE 'E'.
EXIT.
WHEN 1.
MESSAGE s075.
WHEN OTHERS.
MESSAGE s076 WITH li_count.
ENDCASE.
"2. Llamar reporte
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = lo_table
CHANGING
t_table = ct_repo[].
"Seteo de status gui
lo_table->set_screen_status(
pfstatus = '0100'
report = sy-repid
set_functions = lo_table->c_functions_all ).
"Seteo de fieldcat
lo_columns = lo_table->get_columns( ).
* me->set_fieldcat(
* CHANGING
* co_columns = lo_columns ).
* INSERT @001 {
lo_columns->set_optimize('X').
lo_columns->set_column_position( columnname = 'MANDT' position = 1 ).
lo_columns->set_column_position( columnname = 'BUKRS' position = 2 ).
lo_columns->set_column_position( columnname = 'KOKRS' position = 3 ).
lo_columns->set_column_position( columnname = 'AUFNR' position = 4 ).
lo_columns->set_column_position( columnname = 'KSTAR' position = 5 ).
lo_columns->set_column_position( columnname = 'ERGSL' position = 6 ).
lo_columns->set_column_position( columnname = 'KTOPL' position = 7 ).
lo_columns->set_column_position( columnname = 'HKONT' position = 8 ).
lo_columns->set_column_position( columnname = 'WAERS' position = 9 ).
lo_columns->set_column_position( columnname = 'POSNR' position = 10 ).
lo_columns->set_column_position( columnname = 'WKGBT' position = 11 ).
lo_columns->set_column_position( columnname = 'DATCO' position = 12 ).
lo_columns->set_column_position( columnname = 'AWTYP' position = 13 ).
lo_columns->set_column_position( columnname = 'WRTTP' position = 14 ).
lo_columns->set_column_position( columnname = 'VERSN' position = 15 ).
lo_columns->set_column_position( columnname = 'MESSA' position = 16 ).
ls_short = TEXT-t01.
ls_medium = TEXT-t02.
ls_large = TEXT-t02.
lo_column = lo_columns->get_column( 'ERGSL' ).
lo_column->set_short_text( ls_short ).
lo_column->set_medium_text( ls_medium ).
lo_column->set_long_text( ls_large ).
lo_column = lo_columns->get_column( 'MESSA' ).
lo_column->set_visible( if_salv_c_bool_sap=>false ).
* INSERT @001 }
lo_table->display( ).
CATCH cx_salv_not_found INTO lo_not_found.
ls_mensaje = lo_not_found->get_text( ).
MESSAGE s000 WITH ls_mensaje DISPLAY LIKE 'E'.
ENDTRY.
ENDMETHOD.
METHOD set_fieldcat.
DATA:
lo_column TYPE REF TO cl_salv_column_table.
lo_column ?= co_columns->get_column( 'MANDT' ).
lo_column->set_visible( abap_false ).
co_columns->set_optimize( abap_true ).
ENDMETHOD."METHOD set_fieldcat.
ENDCLASS.