You are on page 1of 55

*--------------------------------------------------------------------*

* Autor
: Crystalis Consulting Peru
*
* Funcional : Jaime Melgar Zuiga
*
* Fecha
: 10.05.2011
*
* Objetivo : Reporte legal de movimientos de materiales en almacn,*
*
en la forma y formato definidos por el organismo
*
*
gubernamental regulador (SUNAT)
*
* Modificacion : 29082014 Modificacion sociedad 4000
*
* Modificado : 11.12.2014 Lizarzaburu Li Harold Vladimir
*
Etiqueta : @11122014ADD
*
Se agreg campo Cl. Mov. y Doc Referencia al archivo Excel
* Modificado : 22.12.2014 - Lizarzaburu Li Harold Vladimir
*
Etiqueta @HVLL22122014LI
*
Se agrego el N de Serie
*--------------------------------------------------------------------*
REPORT ZFIPEP_LIB07 NO STANDARD PAGE HEADING
LINE-SIZE 217
LINE-COUNT 57(3).
SET MARGIN 6 6.
*&--------------------------------------------------------------------&*
*&
I N F O T I P O S
&*
*&--------------------------------------------------------------------&*
* INFOTYPES: .
*&--------------------------------------------------------------------&*
*&
T A B L A S T R A N S P A R E N T E S
&*
*&--------------------------------------------------------------------&*
TABLES: bkpf,
mbew,
mseg,
t001k,
*
sscrfields,
zfipet_lib06,
zfipet_lib09.
*&--------------------------------------------------------------------&*
*&
T Y P E - P O O L S
&*
*&--------------------------------------------------------------------&*
TYPE-POOLS: slis.
*&--------------------------------------------------------------------&*
*&
T I P O S G L O B A L E S
&*
*&--------------------------------------------------------------------&*
TYPES: BEGIN OF gty_mkpf,
mblnr TYPE mblnr,
mjahr TYPE mjahr,
budat TYPE budat.
TYPES: END OF gty_mkpf.
TYPES: BEGIN OF gty_mbew,
matnr TYPE matnr,
bwkey TYPE werks_d,
bklas TYPE bklas.
TYPES: END OF gty_mbew.
TYPES: BEGIN OF gty_mseg,
mblnr TYPE mblnr,
mjahr TYPE mjahr,
zeile TYPE mblpo,
matnr TYPE matnr,

werks
gjahr
bukrs
belnr
shkzg
dmbtr
bwart
menge
umwrk
bustw
sakto
charg
umcha
awkey

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE

werks_d,
gjahr,
bukrs,
belnr_d,
shkzg,
dmbtr,
bwart,
menge_d,
umwrk,
bustw,
sakto,
umcha,
umcha,
awkey. " Este campo siempre debe estar al final de la tabla

*
budat type budat.
TYPES: END OF gty_mseg.
"add +@ERQ251013
TYPES: BEGIN OF gty_rkseg,
belnr TYPE rbkp-belnr,
gjahr TYPE rbkp-gjahr,
xblnr TYPE rbkp-xblnr,
lfbnr TYPE rseg-lfbnr,
lfgja TYPE rseg-lfgja,
lfpos TYPE rseg-lfpos,
matbf TYPE rseg-matbf,
END OF gty_rkseg,
BEGIN OF gty_vbfa,
vbelv TYPE vbfa-vbelv,
posnv TYPE vbfa-posnv,
vbeln TYPE vbfa-vbeln,
posnn TYPE vbfa-posnn,
matnr TYPE vbfa-matnr,
vbtyp_v TYPE vbfa-vbtyp_v,
mjahr TYPE vbfa-mjahr,
xblnr TYPE vbrk-xblnr,
END OF gty_vbfa,
BEGIN OF gty_mseg_aux,
mblnr TYPE vbfa-vbeln,
mjahr TYPE mjahr,
zeile TYPE vbfa-posnn,
matnr TYPE matnr,
END OF gty_mseg_aux,
BEGIN OF gty_mseg_aux1,
mblnr TYPE mblnr,
mjahr TYPE mjahr,
zeile TYPE mblpo,
matnr TYPE matnr,
werks TYPE werks_d,
gjahr TYPE gjahr,
bukrs TYPE bukrs,
belnr TYPE belnr_d,
shkzg TYPE shkzg,
dmbtr TYPE dmbtr,
bwart TYPE bwart,
menge TYPE menge_d,
umwrk TYPE umwrk,
bustw TYPE bustw,
sakto TYPE sakto,
charg TYPE umcha,

umcha TYPE umcha,


xblnr TYPE xblnr,
awkey TYPE awkey, " Este campo siempre debe estar al final de la tabla
END OF gty_mseg_aux1.
"add +@ERQ251013
TYPES: BEGIN OF gty_bsim,
matnr TYPE matnr,
bwkey TYPE bwkey,
bwtar TYPE bwtar_d,
belnr TYPE belnr_d,
gjahr TYPE gjahr,
buzei TYPE buzei,
dmbtr TYPE dmbtr,
shkzg TYPE shkzg,
budat TYPE budat.
TYPES: END OF gty_bsim.
TYPES: BEGIN OF gty_karsalaux,
dmbtrd TYPE dmbtr,
menged TYPE menge_d.
INCLUDE STRUCTURE zfipet_lib06.
TYPES: END OF gty_karsalaux.
TYPES: BEGIN OF gty_detaux.
INCLUDE STRUCTURE zfipee_lib08.
TYPES: cpudt TYPE cpudt,
cputm TYPE cputm.
TYPES: END OF gty_detaux.
TYPES: BEGIN OF gty_mara,
matnr TYPE matnr,
meins TYPE meins.
*
maktx type maktx.
TYPES: END OF gty_mara.
TYPES: BEGIN OF gty_makt,
matnr TYPE matnr,
maktx TYPE maktx.
TYPES: END OF gty_makt.
TYPES: BEGIN OF gty_bkpf,
bukrs TYPE bukrs,
belnr TYPE belnr_d,
gjahr TYPE gjahr,
awkey TYPE awkey,
budat TYPE budat,
xblnr TYPE xblnr,
cpudt TYPE cpudt,
cputm TYPE cputm.
TYPES: END OF gty_bkpf.
TYPES: BEGIN OF gty_gest,
zundmed TYPE zfipee_lib014-zundmed,
maktx
TYPE zfipee_lib014-maktx,
tipo_mat TYPE zfipee_lib014-tipo_mat,
met_val TYPE zfipee_lib014-met_val,
estab
TYPE zfipee_lib014-estab.
INCLUDE STRUCTURE zfipee_lib08.
TYPES: END OF gty_gest.

TYPES: BEGIN OF gty_excel,


titulo(150)
TYPE c,
matnr(30)
TYPE c,
tipo_mat(16) TYPE c,
maktx(30)
TYPE c,
zundmed(30)
TYPE c,
met_val(30)
TYPE c,
estab(30)
TYPE c,
fecha(10)
TYPE c,
*
ztipo_comp(15) type c,
serie(16)
TYPE c,
mblnr
TYPE mblnr,
mblnrori(10) TYPE c,
ztipo_ope(10) TYPE c,
cant_in(16)
TYPE c,
cosu_in(16)
TYPE c,
cost_in(16)
TYPE c,
cant_out(16) TYPE c,
cosu_out(16) TYPE c,
cost_out(16) TYPE c,
cant_fin(16) TYPE c,
cosu_fin(16) TYPE c,
cost_fin(16) TYPE c,
BWART(10)
TYPE c,
" 11.12.2014 - @11122014ADD
docref(16)
TYPE c.
" 11.12.2014 - @11122014ADD
TYPES: END OF gty_excel.
TYPES: BEGIN OF gty_t001k,
bwkey TYPE werks_d,
bukrs TYPE bukrs,
name1 TYPE name1.
TYPES: END OF gty_t001k.
TYPES: BEGIN OF gty_t001k_ssfo,
perio(10) TYPE c,
ruc
TYPE paval,
razon
TYPE paval,
estab
TYPE char40,
dmini
TYPE dmbtr,
dment
TYPE dmbtr,
dmsal
TYPE dmbtr,
dmfin
TYPE dmbtr,
dmini_soc TYPE dmbtr,
dment_soc TYPE dmbtr,
dmsal_soc TYPE dmbtr,
dmfin_soc TYPE dmbtr,
fecha
TYPE budat,
meini
TYPE menge_d,
meent
TYPE menge_d,
mesal
TYPE menge_d,
mefin
TYPE menge_d,
meini_soc TYPE menge_d,
meent_soc TYPE menge_d,
mesal_soc TYPE menge_d,
mefin_soc TYPE menge_d.
TYPES: END OF gty_t001k_ssfo.
TYPES: BEGIN OF gty_cabec_ssfo,
werks TYPE werks_d,

matnr TYPE matnr,


maktx TYPE maktx,
tpmat TYPE char40,
unmed TYPE char40,
meval TYPE char40,
meins TYPE meins,
meent TYPE menge_d,
dment TYPE dmbtr,
mesal TYPE menge_d,
dmsal TYPE dmbtr,
mefin TYPE menge_d,
dmfin TYPE dmbtr.
TYPES: END OF gty_cabec_ssfo.
TYPES: BEGIN OF gty_detalle_ssfo,
werks TYPE werks_d,
matnr TYPE matnr,
budat TYPE budat,
blart TYPE blart,
xblnr TYPE xblnr,
mblnr TYPE mblnr,
belnr TYPE belnr_d,
bwart TYPE bwart,
meent TYPE menge_d,
cuent TYPE dmbtr,
dment TYPE dmbtr,
mesal TYPE menge_d,
cusal TYPE dmbtr,
dmsal TYPE dmbtr,
mefin TYPE menge_d,
cufin TYPE dmbtr,
dmfin TYPE dmbtr.
TYPES: END OF gty_detalle_ssfo.
TYPES: BEGIN OF gty_kardex_ppp,
kalnr TYPE ckmlhd-kalnr,
matnr TYPE matnr,
bwkey TYPE ckmlhd-bwkey,
bdatj TYPE ckmlcr-bdatj,
poper TYPE ckmlcr-poper,
lbkum TYPE ckmlpp-lbkum,
pvprs TYPE ckmlcr-pvprs,
salkv TYPE ckmlcr-salkv,
umkumo TYPE ckmlpp-umkumo,
abkumo TYPE ckmlpp-abkumo,
zukumo TYPE ckmlpp-zukumo,
END OF gty_kardex_ppp.
*&--------------------------------------------------------------------&*
*&
T I P O S
T A B L A S G L O B A L E S
&*
*&--------------------------------------------------------------------&*
*TYPES: gtyd_xxxxx TYPE STANDARD TABLE OF gty_xxxx. "Standard
*TYPES: gtys_xxxxx TYPE SORTED TABLE OF gty_xxxx. "Sorted
*TYPES: gtyh_xxxxx TYPE HASHED TABLE OF gty_xxxx. "Hashed
*&--------------------------------------------------------------------&*
*& D E C L A R A C I O N Y D E F I N I C I O N C L A S E S
&*
*&--------------------------------------------------------------------&*
* CLASS gcl_xxxx DEFINITION.
*
PUBLIC SECTION.

*
*
METHODS:
*
*
PRIVATE SECTION.
*
* ENDCLASS.

"gcl_xxxxx DEFINITION

*&--------------------------------------------------------------------&*
*&
C O N T R O L E S
D Y N P R O
&*
*&--------------------------------------------------------------------&*
*CONTROLS TC_XXXXX TYPE TABLEVIEW USING SCREEN 100.
*CONTROLS SC_XXXXX TYPE TABSTRIP.
*&--------------------------------------------------------------------&*
*&
C O N S T A N T E S
&*
*&--------------------------------------------------------------------&*
* CONSTANTS: gc_xx
TYPE X
VALUE 'XXXX',
*&--------------------------------------------------------------------&*
*&
T A B L A S I N T E R N A S
G L O B A L E S
&*
*&--------------------------------------------------------------------&*
DATA: gtd_mkpf
TYPE STANDARD TABLE OF gty_mkpf,
gtd_mkpf_aux
TYPE STANDARD TABLE OF gty_mkpf,
gtd_mseg
TYPE STANDARD TABLE OF gty_mseg,
gtd_mseg1
TYPE STANDARD TABLE OF gty_mseg,
gtd_mseg1_aux
TYPE SORTED TABLE OF gty_mseg WITH NON-UNIQUE KEY awkey,
gtd_mseg1_aux1 TYPE STANDARD TABLE OF gty_mseg_aux1,
gtd_mseg2
TYPE STANDARD TABLE OF gty_mseg,
gtd_mseg3
TYPE STANDARD TABLE OF gty_mseg,
gtd_msegaux
TYPE STANDARD TABLE OF gty_mseg,
gtd_bsim
TYPE STANDARD TABLE OF gty_bsim,
gtd_bsim_aux
TYPE SORTED TABLE OF gty_bsim WITH NON-UNIQUE KEY bwkey m
atnr,
gtd_karsalaux
TYPE STANDARD TABLE OF gty_karsalaux,
gtd_mbew
TYPE STANDARD TABLE OF gty_mbew,
gtd_mbew_aux
TYPE STANDARD TABLE OF gty_mbew,
gtd_mara
TYPE STANDARD TABLE OF gty_mara,
gtd_bkpf1
TYPE STANDARD TABLE OF gty_bkpf,
gtd_bkpf2
TYPE STANDARD TABLE OF gty_bkpf,
gtd_bkpf2_aux
TYPE SORTED TABLE OF gty_bkpf WITH NON-UNIQUE KEY bukrs b
elnr gjahr,
gtd_makt
TYPE STANDARD TABLE OF gty_makt,
gtd_gest
TYPE STANDARD TABLE OF gty_gest,
gtd_excel
TYPE STANDARD TABLE OF gty_excel,
gtd_t001k
TYPE STANDARD TABLE OF gty_t001k,
gtd_detalle
TYPE STANDARD TABLE OF gty_detaux,
gtd_det_aux
TYPE STANDARD TABLE OF gty_detaux,
gtd_cabec_ssfo TYPE STANDARD TABLE OF gty_cabec_ssfo,
gtd_detalle_ssfo TYPE STANDARD TABLE OF gty_detalle_ssfo.
DATA: gtd_karsal
gtd_tipmat
gtd_um
gtd_tipope
gtd_cabec
gtd_cabaux
gtd_ajuste
gtd_ajustecab
gt_rkseg_mseg
gt_rkseg

LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
TYPE
TYPE

STANDARD TABLE OF zfipet_lib06,


STANDARD TABLE OF zfipet_lib08,
STANDARD TABLE OF zfipet_lib07,
STANDARD TABLE OF zfipet_lib09,
STANDARD TABLE OF zfipee_lib014,
STANDARD TABLE OF zfipee_lib014,
STANDARD TABLE OF zfipet_lib10,
STANDARD TABLE OF zfipet_lib10,
STANDARD TABLE OF gty_rkseg, "add +@ERQ251013
SORTED TABLE OF gty_rkseg WITH NON-UNIQUE KEY lfbnr

lfgja lfpos matbf, "add +@ERQ251013


gt_rkseg_aux1
TYPE STANDARD TABLE OF gty_rkseg, "add +@ERQ251013
gt_rkseg_aux
TYPE STANDARD TABLE OF gty_rkseg, "add +@ERQ251013
gt_mseg_aux
TYPE STANDARD TABLE OF gty_mseg_aux, "add +@ERQ251013
gt_flujo
TYPE tdt_docflow, "add +@ERQ251013
gt_facturas1
TYPE SORTED TABLE OF gty_vbfa WITH NON-UNIQUE KEY vbeln,
"add +@ERQ251013
gt_facturas
TYPE SORTED TABLE OF gty_vbfa WITH NON-UNIQUE KEY vbelv p
osnv, "add +@ERQ251013
gt_facturas_aux TYPE STANDARD TABLE OF gty_vbfa, "add +@ERQ251013
gt_vbfa
TYPE STANDARD TABLE OF gty_vbfa, "add +@ERQ251013
gt_vbfa_aux
TYPE STANDARD TABLE OF gty_vbfa. "add +@ERQ251013
DATA: gts_karsal

LIKE SORTED TABLE OF zfipet_lib06


WITH NON-UNIQUE KEY werks matnr.

DATA: gtd_list_top_of_page
gtd_fieldcat
gtd_events
gtd_layout
gtd_grid_settings
gtd_event_exit
gtd_variante

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE

slis_t_listheader,
slis_t_fieldcat_alv,
slis_t_event,
slis_layout_alv,
lvc_s_glay,
slis_t_event_exit,
disvariant.

DATA: gtd_kardex_ppp TYPE SORTED TABLE OF gty_kardex_ppp


WITH NON-UNIQUE KEY matnr bwkey.
*&--------------------------------------------------------------------&*
*&
F I E L D - S Y M B O L S
&*
*&--------------------------------------------------------------------&*
FIELD-SYMBOLS: <fs_mkpf>
TYPE gty_mkpf,
<fs_mseg>
TYPE gty_mseg,
<fs_mseg2>
TYPE gty_mseg,
<fs_bsim>
TYPE gty_bsim,
<fs_mbew>
TYPE gty_mbew,
<fs_bkpf>
TYPE gty_bkpf,
<fs_karsal> LIKE zfipet_lib06,
<fs_t001k>
TYPE gty_t001k,
<fs_rkseg>
TYPE gty_rkseg,
<fs_detalle> LIKE gtd_detalle,
<fs_mseg3>
LIKE LINE OF gtd_mseg1,
<fs_facturas> TYPE gty_vbfa.
*&--------------------------------------------------------------------&*
*&
R A N G O S G L O B A L E S
&*
*&--------------------------------------------------------------------&*
DATA: gr_budat
TYPE RANGE OF budat.
*&--------------------------------------------------------------------&*
*&
V A R I A B L E S G L O B A L E S
&*
*&--------------------------------------------------------------------&*
DATA: gs_karsalaux TYPE gty_karsalaux,
gs_karsal
LIKE zfipet_lib06,
gs_fcat
LIKE LINE OF gtd_fieldcat,
gs_tipmat
LIKE zfipet_lib08,
gs_mara
TYPE gty_mara,
gs_um
LIKE zfipet_lib07,
gs_tipope
LIKE zfipet_lib09,
gs_makt
TYPE gty_makt,
gs_cabec
LIKE zfipee_lib014,
gs_detalle TYPE gty_detaux,

gs_detaux
TYPE gty_detaux,
gs_gest
TYPE gty_gest,
gs_budat
LIKE LINE OF gr_budat,
gs_excel
LIKE LINE OF gtd_excel,
gs_t001k
TYPE gty_t001k,
gs_ajuste
LIKE LINE OF gtd_ajuste,
gs_ajuste1 LIKE LINE OF gtd_ajuste,
gs_t001k_ssfo TYPE gty_t001k_ssfo,
gs_cabec_ssfo TYPE gty_cabec_ssfo,
gs_detalle_ssfo TYPE gty_detalle_ssfo,
gs_rkseg
TYPE gty_rkseg, "add +@ERQ251013
gs_mseg
TYPE gty_mseg, "add +@ERQ251013
gs_mseg_aux TYPE gty_mseg_aux, "add +@ERQ251013
gs_mseg_aux1 TYPE gty_mseg_aux1, "add +@ERQ251013
gs_facturas TYPE gty_vbfa, "add +@ERQ251013
gs_vbfa
TYPE gty_vbfa, "add +@ERQ251013
gs_vbfa_aux TYPE gty_vbfa, "add +@ERQ251013
gs_flujo
LIKE LINE OF gt_flujo. "add +@ERQ251013
DATA: gv_fi
TYPE budat,
gv_ff
TYPE budat,
gv_bwkey TYPE bwkey,
gv_bukrs TYPE bukrs,
gv_name TYPE name1,
gv_ind
TYPE i,
N_POS
TYPE SY-INDEX,
gv_indaux TYPE i,
gv_cant TYPE i,
gv_matnr TYPE matnr,
gv_pagno(7) TYPE c,
gv_txtun(40) TYPE c,
gv_pagno_ssfo TYPE tdsfjpage,
gv_vbelv TYPE char10.. "add +@ERQ251013
DATA: gv_repid LIKE sy-repid,
gv_ruc
LIKE t001z-paval,
gv_razon TYPE butxt.
*/ ADD SERIE - @HVLL22122014LI
DATA: W_XBLPF LIKE BKPF-XBLNR,
W_REFE LIKE VBRK-XBLNR,
W_VBELN LIKE VBFA-VBELN,
w_pos LIKE sy-tabix,
W_XBLNR LIKE MKPF-XBLNR.
DATA: gv_cantin_mat
TYPE menge_d, "Suma Cantidad Entrada x Material
gv_costin_mat
TYPE dmbtr, "Suma Costo Entrada x Material
gv_cantout_mat
TYPE menge_d, "Suma Cantidad Salida x Material
gv_costout_mat
TYPE dmbtr, "Suma Costo Salida x Material
gv_cantfin_mat
TYPE menge_d, "Suma Cantidad Final x Material
gv_costfin_mat
TYPE dmbtr, "Suma Saldo Final x Material
gv_costsalini_cen TYPE dmbtr, "Suma Saldo Inicial x Centro
gv_costin_cen
TYPE dmbtr, "Suma Costo Entrada x Centro
gv_costout_cen
TYPE dmbtr, "Suma Costo Salida x Centro
gv_costfin_cen
TYPE dmbtr, "Suma Saldo Final x Centro
gv_cantsalini_cen TYPE dmbtr, "Suma Saldo Inicial Cantidad x Centro
gv_cantin_cen
TYPE dmbtr, "Suma Cantidad Entrada x Centro
gv_cantout_cen
TYPE dmbtr, "Suma Cantidad Salida x Centro
gv_cantfin_cen
TYPE dmbtr, "Suma Saldo Final Cantidad x Centro
gv_acum_cantfin_mat TYPE menge_d, "Acumulador Cantidad Final x Material

gv_acum_cosufin_mat TYPE dmbtr,

"Costo Unitario Final x Material "Acumul

ado"
gv_acum_costfin_mat TYPE dmbtr, "Acumulador Costo Final x Material
gv_costsalini_soc TYPE dmbtr, "Suma Saldo Inicial x Sociedad
gv_costin_soc
TYPE dmbtr, "Suma Costo Entrada x Sociedad
gv_costout_soc
TYPE dmbtr, "Suma Costo Salida x Sociedad
gv_costfin_soc
TYPE dmbtr, "Suma Saldo Final x Sociedad
gv_cantsalini_soc TYPE dmbtr, "Suma Saldo Inicial Cantidad x Sociedad
gv_cantin_soc
TYPE dmbtr, "Suma Cantidad Entrada x Sociedad
gv_cantout_soc
TYPE dmbtr, "Suma Cantidad Salida x Sociedad
gv_cantfin_soc
TYPE dmbtr, "Suma Saldo Final Cantidad x Sociedad
gv_monto(16)
TYPE c,
gv_umwrk
TYPE MSEG-umwrk,
gv_check.
DATA: gv_formname
gv_fm_name

TYPE tdsfname,
TYPE rs38l_fnam.

*&--------------------------------------------------------------------&*
*&
O B J E T O S G L O B A L E S
&*
*&--------------------------------------------------------------------&*
*DATA: go_XXX TYPE REF TO ....
*&--------------------------------------------------------------------&*
*&
M A C R O S
&*
*&--------------------------------------------------------------------&*
*DEFINE macro1.
*END-OF-DEFINITION.
*--------------------------------------------------------------------* SELECTION-SCREEN
*--------------------------------------------------------------------SELECTION-SCREEN: BEGIN OF BLOCK 1 WITH FRAME TITLE text-000.
PARAMETERS:
p_bukrs LIKE mseg-bukrs OBLIGATORY.
SELECT-OPTIONS: p_werks FOR mseg-werks OBLIGATORY.
PARAMETERS:
p_gjahr LIKE mbew-lfgja OBLIGATORY,
p_monat LIKE mbew-lfmon OBLIGATORY.
SELECT-OPTIONS: p_matnr FOR mbew-matnr,
p_bklas FOR mbew-bklas.
PARAMETERS:
p_fecha LIKE mkpf-bldat DEFAULT sy-datum.
SELECTION-SCREEN: END OF BLOCK 1.
SELECTION-SCREEN: BEGIN OF BLOCK 2 WITH FRAME TITLE text-001.
SELECT-OPTIONS: p_blart FOR bkpf-blart OBLIGATORY DEFAULT 'W1' TO 'WZ'.
SELECTION-SCREEN: END OF BLOCK 2.
SELECTION-SCREEN: BEGIN OF BLOCK 3 WITH FRAME TITLE text-002.
PARAMETERS:
p_salin RADIOBUTTON GROUP 1 USER-COMMAND uc1,
p_karva RADIOBUTTON GROUP 1 DEFAULT 'X', "p_karmo
p_karppp RADIOBUTTON GROUP 1 ,
p_karun RADIOBUTTON GROUP 1. "p_valor as checkbox default 'X' mo
dif id kdx.
SELECTION-SCREEN: END OF BLOCK 3.
SELECTION-SCREEN: BEGIN OF BLOCK 6 WITH FRAME TITLE text-005.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS:
p_bsim RADIOBUTTON GROUP 3 MODIF ID sal DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(30) text-031 MODIF ID sal.
SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN: BEGIN OF LINE.


PARAMETERS:
p_mseg RADIOBUTTON GROUP 3 MODIF ID sal.
SELECTION-SCREEN COMMENT 3(30) text-032 MODIF ID sal.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: END OF BLOCK 6.
SELECTION-SCREEN: BEGIN OF BLOCK 4 WITH FRAME TITLE text-003.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS:
p_repor RADIOBUTTON GROUP 2 MODIF ID kdx.
"Reporte
SELECTION-SCREEN COMMENT 3(20) text-025 MODIF ID kdx.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS:
p_gesti RADIOBUTTON GROUP 2 MODIF ID kdx.
"Gestion A
LV
SELECTION-SCREEN COMMENT 3(20) text-026 MODIF ID kdx.
SELECTION-SCREEN: END OF LINE.
* parameters:
p_repor radiobutton group 2 default 'X' modif id kdx, "Report
e
*
p_gesti radiobutton group 2 modif id kdx.
"Gestio
n ALV
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS:
p_impre RADIOBUTTON GROUP 2 MODIF ID kdx.
"Impresora
Smartform
SELECTION-SCREEN: COMMENT 3(20) text-020 MODIF ID kdx.
SELECTION-SCREEN: COMMENT 30(17) text-021 MODIF ID kdx.
PARAMETERS:
p_print LIKE ssfpp-tddest MODIF ID kdx DEFAULT 'LOCL'.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS:
p_excel RADIOBUTTON GROUP 2 MODIF ID kdx.
"Excel
SELECTION-SCREEN COMMENT 3(20) text-022 MODIF ID kdx.
SELECTION-SCREEN COMMENT 30(17) text-023 MODIF ID kdx.
PARAMETERS:
p_file LIKE rlgrap-filename MODIF ID kdx OBLIGATORY DEFAULT 'C:\
'.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN END OF BLOCK 4.
SELECTION-SCREEN: BEGIN OF BLOCK 5 WITH FRAME TITLE text-004.
SELECTION-SCREEN: SKIP.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: PUSHBUTTON 15(20) b_unmed USER-COMMAND uc2.
SELECTION-SCREEN: PUSHBUTTON 36(20) b_timat USER-COMMAND uc3.
SELECTION-SCREEN: PUSHBUTTON 57(20) b_tiope USER-COMMAND uc4.
SELECTION-SCREEN: PUSHBUTTON 78(20) b_ajust USER-COMMAND uc5.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN END OF BLOCK 5.
*---------------------------------------------------------------------*
* AT SELECTION-SCREEN
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM buscar_archivo USING p_file.
AT SELECTION-SCREEN OUTPUT.
IF p_karva = 'X' OR p_karppp EQ 'X'.
LOOP AT SCREEN.
CASE screen-group1.
WHEN 'KDX'.
screen-active = '1'.
MODIFY SCREEN.
WHEN 'SAL'.

screen-active =
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
ELSEIF p_karun = 'X'.
LOOP AT SCREEN.
CASE screen-group1.
WHEN 'KDX'.
screen-active =
MODIFY SCREEN.
WHEN 'SAL'.
screen-active =
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
ELSEIF p_salin = 'X'.
LOOP AT SCREEN.
CASE screen-group1.
WHEN 'KDX'.
screen-active =
MODIFY SCREEN.
WHEN 'SAL'.
screen-active =
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
ENDIF.

'0'.

'1'.
'0'.

'0'.
'1'.

AT SELECTION-SCREEN.
* AUTHORITY-CHECK OBJECT 'S_TCODE'
*
ID 'TCD'
*
FIELD sy-tcode.
IF sy-subrc NE 0.
MESSAGE ID 'ZPEFI' TYPE 'E' NUMBER '001' DISPLAY LIKE 'I'.
ENDIF.
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS' FIELD p_bukrs
ID 'ACTVT' FIELD '03'.
IF sy-subrc NE 0.
MESSAGE ID 'ZPEFI' TYPE 'E' NUMBER '001' DISPLAY LIKE 'I'.
ENDIF.
CASE sy-ucomm.
WHEN 'UC2'.
CALL TRANSACTION
WHEN 'UC3'.
CALL TRANSACTION
WHEN 'UC4'.
CALL TRANSACTION
WHEN 'UC5'.
CALL TRANSACTION
WHEN OTHERS.
ENDCASE.

'ZFIPE_LIB07A'

AND SKIP FIRST SCREEN.

'ZFIPE_LIB07B' AND SKIP FIRST SCREEN.


'ZFIPE_LIB07C' AND SKIP FIRST SCREEN.
'ZFIPE_LIB07D' AND SKIP FIRST SCREEN.

*** GONCACR1 - 24/11/2011 - Begin


IF NOT p_excel IS INITIAL.

DATA: lv_filename TYPE pcfile-path,


lv_path TYPE pcfile-path,
lv_name TYPE string,
lv_ext TYPE string.
CLEAR: lv_filename, lv_path, lv_name, lv_ext.
lv_filename = p_file.

*
*
*

CALL FUNCTION 'PC_SPLIT_COMPLETE_FILENAME'


EXPORTING
complete_filename = lv_filename
CHECK_DOS_FORMAT =
IMPORTING
DRIVE
=
extension
= lv_ext
name
= lv_name
NAME_WITH_EXT
=
path
= lv_path
EXCEPTIONS
invalid_drive
= 1
invalid_extension = 2
invalid_name
= 3
invalid_path
= 4
OTHERS
= 5.

*** verify Path


IF lv_path IS INITIAL.
MESSAGE ID 'ZPEFI' TYPE 'E' NUMBER '006' DISPLAY LIKE 'I'.
ENDIF.
*** Verify File name
IF lv_name IS INITIAL.
MESSAGE ID 'ZPEFI' TYPE 'E' NUMBER '011' DISPLAY LIKE 'I'.
ENDIF.
*** Verify File extension
IF lv_ext IS INITIAL.
MESSAGE ID 'ZPEFI' TYPE 'E' NUMBER '012' DISPLAY LIKE 'I'.
ELSE.
TRANSLATE lv_ext TO UPPER CASE.
IF lv_ext(3) <> 'XLS'.
MESSAGE ID 'ZPEFI' TYPE 'E' NUMBER '012' DISPLAY LIKE 'I'.
ENDIF.
ENDIF.
ENDIF.
*** GONCACR1 - 24/11/2011 - End
*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
gv_repid = sy-repid.
b_unmed = 'Unidad de Medida'.
b_timat = 'Tipo de Material'.
b_tiope = 'Tipo de Operacin'.
b_ajust = 'Ajustes'.
*----------------------------------------------------------------------*
* START-OF-SELECTION.
*----------------------------------------------------------------------*

START-OF-SELECTION.
DATA: ls_error TYPE c.
PERFORM validar_campos CHANGING ls_error.
CHECK ls_error IS INITIAL.
PERFORM verifica_sociedad_centro.
IF sy-subrc = 0.
MESSAGE ID 'ZPEFI' TYPE 'I' NUMBER '002'.
ELSE.
IF p_bukrs = '3000' OR p_bukrs = '4000'.
"29082014
* IF p_bukrs = '3000'.
gv_check = 'X'.
ELSE.
CLEAR gv_check.
ENDIF.
PERFORM verifica_tipo_operacion.
IF sy-subrc = 0.
MESSAGE ID 'ZPEFI' TYPE 'I' NUMBER '013' .
ELSE.
PERFORM intervalo_fechas.
IF p_salin = 'X'.
PERFORM cargar_saldos.
PERFORM actualizar_tabla.
PERFORM salida_alv.
ELSEIF p_karva = 'X' OR p_karun = 'X' OR p_karppp EQ 'X'.
PERFORM cargar_datos.
IF p_repor EQ 'X'.
PERFORM salida_det.
PERFORM total_paginas.
ELSEIF p_gesti EQ 'X'.
PERFORM preparar_alv.
PERFORM salida_alv.
ELSEIF p_impre EQ 'X'.
PERFORM salida_impresa.
ELSEIF p_excel EQ 'X'.
PERFORM salida_excel.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*&
FORM BUSCAR_ARCHIVO
*&---------------------------------------------------------------------*
FORM buscar_archivo USING val_file.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
static
= 'X'
CHANGING
file_name
= val_file
EXCEPTIONS
mask_too_long = 1
OTHERS
= 2.
ENDFORM.
" BUSCAR_ARCHIVO
*&---------------------------------------------------------------------*
*&
FORM VERIFICA_SOCIEDAD_CENTRO
*&---------------------------------------------------------------------*
FORM verifica_sociedad_centro .
* Verifica consistencia entre sociedad y centro
SELECT SINGLE *

FROM t001k
WHERE bukrs NE p_bukrs AND bwkey IN p_werks.
ENDFORM.
" VERIFICA_SOCIEDAD_CENTRO
*&---------------------------------------------------------------------*
*&
FORM INTERVALO_FECHAS
*&---------------------------------------------------------------------*
FORM intervalo_fechas.
CLEAR: gv_fi, gv_ff.
CONCATENATE p_gjahr p_monat '01' INTO gv_fi.
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
day_in
= gv_fi
IMPORTING
last_day_of_month = gv_ff.
CLEAR gs_budat.
REFRESH gr_budat.
gs_budat-sign = 'I'.
gs_budat-option = 'BT'.
gs_budat-low = gv_fi.
gs_budat-high = gv_ff.
APPEND gs_budat TO gr_budat.
ENDFORM.
" INTERVALO_FECHAS
*&---------------------------------------------------------------------*
*&
FORM CARGAR_SALDOS
*&---------------------------------------------------------------------*
FORM cargar_saldos .
DATA: lt_detalle TYPE STANDARD TABLE OF gty_detaux,
ls_detalle TYPE gty_detaux.
* Se obtienen los Materiales de acuerdo a la Categoria de valoracion
SELECT matnr bwkey bklas
FROM mbew
INTO TABLE gtd_mbew
WHERE matnr IN p_matnr
AND bklas IN p_bklas
AND bwkey IN p_werks
ORDER BY bwkey matnr ASCENDING.
* Se eliminan los duplicados respecto al Centro y al Material
DELETE ADJACENT DUPLICATES FROM gtd_mbew COMPARING bwkey matnr.
* Se seleccionan los documentos de material para el periodo indicado.
SELECT mblnr mjahr budat
FROM mkpf
INTO TABLE gtd_mkpf
WHERE budat IN gr_budat.
IF NOT gtd_mkpf IS INITIAL.
* Se obtienen los documentos de los movimientos de almacen para el periodo indic
ado
SELECT mblnr mjahr zeile matnr werks gjahr bukrs
belnr shkzg dmbtr bwart menge umwrk bustw sakto charg umcha
FROM mseg
INTO TABLE gtd_mseg1
FOR ALL ENTRIES IN gtd_mkpf
WHERE mblnr = gtd_mkpf-mblnr
AND mjahr = gtd_mkpf-mjahr

AND werks IN p_werks


AND bukrs = p_bukrs
AND bustw NE 'WE06'. " Excluye las imputaciones a CO con referencia a M
aterial umwrk ne 'WE06'
SORT gtd_mseg1 BY werks matnr ASCENDING.
CLEAR gv_ind.
LOOP AT gtd_mseg1 ASSIGNING <fs_mseg>.
gv_ind = sy-tabix.
IF ( <fs_mseg>-werks EQ <fs_mseg>-umwrk ) AND ( <fs_mseg>-sakto EQ '' ).
" No se eliminan los reqistros que tengan movimientos entre lotes y cont
abilizan
IF ( <fs_mseg>-charg NE '' ) OR ( <fs_mseg>-umcha NE '' ).
IF ( <fs_mseg>-bustw = '' ).
DELETE gtd_mseg1 INDEX gv_ind.
ENDIF.
ELSE.
DELETE gtd_mseg1 INDEX gv_ind.
ENDIF.
" Se eliminan los documentos cuyo centro receptor sea vacio y no tenga s
tring de contabilizacin.
ELSEIF <fs_mseg>-umwrk = '' AND <fs_mseg>-bustw = ''.
DELETE gtd_mseg1 INDEX gv_ind.
ENDIF.
ENDLOOP.
*
delete gtd_mseg1 where umwrk is initial.
* Se eliminan los documentos que no pertenecen al rango de materiales de la pant
alla de seleccion
CLEAR gv_ind.
LOOP AT gtd_mseg1 ASSIGNING <fs_mseg>.
gv_ind = sy-tabix.
READ TABLE gtd_mbew ASSIGNING <fs_mbew> WITH KEY bwkey = <fs_mseg>-werks
matnr = <fs_mseg>-matnr.
IF sy-subrc NE 0.
DELETE gtd_mseg1 INDEX gv_ind.
ENDIF.
ENDLOOP.
ENDIF.
** Se seleccionan los centros
* select bwkey bukrs
*
from t001k
*
into table gtd_t001k "gv_bwkey
*
where bwkey in p_werks
*
and bukrs = p_bukrs
*
order by bwkey ascending.
IF NOT gtd_mbew IS INITIAL.
IF p_bsim EQ 'X'.
SELECT matnr bwkey bwtar belnr
gjahr buzei dmbtr shkzg budat
FROM bsim
INTO TABLE gtd_bsim
FOR ALL ENTRIES IN gtd_mbew
WHERE matnr = gtd_mbew-matnr
AND bwkey = gtd_mbew-bwkey

AND budat IN gr_budat.


SORT gtd_bsim BY bwkey matnr ASCENDING.
ELSEIF p_mseg EQ 'X'.
"Se usaran los registros de la tabla interna gtd_mseg1 para llenar los imp
ortes
ENDIF.
ENDIF.
* Se obtienen los registros de ajuste
SELECT *
FROM zfipet_lib10
INTO CORRESPONDING FIELDS OF TABLE gtd_ajuste
WHERE werks IN p_werks
AND monat = p_monat
AND gjahr = p_gjahr
AND matnr IN p_matnr.
REFRESH: gtd_karsal, gtd_karsalaux.
LOOP AT gtd_mbew ASSIGNING <fs_mbew>.
CLEAR: gs_karsal, gs_karsalaux, gs_ajuste.
gs_karsal-werks = <fs_mbew>-bwkey.
gs_karsal-monat = p_monat.
gs_karsal-gjahr = p_gjahr.
gs_karsal-matnr = <fs_mbew>-matnr.
IF gtd_mseg1 IS NOT INITIAL.
LOOP AT gtd_mseg1 ASSIGNING <fs_mseg> WHERE werks = <fs_mbew>-bwkey
AND matnr = <fs_mbew>-matnr.
IF <fs_mseg>-shkzg = 'S'.
gs_karsal-menges = gs_karsal-menges + <fs_mseg>-menge.
ELSE.
gs_karsal-mengeh = gs_karsal-mengeh + <fs_mseg>-menge.
ENDIF.
"Se usaran los registros de la tabla interna gtd_mseg1 para llenar los i
mportes
IF p_mseg = 'X'.
IF <fs_mseg>-shkzg = 'S'.
gs_karsal-dmbtrs = gs_karsal-dmbtrs + <fs_mseg>-dmbtr. " JMZ 08.08.1
1 -> Modificacin a dmbtr antes era menge
ELSE.
gs_karsal-dmbtrh = gs_karsal-dmbtrh + <fs_mseg>-dmbtr.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
IF gtd_bsim IS NOT INITIAL.
LOOP AT gtd_bsim ASSIGNING <fs_bsim> WHERE bwkey = <fs_mbew>-bwkey
AND matnr = <fs_mbew>-matnr.
IF <fs_bsim>-shkzg = 'S'.
gs_karsal-dmbtrs = gs_karsal-dmbtrs + <fs_bsim>-dmbtr.
ELSE.
gs_karsal-dmbtrh = gs_karsal-dmbtrh + <fs_bsim>-dmbtr.
ENDIF.
ENDLOOP.
ENDIF.
* Se realiza el ajuste correspondiente
LOOP AT gtd_ajuste INTO gs_ajuste WHERE werks = <fs_mbew>-bwkey
AND matnr = <fs_mbew>-matnr.

gs_karsal-dmbtrs = gs_karsal-dmbtrs + gs_ajuste-dmbtrs.


gs_karsal-dmbtrh = gs_karsal-dmbtrh + gs_ajuste-dmbtrh.
ENDLOOP.
MOVE-CORRESPONDING gs_karsal TO gs_karsalaux.
gs_karsalaux-menged = gs_karsalaux-menges - gs_karsalaux-mengeh.
gs_karsalaux-dmbtrd = gs_karsalaux-dmbtrs - gs_karsalaux-dmbtrh.
IF NOT ( gs_karsal-menges = 0 AND gs_karsal-mengeh = 0 AND
gs_karsal-dmbtrs = 0 AND gs_karsal-dmbtrh = 0 ).
APPEND gs_karsal TO gtd_karsal.
APPEND gs_karsalaux TO gtd_karsalaux.
ENDIF.
ENDLOOP.
ENDFORM.
" CARGAR_SALDOS
*&---------------------------------------------------------------------*
*&
FORM ACTUALIZAR_TABLA
*&---------------------------------------------------------------------*
FORM actualizar_tabla .
LOOP AT gtd_karsal INTO gs_karsal.
SELECT SINGLE *
FROM zfipet_lib06
WHERE gjahr = gs_karsal-gjahr
AND monat = gs_karsal-monat
AND matnr = gs_karsal-matnr
AND werks = gs_karsal-werks.
IF sy-subrc = 0.
UPDATE zfipet_lib06
FROM gs_karsal.
ELSE.
INSERT INTO zfipet_lib06 VALUES gs_karsal.
ENDIF.
ENDLOOP.
COMMIT WORK.
ENDFORM.
" ACTUALIZAR_TABLA
*&---------------------------------------------------------------------*
*&
Form SALIDA_ALV
*&---------------------------------------------------------------------*
FORM salida_alv .
PERFORM alv_columnas.
PERFORM alv_fill_layout.
PERFORM alv_carga_evento USING gtd_events[].
PERFORM alv_desplegar.
ENDFORM.
" SALIDA_ALV
*&---------------------------------------------------------------------*
*&
Form ALV_COLUMNAS
*&---------------------------------------------------------------------*
FORM alv_columnas .
DEFINE m_fcat.
perform zz_layout_cb using &1 &2 &3 &4.
END-OF-DEFINITION.
CLEAR gv_ind.
IF p_salin = 'X'.
gv_ind = gv_ind + 1.
m_fcat 'WERKS' 'MSEG' gv_ind 'Centro'.

gv_ind
m_fcat
gv_ind
m_fcat
gv_ind
m_fcat
gv_ind
m_fcat
gv_ind
m_fcat
gv_ind
m_fcat
gv_ind
m_fcat
gv_ind
m_fcat
gv_ind
m_fcat

= gv_ind +
'MONAT'
= gv_ind +
'GJAHR'
= gv_ind +
'MATNR'
= gv_ind +
'DMBTRS'
= gv_ind +
'DMBTRH'
= gv_ind +
'DMBTRD'
= gv_ind +
'MENGES'
= gv_ind +
'MENGEH'
= gv_ind +
'MENGED'

1.
'BKPF'
1.
'BKPF'
1.
'MARA'
1.
' '
1.
' '
1.
' '
1.
' '
1.
' '
1.
' '

gv_ind 'Periodo'.
gv_ind 'Ejercicio'.
gv_ind 'Material'.
gv_ind 'Importe Entrada'.
gv_ind 'Importe Salida'.
gv_ind 'Dif. Importes'.
gv_ind 'Cantidad Entrada'.
gv_ind 'Cantidad Salida'.
gv_ind 'Dif. Cantidades'.

ELSEIF p_karva = 'X' OR p_karun = 'X' OR p_karppp EQ 'X'.


gv_ind = gv_ind + 1.
m_fcat 'MATNR'
'MARA' gv_ind 'Material'.
gv_ind = gv_ind + 1.
m_fcat 'TIPO_MAT' ' '
gv_ind 'Tipo Material'.
gv_ind = gv_ind + 1.
m_fcat 'MAKTX'
' '
gv_ind 'Descripcin'.
gv_ind = gv_ind + 1.
m_fcat 'ZUNDMED'
' '
gv_ind 'Unid.Med.'.
gv_ind = gv_ind + 1.
m_fcat 'MET_VAL'
' '
gv_ind 'Mtd.Val.'.
gv_ind = gv_ind + 1.
m_fcat 'ESTAB'
' '
gv_ind 'Centro'.
gv_ind = gv_ind + 1.
m_fcat 'FECHA'
' '
gv_ind 'Fecha'.
*
gv_ind = gv_ind + 1.
*
m_fcat 'ZTIPO_COMP' ' '
gv_ind 'Tipo(Tabla 10)'.
gv_ind = gv_ind + 1.
m_fcat 'SERIE'
' '
gv_ind 'NSUNAT'.
gv_ind = gv_ind + 1.
m_fcat 'MBLNR'
' '
gv_ind 'NLogstica'.
gv_ind = gv_ind + 1.
m_fcat 'MBLNRORI' ' '
gv_ind 'NContab'.
gv_ind = gv_ind + 1.
m_fcat 'ZTIPO_OPE' ' '
gv_ind 'Tipo Oper.'.
gv_ind = gv_ind + 1.
m_fcat 'CANT_IN'
' '
gv_ind 'Cant.Entrada'.
IF p_karva = 'X' OR p_karppp EQ 'X'.
gv_ind = gv_ind + 1.
m_fcat 'COSU_IN'
' '
gv_ind 'Cost.Unit.Entrada'.
gv_ind = gv_ind + 1.
m_fcat 'COST_IN'
' '
gv_ind 'Cost.Tot.Entrada'.
gv_ind = gv_ind + 1.
ENDIF.
m_fcat 'CANT_OUT' ' '
gv_ind 'Cant.Salida'.
gv_ind = gv_ind + 1.
IF p_karva = 'X' OR p_karppp EQ 'X'.
m_fcat 'COSU_OUT' ' '
gv_ind 'Cost.Unit.Salida'.
gv_ind = gv_ind + 1.
m_fcat 'COST_OUT' ' '
gv_ind 'Cost.Tot.Salida'.
gv_ind = gv_ind + 1.

ENDIF.
m_fcat 'CANT_TOT' ' '
gv_ind 'Cant.Final'.
gv_ind = gv_ind + 1.
IF p_karva = 'X' OR p_karppp EQ 'X'.
m_fcat 'COSU_FIN' ' '
gv_ind 'Cost.Unit.Final'.
gv_ind = gv_ind + 1.
m_fcat 'COST_FIN' ' '
gv_ind 'Cost.Tot.Final'.
ENDIF.
ENDIF.
ENDFORM.
" ALV_COLUMNAS
*&---------------------------------------------------------------------*
*&
FORM ZZ_LAYOUT_CB
*&---------------------------------------------------------------------*
FORM zz_layout_cb USING pw_fn TYPE lvc_fname
pw_rt TYPE lvc_rtname
pw_cp TYPE lvc_colpos
pw_ct TYPE lvc_txtcol.
CLEAR gs_fcat.
gs_fcat-fieldname
= pw_fn.
gs_fcat-ref_tabname = pw_rt.
gs_fcat-col_pos
= pw_cp.
IF NOT ( pw_ct IS INITIAL ).
gs_fcat-seltext_m = pw_ct.
ENDIF.
IF p_salin = 'X'.
IF pw_fn = 'DMBTRS' OR pw_fn = 'DMBTRH'.
gs_fcat-currency = 'PEN'.
gs_fcat-datatype = 'CURR'.
ENDIF.
ELSEIF p_karva = 'X' OR p_karppp EQ 'X'.
IF pw_fn = 'CANT_IN' OR pw_fn = 'CANT_OUT' OR pw_fn = 'CANT_TOT'.
gs_fcat-emphasize = 'C100'.
ENDIF.
ENDIF.
APPEND gs_fcat TO gtd_fieldcat.
ENDFORM.
" ZZ_LAYOUT_CB
*&---------------------------------------------------------------------*
*&
FORM ALV_FILL_LAYOUT
*&---------------------------------------------------------------------*
FORM alv_fill_layout .
CLEAR gtd_layout.
gtd_layout-zebra
= 'X'.
gtd_layout-colwidth_optimize = 'X'.
gtd_layout-f2code
= 'VER'.
gtd_grid_settings-edt_cll_cb = 'X'.
ENDFORM.
" ALV_FILL_LAYOUT
*--------------------------------------------------------------------*
* FORM ALV_CARGA_EVENTO
*--------------------------------------------------------------------*
FORM alv_carga_evento USING lt_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
MOVE 'DATA_CHANGE' TO ls_event-name.
MOVE 'DATA_CHANGE' TO ls_event-form.
APPEND ls_event
TO lt_events.
CLEAR ls_event.

MOVE 'REFRESH'
MOVE 'REFRESH'
APPEND ls_event
CLEAR ls_event.

TO ls_event-name.
TO ls_event-form.
TO lt_events.

REFRESH gtd_event_exit.
ENDFORM.
"ALV_CARGA_EVENTO
*---------------------------------------------------------------------*
*
FORM ALV_DESPLEGAR
*---------------------------------------------------------------------*
FORM alv_desplegar.
gtd_variante-report = sy-repid.
gv_repid = sy-repid.
IF p_salin = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
*
i_interface_check
= 'X'
i_callback_program
= gv_repid
i_callback_pf_status_set = 'PF_STATUS'
i_save
= 'A'
is_variant
= gtd_variante
is_layout
= gtd_layout
it_fieldcat
= gtd_fieldcat[]
*
i_grid_settings
= gtd_grid_settings
i_callback_user_command = 'USER_COMMAND'
i_default
= 'X'
it_events
= gtd_events[]
it_event_exit
= gtd_event_exit
TABLES
t_outtab
= gtd_karsalaux
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
ELSEIF ( p_karva = 'X' AND p_gesti = 'X' )
OR ( p_karun = 'X' AND p_gesti = 'X' )
OR ( p_karppp = 'X' AND p_gesti = 'X' ).
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
*
i_interface_check
= 'X'
i_callback_program
= gv_repid
i_callback_pf_status_set = 'PF_STATUS'
i_save
= 'A'
is_variant
= gtd_variante
is_layout
= gtd_layout
it_fieldcat
= gtd_fieldcat[]
*
i_grid_settings
= gtd_grid_settings
i_callback_user_command = 'USER_COMMAND'
i_default
= 'X'
it_events
= gtd_events[]
it_event_exit
= gtd_event_exit
TABLES
t_outtab
= gtd_gest
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
ENDIF.
ENDFORM.
"DESPLEGAR_ALV
*---------------------------------------------------------------------*

*
FORM PF_STATUS
*---------------------------------------------------------------------*
FORM pf_status USING ce_func_exclude TYPE slis_t_extab.
DATA fcode_attrib_tab LIKE smp_dyntxt OCCURS 0 WITH HEADER LINE.
CLEAR: fcode_attrib_tab, fcode_attrib_tab[].
PERFORM dynamic_report_fcodes(rhteiln0) TABLES fcode_attrib_tab
USING ce_func_exclude ' ' ' '.
SET PF-STATUS 'ALVLIST' EXCLUDING ce_func_exclude OF PROGRAM 'RHTEILN0'.
ENDFORM.
"PF_STATUS
*---------------------------------------------------------------------*
*
FORM USER_COMMAND
*---------------------------------------------------------------------*
FORM user_command USING ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
CASE selfield-fieldname.
WHEN 'MBLNRORI'.
SET PARAMETER ID 'BUK' FIELD p_bukrs.
SET PARAMETER ID 'BLN' FIELD selfield-value.
SET PARAMETER ID 'GJR' FIELD p_gjahr.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
WHEN 'MBLNR'.
SET PARAMETER ID 'MBN' FIELD selfield-value.
SET PARAMETER ID 'MJA' FIELD p_gjahr.
CALL TRANSACTION 'MB03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDFORM.
"user_command
*&---------------------------------------------------------------------*
*&
FORM CARGAR_DATOS
*&---------------------------------------------------------------------*
FORM cargar_datos .
FIELD-SYMBOLS: <fs_det> LIKE LINE OF gtd_detalle,
<fs_ppp> LIKE LINE OF gtd_kardex_ppp.
DATA: gv_cant_ant TYPE
gv_cost_ant TYPE
lt_facturas TYPE
lt_rkseg
TYPE
REFRESH: gt_rkseg.

ckmlpp-lbkum,
ckmlcr-salkv,
STANDARD TABLE OF gty_vbfa,
STANDARD TABLE OF gty_rkseg.

* Se obtienen Sociedad y Centro


SELECT bwkey bukrs
FROM t001k
INTO TABLE gtd_t001k
WHERE bwkey IN p_werks
AND bukrs = p_bukrs.
* Se obtiene Nombre del centro
CLEAR: gv_ind.
LOOP AT gtd_t001k INTO gs_t001k.
gv_ind = sy-tabix.
SELECT SINGLE name1
FROM t001w
INTO gs_t001k-name1
WHERE bwkey = gs_t001k-bwkey.
IF sy-subrc = 0.
MODIFY gtd_t001k FROM gs_t001k INDEX gv_ind.
ENDIF.

ENDLOOP.
*{/@MCT110811
** RUC
* select single paval
*
from t001z
*
into gv_ruc
*
where party = 'ZRUC'
*
and bukrs = p_bukrs.
*
** Razon Social
* select single paval
*
from t001z
*
into gv_razon
*
where party = 'ZRSOCI'
*
and bukrs = p_bukrs.
SELECT SINGLE paval
INTO gv_ruc
FROM t001z
WHERE bukrs = p_bukrs
AND party = 'ZRUC'. " @PCL18012012
SELECT SINGLE butxt
INTO gv_razon
FROM t001
WHERE bukrs = p_bukrs.
*}
* Se obtienen los Tipos de material de acuerdo a la Categoria de valoracion de M
BEW
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gtd_tipmat
FROM zfipet_lib08.
* Se obtiene la Unidad de Medida SUNAT a partir de la Unidad de Medida SAP
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gtd_um
FROM zfipet_lib07.
* Se obtienen las Clases de movimiento
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gtd_tipope
FROM zfipet_lib09.
* Se obtienen los documentos de material (movimientos) en el periodo indicado
SELECT mblnr mjahr budat
FROM mkpf
INTO TABLE gtd_mkpf
WHERE budat IN gr_budat
ORDER BY mblnr mjahr.
* Se obtienen los Materiales de acuerdo a la Categoria de valoracion
SELECT matnr bwkey bklas
FROM mbew
INTO TABLE gtd_mbew
WHERE matnr IN p_matnr
AND bklas IN p_bklas
AND bwkey IN p_werks
ORDER BY bwkey matnr ASCENDING.

* Se borran los materiales repetidos


DELETE ADJACENT DUPLICATES FROM gtd_mbew COMPARING bwkey matnr.
IF NOT gtd_mbew IS INITIAL.
REFRESH: gtd_mbew_aux.
gtd_mbew_aux[] = gtd_mbew[].
SORT gtd_mbew_aux BY matnr.
DELETE ADJACENT DUPLICATES FROM gtd_mbew_aux COMPARING matnr.
* Se obtiene el Centro para cada Material
SELECT matnr meins
INTO TABLE gtd_mara
FROM mara
FOR ALL ENTRIES IN gtd_mbew_aux
WHERE matnr = gtd_mbew_aux-matnr.
IF NOT gtd_mara IS INITIAL.
* Se obtiene la Descripcion de cada material
SELECT matnr maktx
INTO TABLE gtd_makt
FROM makt
FOR ALL ENTRIES IN gtd_mara
WHERE matnr = gtd_mara-matnr
AND spras = 'S'.
ENDIF.
IF NOT gtd_mkpf IS INITIAL.
REFRESH: gtd_mkpf_aux.
gtd_mkpf_aux[] = gtd_mkpf[].
SORT gtd_mkpf_aux BY mblnr mjahr.
DELETE ADJACENT DUPLICATES FROM gtd_mkpf_aux COMPARING mblnr mjahr.
* Se obtienen los documentos de los movimientos de almacen para el periodo indic
ado
SELECT mblnr mjahr zeile matnr werks gjahr bukrs
belnr shkzg dmbtr bwart menge umwrk bustw sakto charg umcha
INTO TABLE gtd_mseg1
FROM mseg
FOR ALL ENTRIES IN gtd_mkpf_aux
WHERE mblnr = gtd_mkpf_aux-mblnr
AND mjahr = gtd_mkpf_aux-mjahr
AND matnr IN p_matnr
AND werks IN p_werks
*
and umwrk ne mseg-werks "Centro receptor/emisor
*
and umwrk ne ''
AND bukrs = p_bukrs
AND bustw NE 'WE06'. " Excluye las imputaciones a CO con referencia a
Material umwrk ne 'WE06'
SORT gtd_mseg1 BY werks matnr ASCENDING.
CLEAR gv_ind.
LOOP AT gtd_mseg1 ASSIGNING <fs_mseg>.
gv_ind = sy-tabix.
CLEAR gv_umwrk.
IF <fs_mseg>-BWART = '309' OR <fs_mseg>-BWART = '310'.
gv_umwrk = <fs_mseg>-umwrk.
<fs_mseg>-umwrk = ' '.
ENDIF.
IF ( <fs_mseg>-werks = <fs_mseg>-umwrk ) AND ( <fs_mseg>-sakto EQ '' ).
" No se eliminan los reqistros que tengan movimientos entre lotes y co

ntabilizan
IF ( <fs_mseg>-charg NE '' ) OR ( <fs_mseg>-umcha NE '' ).
IF ( <fs_mseg>-bustw = '' ).
DELETE gtd_mseg1 INDEX gv_ind.
ENDIF.
ELSE.
DELETE gtd_mseg1 INDEX gv_ind.
ENDIF.
" Se eliminan los documentos cuyo centro receptor sea vacio y no tenga
string de contabilizacin.
ELSEIF <fs_mseg>-umwrk = '' AND <fs_mseg>-bustw = ''.
DELETE gtd_mseg1 INDEX gv_ind.
ENDIF.
*
<fs_mseg>-umwrk = gv_umwrk.
*
MODIFY gtd_mseg1 INDEX gv_ind FROM <fs_mseg>.
ENDLOOP.
* Se eliminan los documentos que no pertenecen a los materiales ingresados por l
a pantalla de seleccion
CLEAR gv_ind.
LOOP AT gtd_mseg1 ASSIGNING <fs_mseg>.
gv_ind = sy-tabix.
READ TABLE gtd_mbew ASSIGNING <fs_mbew> WITH KEY bwkey = <fs_mseg>-werks
matnr = <fs_mseg>-matnr
.
IF sy-subrc NE 0.
DELETE gtd_mseg1 INDEX gv_ind.
ENDIF.
ENDLOOP.
* Se obtienen los documentos con indicador de stock especial para el periodo ind
icado
REFRESH:gtd_mkpf_aux.
gtd_mkpf_aux[] = gtd_mkpf[].
SORT gtd_mkpf_aux BY mblnr mjahr.
DELETE ADJACENT DUPLICATES FROM gtd_mkpf_aux COMPARING mblnr mjahr.
SELECT mblnr mjahr zeile matnr werks gjahr bukrs
belnr shkzg dmbtr bwart menge umwrk bustw
INTO TABLE gtd_mseg2
FROM mseg
FOR ALL ENTRIES IN gtd_mkpf_aux
WHERE mblnr = gtd_mkpf_aux-mblnr
AND mjahr = gtd_mkpf_aux-mjahr
AND werks IN p_werks
AND matnr IN p_matnr
*
and umwrk = werks
AND bukrs = p_bukrs
*
and umwrk ne ''
AND sobkz <> space
AND bustw <> 'WE06'. " Excluye las imputaciones a CO con referencia a
Material umwrk ne 'WE06'
SORT gtd_mseg2 BY werks matnr ASCENDING.
CLEAR gv_ind.
LOOP AT gtd_mseg2 ASSIGNING <fs_mseg>.
gv_ind = sy-tabix.
IF <fs_mseg>-werks NE <fs_mseg>-umwrk.
DELETE gtd_mseg2 INDEX gv_ind.
" Se eliminan los documentos cuyo sting de contabilizacin sea vacio.

ELSEIF <fs_mseg>-bustw = ''.


DELETE gtd_mseg2 INDEX gv_ind.
ENDIF.
ENDLOOP.
* Se eliminan los documentos que no pertenecen a los materiales ingresados por l
a pantalla de seleccion
*
CLEAR gv_ind.
LOOP AT gtd_mseg2 ASSIGNING <fs_mseg>.
*
gv_ind = sy-tabix.
*
READ TABLE gtd_mbew ASSIGNING <fs_mbew> WITH KEY bwkey = <fs_mseg>-werk
s
READ TABLE gtd_mbew WITH KEY bwkey = <fs_mseg>-werks
matnr = <fs_mseg>-matnr
BINARY SEARCH TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
*
DELETE gtd_mseg2 INDEX gv_ind.
DELETE gtd_mseg2 WHERE werks = <fs_mseg>-werks
AND matnr = <fs_mseg>-matnr.
ENDIF.
ENDLOOP.
SORT gtd_mseg2 BY bukrs belnr gjahr ASCENDING.
*

Se borran los documentos de contabilidad repetidos


DELETE ADJACENT DUPLICATES FROM gtd_mseg2 COMPARING bukrs belnr gjahr.
ENDIF.

* Se obtienen los documentos de los movimientos de almacn stock especial


IF NOT gtd_mseg2 IS INITIAL.
SELECT mblnr mjahr zeile matnr werks gjahr bukrs
belnr shkzg dmbtr bwart menge umwrk
INTO TABLE gtd_mseg3
FROM mseg
FOR ALL ENTRIES IN gtd_mseg2
WHERE mblnr = gtd_mseg2-mblnr
AND mjahr = gtd_mseg2-mjahr
AND matnr = gtd_mseg2-matnr
AND werks = gtd_mseg2-werks
AND umwrk = gtd_mseg2-umwrk
AND bukrs = gtd_mseg2-bukrs
AND sobkz EQ space.
ENDIF.
* Se crea una tabla unica con los documentos de los movimientos de almacn
APPEND LINES OF gtd_mseg2 TO gtd_mseg1.
APPEND LINES OF gtd_mseg3 TO gtd_mseg1.
REFRESH: gtd_mseg2, gtd_mseg3.
* Se concatenan Doc de material y Ejercicio de doc de material para obtener Clav
e de referencia
LOOP AT gtd_mseg1 ASSIGNING <fs_mseg>.
CONCATENATE <fs_mseg>-mblnr <fs_mseg>-mjahr INTO <fs_mseg>-awkey.
ENDLOOP.
* Se obtienen los N de doc de los movimientos de la MSEG
*
SELECT bukrs belnr gjahr awkey budat xblnr
SELECT bukrs belnr gjahr awkey budat xblnr cpudt cputm
FROM bkpf

INTO TABLE gtd_bkpf1


WHERE bukrs = p_bukrs
AND gjahr = p_gjahr
AND blart IN p_blart
AND budat GE gv_fi
AND budat LE gv_ff
AND monat = p_monat.
*
and awkey = gtd_mseg-awkey.
"add +@ERQ251013
IF gv_check IS NOT INITIAL.
IF gtd_mseg1[] IS NOT INITIAL.
REFRESH: gt_rkseg_aux, gt_rkseg, gt_rkseg_mseg.
LOOP AT gtd_mseg1 INTO gs_mseg.
gs_rkseg-lfbnr = gs_mseg-mblnr.
gs_rkseg-lfgja = gs_mseg-mjahr.
gs_rkseg-lfpos = gs_mseg-zeile.
gs_rkseg-matbf = gs_mseg-matnr.
APPEND gs_rkseg TO gt_rkseg_mseg.
CLEAR: gs_rkseg,gs_mseg.
ENDLOOP.
SORT gt_rkseg_mseg BY lfbnr lfgja lfpos matbf.
DELETE ADJACENT DUPLICATES FROM gt_rkseg_mseg COMPARING lfbnr lfgja lfpo
s matbf.
SELECT belnr
gjahr
lfbnr
lfgja
lfpos
matbf
INTO CORRESPONDING FIELDS OF TABLE gt_rkseg_aux1
FROM rseg
FOR ALL ENTRIES IN gt_rkseg_mseg
WHERE lfbnr = gt_rkseg_mseg-lfbnr
AND lfgja = gt_rkseg_mseg-lfgja
AND lfpos = gt_rkseg_mseg-lfpos
AND matbf = gt_rkseg_mseg-matbf.
IF gt_rkseg_aux1[] IS NOT INITIAL.
REFRESH: lt_rkseg.
lt_rkseg[] = gt_rkseg_aux1[].
SORT lt_rkseg BY belnr gjahr.
DELETE ADJACENT DUPLICATES FROM lt_rkseg COMPARING belnr gjahr.
SELECT belnr
gjahr
xblnr
INTO CORRESPONDING FIELDS OF TABLE gt_rkseg_aux
FROM rbkp
FOR ALL ENTRIES IN lt_rkseg
WHERE bukrs = p_bukrs
AND belnr = lt_rkseg-belnr
AND gjahr = lt_rkseg-gjahr.
LOOP AT gt_rkseg_aux1 ASSIGNING <fs_rkseg>.
READ TABLE gt_rkseg_aux INTO gs_rkseg WITH KEY belnr = <fs_rkseg>-be
lnr
gjahr = <fs_rkseg>-gj
ahr.
IF sy-subrc = 0.
<fs_rkseg>-xblnr = gs_rkseg-xblnr.
ENDIF.

ENDLOOP.
ENDIF.
***
REFRESH: gt_facturas, gt_vbfa,gt_mseg_aux.
LOOP AT gtd_mseg1 INTO gs_mseg WHERE belnr = space.
READ TABLE gt_rkseg_aux1 WITH KEY lfbnr = gs_mseg-mblnr
lfgja = gs_mseg-mjahr
lfpos = gs_mseg-zeile
matbf = gs_mseg-matnr
BINARY SEARCH TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
MOVE-CORRESPONDING gs_mseg TO gs_mseg_aux.
APPEND gs_mseg_aux TO gt_mseg_aux.
ENDIF.
CLEAR: gs_mseg, gs_mseg_aux.
ENDLOOP.
SORT gt_mseg_aux BY mblnr zeile matnr mjahr.
DELETE ADJACENT DUPLICATES FROM gt_mseg_aux COMPARING mblnr zeile matnr
mjahr.
IF gt_mseg_aux[] IS NOT INITIAL.
SORT gt_mseg_aux BY mblnr zeile matnr mjahr.
SELECT vbelv
posnv
vbeln
posnn
matnr
vbtyp_v
mjahr
INTO CORRESPONDING FIELDS OF TABLE gt_vbfa
FROM vbfa
FOR ALL ENTRIES IN gt_mseg_aux
WHERE vbeln = gt_mseg_aux-mblnr
AND posnn = gt_mseg_aux-zeile
AND vbtyp_n = 'R'
AND matnr = gt_mseg_aux-matnr
AND vbtyp_v IN ('C', 'J', 'T')
AND mjahr = gt_mseg_aux-mjahr.
REFRESH: gt_vbfa_aux.
gt_vbfa_aux[] = gt_vbfa[].
DELETE gt_vbfa WHERE vbtyp_v <> 'C'.
DELETE gt_vbfa_aux WHERE vbtyp_v = 'C'.
IF gt_vbfa[] IS NOT INITIAL.
SORT gt_vbfa BY vbelv posnv.
SELECT vbelv
posnv
vbeln
posnn
INTO CORRESPONDING FIELDS OF TABLE gt_facturas
FROM vbfa
FOR ALL ENTRIES IN gt_vbfa
WHERE vbelv = gt_vbfa-vbelv
AND posnv = gt_vbfa-posnv
AND vbtyp_n = 'M'
AND vbtyp_v = 'C'.
IF gt_facturas[] IS NOT INITIAL.
REFRESH: lt_facturas.
lt_facturas[] = gt_facturas[].
SORT lt_facturas BY vbeln.

DELETE ADJACENT DUPLICATES FROM lt_facturas COMPARING vbeln.


SELECT vbeln
xblnr
INTO CORRESPONDING FIELDS OF TABLE gt_facturas_aux
FROM vbrk AS b
FOR ALL ENTRIES IN lt_facturas
WHERE vbeln = lt_facturas-vbeln.
REFRESH: gt_rkseg_aux, gt_facturas1.
gt_facturas1[] = gt_facturas[].
LOOP AT gt_facturas_aux INTO gs_facturas.
LOOP AT gt_facturas1 ASSIGNING <fs_facturas> WHERE vbeln = gs_fa
cturas-vbeln.

<fs_facturas>-xblnr = gs_facturas-xblnr.
ENDLOOP.
ENDLOOP.
REFRESH: gt_facturas.
gt_facturas[] = gt_facturas1[].
DELETE gt_facturas WHERE xblnr = space.
SORT gt_vbfa BY vbelv posnv.
SORT gt_facturas BY vbelv posnv.
LOOP AT gt_vbfa INTO gs_vbfa.
gs_rkseg-lfbnr = gs_vbfa-vbeln.
gs_rkseg-lfpos = gs_vbfa-posnn.
gs_rkseg-lfgja = gs_vbfa-mjahr.
gs_rkseg-gjahr = gs_vbfa-mjahr.
gs_rkseg-matbf = gs_vbfa-matnr.
READ TABLE gt_facturas INTO gs_facturas WITH TABLE KEY vbelv = g

s_vbfa-vbelv
posnv = g
s_vbfa-posnv.
IF sy-subrc = 0.
gs_rkseg-belnr = gs_facturas-vbeln.
gs_rkseg-xblnr = gs_facturas-xblnr.
APPEND gs_rkseg TO gt_rkseg_aux1.
ENDIF.
CLEAR: gs_facturas, gs_rkseg, gs_vbfa.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
SORT gt_rkseg_aux1.
DELETE ADJACENT DUPLICATES FROM gt_rkseg_aux1 COMPARING ALL FIELDS.
gt_rkseg[] = gt_rkseg_aux1[].
ENDIF.
"add +@ERQ251013
SORT gtd_mseg1 BY werks matnr ASCENDING.
REFRESH: gtd_mseg1_aux.
gtd_mseg1_aux[] = gtd_mseg1[].
SORT gtd_bkpf1 BY awkey.
* Se eliminan los documentos que no tengan la misma Clave de referencia de acuer
do a la MSEG
CLEAR gv_ind.
LOOP AT gtd_bkpf1 ASSIGNING <fs_bkpf>.
CLEAR: gv_ind.
gv_ind = sy-tabix.
READ TABLE gtd_mseg1_aux WITH TABLE KEY awkey = <fs_bkpf>-awkey
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
*
DELETE gtd_bkpf1 INDEX gv_ind.

DELETE gtd_bkpf1 WHERE awkey = <fs_bkpf>-awkey.


ENDIF.
ENDLOOP.
* Se obtienen los documentos de los movimientos de ajuste, que tienen Importe pe
ro no Cantidad
SELECT matnr bwkey bwtar belnr
gjahr buzei dmbtr shkzg budat
INTO TABLE gtd_bsim
FROM bsim
WHERE matnr IN p_matnr
AND bwkey IN p_werks
AND budat GE gv_fi
AND budat LE gv_ff.
SORT gtd_bsim BY bwkey matnr ASCENDING.
* Se borran los documentos de material que tengan un N de doc en la BKPF
CLEAR gv_ind.
SORT: gtd_bsim by belnr,
gtd_bkpf1 by belnr.

*
.
*
*
*

LOOP AT gtd_bsim ASSIGNING <fs_bsim>.


gv_ind = sy-tabix.
READ TABLE gtd_bkpf1 ASSIGNING <fs_bkpf> WITH KEY belnr = <fs_bsim>-belnr
READ TABLE gtd_bkpf1 WITH KEY belnr = <fs_bsim>-belnr
READ TABLE gtd_bkpf1 ASSIGNING <fs_bkpf> WITH KEY belnr = <fs_bsim>-belnr.
BINARY SEARCH TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
DELETE gtd_bsim INDEX gv_ind.
DELETE gtd_bsim WHERE belnr = <fs_bsim>-belnr.
ENDIF.
ENDLOOP.

IF NOT gtd_bsim IS INITIAL.


* Se obtiene el N de referencia de los documentos de movimientos de ajuste
*
SELECT bukrs belnr gjahr awkey budat xblnr
SELECT bukrs belnr gjahr awkey budat xblnr cpudt cputm
INTO TABLE gtd_bkpf2
FROM bkpf
FOR ALL ENTRIES IN gtd_bsim
WHERE bukrs = p_bukrs
AND belnr = gtd_bsim-belnr
AND gjahr = gtd_bsim-gjahr.
ENDIF.
* Se obtienen los movimientos en periodos anteriores
SELECT matnr werks monat gjahr matnr
dmbtrs dmbtrh menges mengeh
INTO TABLE gtd_karsal
FROM zfipet_lib06
WHERE matnr IN p_matnr
AND werks IN p_werks
AND gjahr = p_gjahr
AND monat LT p_monat.
*
and budat le gv_fi.
SELECT matnr werks monat gjahr matnr
dmbtrs dmbtrh menges mengeh

APPENDING TABLE gtd_karsal


FROM zfipet_lib06
WHERE matnr IN p_matnr
AND werks IN p_werks
AND gjahr LT p_gjahr.
SORT gtd_karsal BY werks matnr ASCENDING.
gts_karsal = gtd_karsal.
REFRESH gtd_karsal.
ENDIF.
* Se obtienen los movimientos de ajuste
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gtd_ajuste
FROM zfipet_lib10
WHERE werks IN p_werks
AND monat = p_monat
AND gjahr = p_gjahr
AND matnr IN p_matnr.
REFRESH: gtd_bsim_aux, gtd_bkpf2_aux.
gtd_bsim_aux[] = gtd_bsim[].
gtd_bkpf2_aux[] = gtd_bkpf2[].
REFRESH: gtd_mseg1_aux1.
LOOP AT gtd_mseg1 INTO gs_mseg.
MOVE-CORRESPONDING gs_mseg TO gs_mseg_aux1.
READ TABLE gt_rkseg INTO gs_rkseg WITH KEY lfbnr
lfgja
lfpos
matbf
IF sy-subrc = 0.
gs_mseg_aux1-xblnr = gs_rkseg-xblnr. "N SUNAT
ENDIF.
APPEND gs_mseg_aux1 TO gtd_mseg1_aux1.
CLEAR: gs_mseg_aux1, gs_rkseg.
ENDLOOP.

=
=
=
=

gs_mseg_aux1-mblnr
gs_mseg_aux1-mjahr
gs_mseg_aux1-zeile
gs_mseg_aux1-matnr.

= Serie

LOOP AT gtd_mbew ASSIGNING <fs_mbew>.


* Cabecera del Kardex
CLEAR: gs_cabec.
MOVE-CORRESPONDING <fs_mbew> TO gs_cabec. "Material y Categoria de Valoracio
n
gs_cabec-werks = <fs_mbew>-bwkey. "Centro
gs_cabec-lfmon = p_monat. "Periodo
gs_cabec-lfgja = p_gjahr. "Ejercicio
gs_cabec-ruc = gv_ruc. "RUC
gs_cabec-butxt = gv_razon. "Razon Social
READ TABLE gtd_t001k INTO gs_t001k WITH KEY bwkey = <fs_mbew>-bwkey.
IF sy-subrc = 0.
CONCATENATE gs_t001k-bwkey '-' gs_t001k-name1 INTO gs_cabec-estab SEPARATE
D BY space. "Centro + Establecimiento
ELSE.
gs_cabec-estab = <fs_mbew>-bwkey.
ENDIF.
READ TABLE gtd_tipmat INTO gs_tipmat WITH KEY bklas = <fs_mbew>-bklas.
IF sy-subrc = 0.
CONCATENATE gs_tipmat-tm '-' gs_tipmat-texttm INTO gs_cabec-tipo_mat "Tipo
Mat. + Texto Tipo Mat.
SEPARATED BY space.

ENDIF.
READ TABLE gtd_makt INTO gs_makt WITH KEY matnr = <fs_mbew>-matnr.
IF sy-subrc = 0.
gs_cabec-maktx = gs_makt-maktx. "Descripcion Mat.
ENDIF.
READ TABLE gtd_mara INTO gs_mara WITH KEY matnr = <fs_mbew>-matnr.
IF sy-subrc = 0.
gs_cabec-meins = gs_mara-meins. "Unidad de Medida SAP
READ TABLE gtd_um INTO gs_um WITH KEY meins = gs_mara-meins.
IF sy-subrc = 0.
gs_cabec-zundmed = gs_um-um. "Unidad de Medida SUNAT
gs_cabec-textum = gs_um-textum. "Texto Und. de Medida
ENDIF.
ENDIF.
IF p_karppp EQ 'X'.
gs_cabec-met_val = 'PRECIO PROMEDIO PONDERADO'. "Metodo de Valuacion
ELSE.
gs_cabec-met_val = 'PRECIO ESTANDAR'. "Metodo de Valuacion
gs_cabec-met_val = 'PRECIO PROMEDIO PONDERADO'. "Metodo de Valuacion
ENDIF.
APPEND gs_cabec TO gtd_cabec.

* Detalle del Kardex


* Saldo Inicial
CLEAR: gs_detalle.
gs_detalle-werks = <fs_mbew>-bwkey. "Centro
gs_detalle-matnr = <fs_mbew>-matnr. "Material
gs_detalle-ztipo_ope = '16'. "Tipo de Operacion SUNAT
"Entradas y Salidas
LOOP AT gts_karsal ASSIGNING <fs_karsal> WHERE werks = <fs_mbew>-bwkey
AND matnr = <fs_mbew>-matnr.
gs_detalle-cant_in = gs_detalle-cant_in + <fs_karsal>-menges - <fs_karsal>
-mengeh.
gs_detalle-cost_in = gs_detalle-cost_in + <fs_karsal>-dmbtrs - <fs_karsal>
-dmbtrh.
ENDLOOP.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
gs_detalle-cosu_in = gs_detalle-cost_in / gs_detalle-cant_in.
ENDCATCH.
IF sy-subrc = 5.
gs_detalle-cosu_in = '0.00'.
ENDIF.
"Saldo Final
gs_detalle-cant_tot = gs_detalle-cant_in.
gs_detalle-cost_fin = gs_detalle-cost_in.
gs_detalle-cosu_fin = gs_detalle-cosu_in.
APPEND gs_detalle TO gtd_detalle.
* Movimientos
LOOP AT gtd_mseg1_aux1 INTO gs_mseg_aux1 WHERE werks = <fs_mbew>-bwkey
AND matnr = <fs_mbew>-matnr.
CLEAR: gs_detalle.
gs_detalle-werks = gs_mseg_aux1-werks. "Centro
gs_detalle-matnr = gs_mseg_aux1-matnr. "Material
"add +@ERQ251013
IF gv_check IS NOT INITIAL.
gs_detalle-serie = gs_mseg_aux1-xblnr. "N SUNAT = Serie
ELSE.

gs_detalle-serie = space. "N SUNAT = Serie


ENDIF.
"add +@ERQ251013
READ TABLE gtd_mkpf ASSIGNING <fs_mkpf> WITH KEY mblnr = gs_mseg_aux1-mbln
r
mjahr = gs_mseg_aux1-mjah
r.
IF sy-subrc = 0.
gs_detalle-fecha = <fs_mkpf>-budat. "Fecha
gs_detalle-mblnr = <fs_mkpf>-mblnr. "N Logistica = N de documento de mater
ial
ENDIF.
READ TABLE gtd_bkpf1 ASSIGNING <fs_bkpf> WITH KEY bukrs = gs_mseg_aux1-buk
rs
gjahr = gs_mseg_aux1-gja
hr
awkey = gs_mseg_aux1-awk
ey.
IF sy-subrc = 0.
gs_detalle-mblnrori = <fs_bkpf>-belnr. "N Contab = N de documento contable
gs_detalle-cpudt = <fs_bkpf>-cpudt.
gs_detalle-cputm = <fs_bkpf>-cputm.
ENDIF.
*

gs_detalle-ztipo_comp = space. "Tipo


gs_detalle-serie
= space. "N SUNAT = Serie
READ TABLE gtd_tipope INTO gs_tipope WITH KEY bwart = gs_mseg_aux1-bwart.
IF sy-subrc = 0.
gs_detalle-ztipo_ope = gs_tipope-tope. "Tipo de Operacion SUNAT
ENDIF.
"add +@ERQ251013
IF gv_check IS NOT INITIAL AND
gs_detalle-ztipo_ope = '11'.
READ TABLE gt_vbfa_aux INTO gs_vbfa WITH KEY vbeln = gs_mseg_aux1-mblnr
posnn = gs_mseg_aux1-zeile
matnr = gs_mseg_aux1-matnr
mjahr = gs_mseg_aux1-mjahr
vbtyp_v = 'C'.
IF sy-subrc = 0.
WRITE gs_vbfa-vbelv TO gv_vbelv.
CONCATENATE '00-' gv_vbelv INTO gs_detalle-serie. "N SUNAT = Serie
CLEAR gs_vbfa.
ELSE.
CLEAR gs_vbfa.
SELECT SINGLE vbelv
INTO gs_vbfa-vbelv
FROM vbfa
WHERE vbeln = gs_mseg_aux1-mblnr
AND vbtyp_n = 'R'
AND vbtyp_v = 'J'
AND mjahr = gs_mseg_aux1-mjahr.
IF sy-subrc = 0.
WRITE gs_vbfa-vbelv TO gv_vbelv.
CONCATENATE '00-' gv_vbelv INTO gs_detalle-serie. "N SUNAT = Serie
CLEAR gs_vbfa.
ENDIF.
ENDIF.
ELSEIF gv_check IS NOT INITIAL AND

gs_detalle-ztipo_ope = '05'.
READ TABLE gt_vbfa_aux INTO gs_vbfa WITH KEY vbeln = gs_mseg_aux1-mblnr
posnn = gs_mseg_aux1-zeile
matnr = gs_mseg_aux1-matnr
mjahr = gs_mseg_aux1-mjahr
vbtyp_v = 'T'.
IF sy-subrc = 0.
CLEAR gs_vbfa_aux.
SELECT SINGLE vbeln
INTO gs_vbfa_aux-vbeln
FROM vbfa
WHERE vbelv = gs_vbfa-vbelv
AND posnv = gs_vbfa-posnv
AND vbtyp_n = 'O'
AND vbtyp_v = 'T'.
IF sy-subrc = 0.
CLEAR: gs_facturas.
SELECT SINGLE xblnr
INTO gs_facturas-xblnr
FROM vbrk
WHERE vbeln = gs_vbfa_aux-vbeln.
IF sy-subrc = 0.
gs_detalle-serie = gs_facturas-xblnr.
ELSE.
CLEAR gs_detalle-serie.
ENDIF.
ELSE.
CLEAR gs_detalle-serie.
ENDIF.
ELSE.
CLEAR gs_detalle-serie.
ENDIF.
ENDIF.
"add +@ERQ251013
"Entradas y Salidas
IF gs_mseg_aux1-shkzg = 'S'.
gs_detalle-cant_in = gs_mseg_aux1-menge.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
gs_detalle-cosu_in = gs_mseg_aux1-dmbtr / gs_mseg_aux1-menge .
ENDCATCH.
IF sy-subrc = 5.
gs_detalle-cosu_in = '0.00'.
ENDIF.
gs_detalle-cost_in = gs_mseg_aux1-dmbtr.
ELSEIF gs_mseg_aux1-shkzg = 'H'.
gs_detalle-cant_out = gs_mseg_aux1-menge.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
gs_detalle-cosu_out = gs_mseg_aux1-dmbtr / gs_mseg_aux1-menge.
ENDCATCH.
IF sy-subrc = 5.
gs_detalle-cosu_out = '0.00'.
ENDIF.
gs_detalle-cost_out = gs_mseg_aux1-dmbtr.
ENDIF.
"Saldo Final
gs_detalle-cant_tot = gs_detalle-cant_tot + gs_detalle-cant_in - gs_detall
e-cant_out.
gs_detalle-cost_fin = gs_detalle-cost_fin + gs_detalle-cost_in - gs_detall
e-cost_out.

CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.


gs_detalle-cosu_fin = gs_detalle-cost_fin / gs_detalle-cant_tot.
ENDCATCH.
IF sy-subrc = 5.
gs_detalle-cosu_fin = '0.00'.
ENDIF.
APPEND gs_detalle TO gtd_detalle.
ENDLOOP.
LOOP AT gtd_bsim_aux ASSIGNING <fs_bsim> WHERE bwkey = <fs_mbew>-bwkey
AND matnr = <fs_mbew>-matnr.
CLEAR: gs_detalle.
gs_detalle-werks = <fs_bsim>-bwkey. "Centro
gs_detalle-matnr = <fs_bsim>-matnr. "Material
gs_detalle-fecha = <fs_bsim>-budat. "Fecha
gs_detalle-mblnr = space. "N Logistica = N de documento de material
gs_detalle-mblnrori = <fs_bsim>-belnr. "N Contab = N de documento contable
gs_detalle-ztipo_comp = space. "Tipo
READ TABLE gtd_bkpf2_aux ASSIGNING <fs_bkpf> WITH KEY bukrs = p_bukrs
belnr = <fs_bsim>-be
lnr
gjahr = <fs_bsim>-gj
ahr.
IF sy-subrc = 0.
gs_detalle-serie = <fs_bkpf>-xblnr. "N SUNAT = Serie
gs_detalle-cpudt = <fs_bkpf>-cpudt.
gs_detalle-cputm = <fs_bkpf>-cputm.
ENDIF.
gs_detalle-ztipo_ope = '99'. "Tipo de operacion
"Entradas y Salidas
IF <fs_bsim>-shkzg = 'S'.
gs_detalle-cost_in = <fs_bsim>-dmbtr.
ELSEIF <fs_bsim>-shkzg = 'H'.
gs_detalle-cost_out = <fs_bsim>-dmbtr.
ENDIF.
gs_detalle-cost_fin = gs_detalle-cost_in - gs_detalle-cost_out.
APPEND gs_detalle TO gtd_detalle.
ENDLOOP.
LOOP AT gtd_ajuste INTO gs_ajuste WHERE werks = <fs_mbew>-bwkey
AND matnr = <fs_mbew>-matnr.
gs_detalle-werks = gs_ajuste-werks. "Centro
gs_detalle-matnr = gs_ajuste-matnr. "Material
gs_detalle-fecha = gv_ff. "Fecha
gs_detalle-mblnr = space. "N Logistica = N de documento de material
gs_detalle-mblnrori = gs_ajuste-belnr. "N Contab = N de documento contable
gs_detalle-ztipo_comp = space. "Tipo
gs_detalle-serie = space.
gs_detalle-ztipo_ope = '99'. "Tipo de Operacion SUNAT
"Entradas, Salidas y Saldo Final
gs_detalle-cost_in = gs_ajuste-dmbtrs.
gs_detalle-cost_out = gs_ajuste-dmbtrh.

gs_detalle-cost_fin = gs_detalle-cost_in - gs_detalle-cost_out.


APPEND gs_detalle TO gtd_detalle.
ENDLOOP.
ENDLOOP.
* Se eliminan los materiales que no tengan saldo inicial y movimiento
SORT gtd_cabec ASCENDING BY werks matnr.
* SORT gtd_detalle ASCENDING BY werks matnr mblnrori. "/@MCT100811 Ordenamiento
antiguo: werks matnr fecha mblnr
* SORT gtd_detalle ASCENDING BY werks ASCENDING matnr ASCENDING fecha ASCENDING
mblnrori DESCENDING. "/@MCT020113 Ordenamiento antiguo: werks matnr mblnrori
*******
* REFRESH: gtd_det_aux.
* gtd_det_aux[] = gtd_detalle[].
* DELETE gtd_det_aux WHERE serie IS INITIAL
*
AND mblnrori IS NOT INITIAL.
*******
SORT gtd_detalle ASCENDING BY werks matnr fecha cpudt cputm.
CLEAR: gs_cabec, gs_detalle, gv_ind, gv_cant.
DESCRIBE TABLE gtd_detalle LINES gv_cant.
LOOP AT gtd_detalle INTO gs_detalle.
CLEAR: gv_indaux.
gv_ind = sy-tabix.
IF gv_ind = gv_cant. "Cuando solo hay un registro o cuando sea el ultimo reg
istro
IF gs_detalle-ztipo_ope = '16' AND
gs_detalle-cant_in = 0 AND gs_detalle-cosu_in = 0 AND gs_detalle-cost_
in = 0 AND
gs_detalle-cant_out = 0 AND gs_detalle-cosu_out = 0 AND gs_detalle-cost_
out = 0. "Sin saldo inicial
DELETE gtd_detalle INDEX gv_ind. "Se borra del detalle
READ TABLE gtd_cabec INTO gs_cabec WITH KEY werks = gs_detalle-werks
matnr = gs_detalle-matnr.
IF sy-subrc = 0.
DELETE gtd_cabec INDEX sy-tabix. " Se borra de la cabecera
ENDIF.
ENDIF.
ELSEIF gs_detalle-ztipo_ope = '16' AND
gs_detalle-cant_in = 0 AND gs_detalle-cosu_in = 0 AND gs_detalle-cost_in
= 0 AND
gs_detalle-cant_out = 0 AND gs_detalle-cosu_out = 0 AND gs_detalle-cost_ou
t = 0. "Sin saldo inicial
gv_indaux = gv_ind + 1.
READ TABLE gtd_detalle INTO gs_detaux INDEX gv_indaux. "En el siguiente re
gistro
IF sy-subrc = 0.
IF gs_detaux-ztipo_ope = '16'. "Si es saldo inicial (de otro material)
DELETE gtd_detalle INDEX gv_ind. "Se borra del detalle
READ TABLE gtd_cabec INTO gs_cabec WITH KEY werks = gs_detalle-werks
matnr = gs_detalle-matnr.
IF sy-subrc = 0.
DELETE gtd_cabec INDEX sy-tabix. "Se borra de la cabecera
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*/.. 13.02.2015
*
MODIFY gtd_detalle INDEX gv_ind FROM gs_detalle.
ENDLOOP.

*LOOP AT gtd_detalle ASSIGNING <fs_detalle>.


* w_pos = sy-tabix.
**/.. ADD SERIE - @HVLL22122014KARDEX
*
IF <fs_detalle>-serie = '' OR <fs_detalle>-serie IS INITIAL.
*
IF NOT gtd_detalle-mblnr IS INITIAL.
*
CLEAR W_XBLNR.
*
SELECT SINGLE XBLNR INTO W_XBLNR
*
FROM MKPF
*
WHERE MBLNR = <fs_detalle>-mblnr
*
AND MJAHR = <fs_detalle>-FECHA(4).
*
IF SY-SUBRC = 0.
*
CLEAR W_VBELN.
*
SELECT SINGLE VBELN INTO W_VBELN
*
FROM VBFA
*
WHERE VBELV = W_XBLNR
*
AND VBTYP_N = 'M'.
*
IF SY-SUBRC = 0.
*
CLEAR W_REFE.
*
SELECT SINGLE XBLNR INTO W_REFE
*
FROM VBRK
*
WHERE VBELN = W_VBELN.
*
IF SY-SUBRC = 0.
*
<fs_detalle>-serie = W_REFE.
*
ELSE.
*
ENDIF.
*
ELSE.
*
<fs_detalle>-serie = W_XBLNR.
*
ENDIF.
*
ELSE.
*
ENDIF.
*
ELSEIF NOT <fs_detalle>-mblnrori IS INITIAL AND <fs_detalle>-mblnr IS INI
TIAL.
*
CLEAR W_XBLPF.
*
SELECT SINGLE XBLNR INTO W_XBLPF
*
FROM BKPF
*
WHERE BUKRS = P_BUKRS
*
AND BELNR = <fs_detalle>-mblnrori
*
AND GJAHR = <fs_detalle>-FECHA(4).
*
IF SY-SUBRC = 0.
*
<fs_detalle>-serie = W_XBLPF.
*
ELSE.
*
ENDIF.
*
ENDIF.
*
ELSE.
*
ENDIF.
*
MODIFY gtd_detalle INDEX w_pos FROM <fs_detalle>.
* ENDLOOP.
* Se eliminan los centros que no tienen materiales
gtd_cabaux = gtd_cabec.
DELETE ADJACENT DUPLICATES FROM gtd_cabaux COMPARING werks.
CLEAR: gv_ind, gs_t001k.
LOOP AT gtd_t001k INTO gs_t001k.
gv_ind = sy-tabix.
READ TABLE gtd_cabaux INTO gs_cabec WITH KEY werks = gs_t001k-bwkey.
IF sy-subrc NE 0.
DELETE gtd_t001k INDEX gv_ind.
ENDIF.

ENDLOOP.
REFRESH: gtd_cabaux.
* Kardex Precio del promedio ponderado
IF p_karppp EQ 'X'.

SELECT ckmlhd~kalnr ckmlhd~matnr ckmlhd~bwkey ckmlcr~bdatj


ckmlcr~poper ckmlpp~lbkum ckmlcr~pvprs ckmlcr~salkv
ckmlpp~umkumo ckmlpp~abkumo ckmlpp~zukumo
ckmlcr~poper ckmlcr~pvprs ckmlcr~salkv
INTO TABLE gtd_kardex_ppp
FROM ckmlhd INNER JOIN ckmlcr
ON ckmlcr~kalnr EQ ckmlhd~kalnr
INNER JOIN ckmlpp
ON ckmlpp~kalnr EQ ckmlcr~kalnr
AND ckmlpp~bdatj EQ ckmlcr~bdatj
AND ckmlpp~poper EQ ckmlcr~poper
WHERE ckmlhd~matnr IN p_matnr
AND ckmlhd~bwkey IN p_werks
AND ckmlcr~bdatj EQ p_gjahr
AND ckmlcr~poper EQ p_monat
AND ckmlcr~curtp EQ '10'.

LOOP AT gtd_detalle ASSIGNING <fs_det>.


READ TABLE gtd_kardex_ppp ASSIGNING <fs_ppp> WITH TABLE KEY matnr = <fs_de
t>-matnr
bwkey = <fs_de
t>-werks.
IF sy-subrc EQ 0.
IF <fs_ppp>-salkv EQ space.
<fs_det>-cosu_in = <fs_ppp>-pvprs.
<fs_det>-cost_in = <fs_det>-cant_in * <fs_ppp>-pvprs.
<fs_det>-cosu_out = <fs_ppp>-pvprs.
<fs_det>-cost_out = <fs_det>-cant_in * <fs_ppp>-pvprs.
ELSE.
*
<fs_det>-cosu_in = <fs_ppp>-salkv / <fs_ppp>-lbkum.
*
<fs_det>-cost_in = <fs_det>-cant_in * ( <fs_ppp>-salkv / <fs_ppp>-lbk
um ).
*
<fs_det>-cosu_out = <fs_ppp>-salkv / <fs_ppp>-lbkum.
*
<fs_det>-cost_out = <fs_det>-cant_out * ( <fs_ppp>-salkv / <fs_ppp>-l
bkum ).
IF <fs_det>-ztipo_ope NE '16'.
<fs_det>-cosu_in = <fs_ppp>-salkv / <fs_ppp>-zukumo.
<fs_det>-cost_in = <fs_det>-cant_in * ( <fs_ppp>-salkv / <fs_ppp>-zu
kumo ).
<fs_det>-cosu_out = <fs_ppp>-salkv / <fs_ppp>-lbkum.
<fs_det>-cost_out = <fs_det>-cant_out * ( <fs_ppp>-salkv / <fs_ppp>lbkum ).
ENDIF.
ENDIF.
ENDIF.
IF <fs_det>-cant_in EQ 0.
<fs_det>-cosu_in = 0.
ENDIF.
IF <fs_det>-cant_out EQ 0.
<fs_det>-cosu_out = 0.
ENDIF.

AT NEW matnr.
<fs_det>-cant_tot = <fs_det>-cant_in - <fs_det>-cant_out.
<fs_det>-cost_fin = <fs_det>-cost_in - <fs_det>-cost_out.
IF <fs_det>-cant_tot NE 0.
<fs_det>-cosu_fin = <fs_det>-cost_fin / <fs_det>-cant_tot.
ELSE.
<fs_det>-cosu_fin = 0.
ENDIF.
gv_cant_ant = <fs_det>-cant_tot.
gv_cost_ant = <fs_det>-cost_fin.
CONTINUE.
ENDAT.
<fs_det>-cant_tot = gv_cant_ant + <fs_det>-cant_in - <fs_det>-cant_out.
<fs_det>-cost_fin = gv_cost_ant + <fs_det>-cost_in - <fs_det>-cost_out.
IF <fs_det>-cant_tot NE 0.
<fs_det>-cosu_fin = <fs_det>-cost_fin / <fs_det>-cant_tot.
ELSE.
<fs_det>-cosu_fin = 0.
ENDIF.
gv_cant_ant = <fs_det>-cant_tot.
gv_cost_ant = <fs_det>-cost_fin.

*
AT END OF matnr.
CLEAR: gv_cant_ant, gv_cost_ant.
ENDAT.
ENDLOOP.
ENDIF.
*/..
* LOOP AT gtd_detalle ASSIGNING <fs_det>.
*
N_POS = SY-TABIX.
**/.. ADD SERIE - @HVLL22122014KARDEX
*
IF <fs_det>-serie = '' OR <fs_det>-serie IS INITIAL.
*
IF NOT <fs_det>-mblnr IS INITIAL.
*
CLEAR W_XBLNR.
*
SELECT SINGLE XBLNR INTO W_XBLNR
*
FROM MKPF
*
WHERE MBLNR = <fs_det>-mblnr
*
AND MJAHR = <fs_det>-FECHA(4).
*
IF SY-SUBRC = 0.
*
CLEAR W_VBELN.
*
SELECT SINGLE VBELN INTO W_VBELN
*
FROM VBFA
*
WHERE VBELV = W_XBLNR
*
AND VBTYP_N = 'M'.
*
IF SY-SUBRC = 0.
*
CLEAR W_REFE.
*
SELECT SINGLE XBLNR INTO W_REFE
*
FROM VBRK
*
WHERE VBELN = W_VBELN.
*
IF SY-SUBRC = 0.
*
<fs_det>-serie = W_REFE.
*
ELSE.
*
ENDIF.
*
ELSE.
*
<fs_det>-serie = W_XBLNR.
*
ENDIF.
*
ELSE.

*
ENDIF.
*
ELSEIF NOT <fs_det>-mblnrori IS INITIAL AND <fs_det>-mblnr IS INITIAL.
*
CLEAR W_XBLPF.
*
SELECT SINGLE XBLNR INTO W_XBLPF
*
FROM BKPF
*
WHERE BUKRS = P_BUKRS
*
AND BELNR = <fs_det>-mblnrori
*
AND GJAHR = <fs_det>-FECHA(4).
*
IF SY-SUBRC = 0.
*
<fs_det>-serie = W_XBLPF.
*
ELSE.
*
ENDIF.
*
ENDIF.
*
ELSE.
*
ENDIF.
*
MODIFY gtd_detalle INDEX N_POS FROM <fs_det>.
* ENDLOOP.
ENDFORM.
" CARGAR_DATOS
*&---------------------------------------------------------------------*
*&
FORM SALIDA_DET
*&---------------------------------------------------------------------*
FORM salida_det .
CLEAR: gv_matnr, gs_t001k, gs_cabec, gs_detalle.
CLEAR: gv_costsalini_soc, "Suma Saldo Inicial x Sociedad
gv_costin_soc, "Suma Costo Entrada x Sociedad
gv_costout_soc, "Suma Costo Salida x Sociedad
gv_costfin_soc. "Suma Saldo Final x Sociedad
CLEAR: gv_cantsalini_soc, "Suma Saldo Inicial Cantidad x Sociedad
gv_cantin_soc, "Suma Cantidad Entrada x Sociedad
gv_cantout_soc, "Suma Cantidad Salida x Sociedad
gv_cantfin_soc. "Suma Saldo Final Cantidad x Sociedad
LOOP AT gtd_t001k INTO gs_t001k.
CLEAR: gv_costsalini_cen, "Suma Saldo Inicial x Centro
gv_costin_cen, "Suma Costo Entrada x Centro
gv_costout_cen, "Suma Costo Salida x Centro
gv_costfin_cen. "Suma Saldo Final x Centro
CLEAR: gv_cantsalini_cen, "Suma Saldo Inicial Cantidad x Centro
gv_cantin_cen, "Suma Cantidad Entrada x Centro
gv_cantout_cen, "Suma Cantidad Salida x Centro
gv_cantfin_cen. "Suma Saldo Final Cantidad x Centro
LOOP AT gtd_cabec INTO gs_cabec WHERE werks = gs_t001k-bwkey.
CLEAR: gv_cantin_mat, "Suma Cantidad Entrada x Material
gv_costin_mat, "Suma Costo Entrada x Material
gv_cantout_mat, "Suma Cantidad Salida x Material
gv_costout_mat, "Suma Costo Salida x Material
gv_cantfin_mat, "Suma Cantidad Final x Material
gv_costfin_mat, "Suma Saldo Final x Material
gv_acum_cantfin_mat, "Acumulador Cantidad Final x Material
gv_acum_cosufin_mat, "Costo Unitario Final x Material "Acumulado"
gv_acum_costfin_mat. "Acumulador Costo Final x Material
PERFORM cabecera_material.
IF p_karva = 'X' OR p_karppp EQ 'X'.
LOOP AT gtd_detalle INTO gs_detalle WHERE werks = gs_cabec-werks
AND matnr = gs_cabec-matnr.
WRITE : /1 sy-vline.

*
*
*

IF gs_detalle-fecha NE '00000000'.
WRITE : 2 gs_detalle-fecha.
ENDIF.
IF p_karppp EQ 'X'.
gv_acum_cantfin_mat = gv_acum_cantfin_mat + gs_detalle-cant_tot.
gv_acum_costfin_mat = gs_detalle-cost_fin.
ELSE.
gv_acum_cantfin_mat = gv_acum_cantfin_mat + gs_detalle-cant_tot.
gv_acum_costfin_mat = gv_acum_costfin_mat + gs_detalle-cost_fin.
ENDIF.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
gv_acum_cosufin_mat = gv_acum_costfin_mat / gv_acum_cantfin_mat.
ENDCATCH.
IF sy-subrc = 5.
gv_acum_cosufin_mat = '0.00'.
ENDIF.
WRITE : 12 sy-vline,
13 gs_detalle-serie, 29 sy-vline,
30 gs_detalle-mblnr, 41 sy-vline,
42 gs_detalle-mblnrori, 53 sy-vline,
13 gs_detalle-ztipo_comp, 25 sy-vline,
26 gs_detalle-serie, 42 sy-vline,
43 gs_detalle-mblnr, 53 sy-vline,
54 gs_detalle-ztipo_ope, 64 sy-vline,
65 gs_detalle-cant_in, 81 sy-vline,
82 gs_detalle-cosu_in, 98 sy-vline,
99 gs_detalle-cost_in, 115 sy-vline,
116 gs_detalle-cant_out, 132 sy-vline,
133 gs_detalle-cosu_out, 149 sy-vline,
150 gs_detalle-cost_out, 166 sy-vline,
167 gv_acum_cantfin_mat, 183 sy-vline,
184 gv_acum_cosufin_mat, 200 sy-vline,
201 gv_acum_costfin_mat, 217 sy-vline.

gv_cantin_mat = gv_cantin_mat +
rada x Material
gv_costin_mat = gv_costin_mat +
a x Material
gv_cantout_mat = gv_cantout_mat
Salida x Material
gv_costout_mat = gv_costout_mat
ida x Material
gv_cantfin_mat = gv_cantfin_mat
Final x Material
gv_costfin_mat = gv_costfin_mat
al x Material

gs_detalle-cant_in. "Suma Cantidad Ent


gs_detalle-cost_in. "Suma Costo Entrad
+ gs_detalle-cant_out. "Suma Cantidad
+ gs_detalle-cost_out. "Suma Costo Sal
+ gs_detalle-cant_tot. "Suma Cantidad
+ gs_detalle-cost_fin. "Suma Saldo Fin

IF gs_detalle-ztipo_ope = '16'.
gv_costsalini_cen = gv_costsalini_cen + gs_detalle-cost_in. "Suma S
aldo Inicial x Centro
ELSE.
gv_costin_cen = gv_costin_cen + gs_detalle-cost_in. "Suma Costo Ent
rada x Centro
ENDIF.
ENDLOOP.
ELSEIF p_karun = 'X'.
LOOP AT gtd_detalle INTO gs_detalle WHERE werks = gs_cabec-werks
AND matnr = gs_cabec-matnr.
gv_acum_cantfin_mat = gv_acum_cantfin_mat + gs_detalle-cant_tot.

*
*
*

WRITE : /1 sy-vline,
2 gs_detalle-fecha, 12 sy-vline,
13 gs_detalle-serie, 29 sy-vline,
30 gs_detalle-mblnr, 41 sy-vline,
42 gs_detalle-mblnrori, 53 sy-vline,
13 gs_detalle-ztipo_comp, 25 sy-vline,
26 gs_detalle-serie, 42 sy-vline,
43 gs_detalle-mblnr, 53 sy-vline,
54 gs_detalle-ztipo_ope, 64 sy-vline,
65 gs_detalle-cant_in, 81 sy-vline,
82 gs_detalle-cant_out, 98 sy-vline,
99 gv_acum_cantfin_mat, 115 sy-vline.

gv_cantin_mat = gv_cantin_mat + gs_detalle-cant_in. "Suma Cantidad


Entrada x Material
gv_cantout_mat = gv_cantout_mat + gs_detalle-cant_out. "Suma Cantidad
Salida x Material
gv_cantfin_mat = gv_cantfin_mat + gs_detalle-cant_tot. "Suma Cantidad
Final x Material
IF gs_detalle-ztipo_ope = '16'.
gv_cantsalini_cen = gv_cantsalini_cen + gs_detalle-cant_in. "Suma S
aldo Inicial Cantidad x Centro
ELSE.
gv_cantin_cen = gv_cantin_cen + gs_detalle-cant_in. "Suma Cantidad
Entrada x Centro
ENDIF.
ENDLOOP.
ENDIF.
IF p_karva EQ 'X' OR p_karppp EQ 'X'.
WRITE : /1 sy-vline, 217 sy-vline.
ULINE AT 2(215).
ELSEIF p_karun EQ 'X'.
WRITE : /1 sy-vline, 115 sy-vline.
ULINE AT 2(113).
ENDIF.
IF p_karva EQ 'X' OR p_karppp EQ 'X'.
WRITE: /64 sy-vline, 217 sy-vline.
ULINE AT 64(153).
IF p_karppp EQ 'X'.
gv_costfin_mat = gv_costin_mat - gv_costout_mat.
ENDIF.
WRITE: /49 'TOTAL MATERIAL', 64 sy-vline,
65 gv_cantin_mat, 81 sy-vline,
82 '
' COLOR COL_KEY, 98 sy-vline,
99 gv_costin_mat, 115 sy-vline,
116 gv_cantout_mat, 132 sy-vline,
133 '
' COLOR COL_KEY, 149 sy-vline,
150 gv_costout_mat, 166 sy-vline,
167 gv_cantfin_mat, 183 sy-vline,
184 '
' COLOR COL_KEY, 200 sy-vline,
201 gv_costfin_mat, 217 sy-vline.
WRITE: /64 sy-vline, 217 sy-vline.
ULINE AT 64(153).
gv_costout_cen = gv_costout_cen + gv_costout_mat. "Suma Costo Salida x C

entro
gv_costfin_cen = gv_costfin_cen + gv_costfin_mat. "Suma Saldo Final x Ma
terial
ELSEIF p_karun EQ 'X'.
WRITE: /64 sy-vline, 115 sy-vline.
ULINE AT 64(51).
WRITE: /49 'TOTAL MATERIAL', 64 sy-vline,
65 gv_cantin_mat, 81 sy-vline,
82 gv_cantout_mat, 98 sy-vline,
99 gv_cantfin_mat, 115 sy-vline.
WRITE: /64 sy-vline, 115 sy-vline.
ULINE AT 64(51).
gv_cantout_cen = gv_cantout_cen + gv_cantout_mat. "Suma Cantidad Salida
x Centro
gv_cantfin_cen = gv_cantfin_cen + gv_cantfin_mat. "Suma Saldo Final Cant
idad x Material
ENDIF.
IF sy-linno > 43.
NEW-PAGE.
ELSE.
SKIP 1.
ENDIF.
ENDLOOP.
IF p_karva = 'X' OR p_karppp EQ 'X'.
WRITE: /64 sy-vline, 132 sy-vline.
ULINE AT 65(68).
WRITE: /49 'TOTAL CENTRO', 64 sy-vline,
65 'SALDO INICIAL', 81 sy-vline,
82 'ENTRADAS', 98 sy-vline,
99 'SALIDAS' , 115 sy-vline,
116 'SALDO FINAL', 132 sy-vline.
WRITE: /64 sy-vline, 132 sy-vline.
ULINE AT 65(68).
WRITE: /64 sy-vline,
65 gv_costsalini_cen, 81 sy-vline,
82 gv_costin_cen, 98 sy-vline,
99 gv_costout_cen, 115 sy-vline,
116 gv_costfin_cen, 132 sy-vline.
WRITE: /64 sy-vline, 132 sy-vline.
ULINE AT 65(68).
gv_costsalini_soc = gv_costsalini_soc + gv_costsalini_cen. "Suma Saldo Ini
cial x Sociedad
gv_costin_soc = gv_costin_soc + gv_costin_cen. "Suma Costo Entrada x So
ciedad
gv_costout_soc = gv_costout_soc + gv_costout_cen. "Suma Costo Salida x Soc
iedad
gv_costfin_soc = gv_costfin_soc + gv_costfin_cen. "Suma Saldo Final x Soci
edad

ELSE.
WRITE: /64 sy-vline, 132 sy-vline.
ULINE AT 65(68).
WRITE: /49 'TOTAL CENTRO', 64 sy-vline,
65 'SALDO INICIAL', 81 sy-vline,
82 'ENTRADAS', 98 sy-vline,
99 'SALIDAS' , 115 sy-vline,
116 'SALDO FINAL', 132 sy-vline.
WRITE: /64 sy-vline, 132 sy-vline.
ULINE AT 65(68).
WRITE: /64 sy-vline,
65 gv_cantsalini_cen, 81 sy-vline,
82 gv_cantin_cen, 98 sy-vline,
99 gv_cantout_cen, 115 sy-vline,
116 gv_cantfin_cen, 132 sy-vline.
WRITE: /64 sy-vline, 132 sy-vline.
ULINE AT 65(68).
gv_cantsalini_soc = gv_cantsalini_soc + gv_cantsalini_cen. "Suma Saldo Ini
cial Cantidad x Sociedad
gv_cantin_soc = gv_cantin_soc + gv_cantin_cen. "Suma Cantidad Entrada x
Sociedad
gv_cantout_soc = gv_cantout_soc + gv_cantout_cen. "Suma Cantidad Salida x
Sociedad
gv_cantfin_soc = gv_cantfin_soc + gv_cantfin_cen. "Suma Saldo Final Cantid
ad x Sociedad
ENDIF.
NEW-PAGE.
ENDLOOP.
IF p_karva = 'X' OR p_karppp EQ 'X'.
CLEAR: gs_cabec-estab.
NEW-PAGE.
SKIP 2.
WRITE: /64 sy-vline, 132 sy-vline.
ULINE AT 65(68).
WRITE: /49 'TOTAL FINAL', 64 sy-vline,
65 'SALDO INICIAL', 81 sy-vline,
82 'ENTRADAS', 98 sy-vline,
99 'SALIDAS' , 115 sy-vline,
116 'SALDO FINAL', 132 sy-vline.
WRITE: /64 sy-vline, 132 sy-vline.
ULINE AT 65(68).
WRITE: /64 sy-vline,
65 gv_costsalini_soc, 81 sy-vline,
82 gv_costin_soc, 98 sy-vline,
99 gv_costout_soc, 115 sy-vline,
116 gv_costfin_soc, 132 sy-vline.

WRITE: /64 sy-vline, 132 sy-vline.


ULINE AT 65(68).
ELSE.
CLEAR: gs_cabec-estab.
NEW-PAGE.
SKIP 2.
WRITE: /64 sy-vline, 132 sy-vline.
ULINE AT 65(68).
WRITE: /49 'TOTAL FINAL', 64 sy-vline,
65 'SALDO INICIAL', 81 sy-vline,
82 'ENTRADAS', 98 sy-vline,
99 'SALIDAS' , 115 sy-vline,
116 'SALDO FINAL', 132 sy-vline.
WRITE: /64 sy-vline, 132 sy-vline.
ULINE AT 65(68).
WRITE: /64 sy-vline,
65 gv_cantsalini_soc, 81 sy-vline,
82 gv_cantin_soc, 98 sy-vline,
99 gv_cantout_soc, 115 sy-vline,
116 gv_cantfin_soc, 132 sy-vline.
WRITE: /64 sy-vline, 132 sy-vline.
ULINE AT 65(68).
ENDIF.
ENDFORM.
" SALIDA_DET
*&---------------------------------------------------------------------*
*&
FORM CABECERA_MATERIAL
*&---------------------------------------------------------------------*
FORM cabecera_material .
CLEAR: gv_txtun.
CONCATENATE gs_cabec-zundmed '-' gs_cabec-textum INTO gv_txtun SEPARATED BY sp
ace. "Und. de Medida SUNAT + Texto Und. de Medida
* Lnea del Material
WRITE: /2 'NMAT.:', gs_cabec-matnr,
AT 25 'DESCRIP.:', gs_cabec-maktx,
AT 82 'TIPO:', gs_cabec-tipo_mat,
AT 122 'UND.MED.:', gv_txtun,
AT 162 'MET.VAL:', gs_cabec-met_val.
* Ttulo de columnas
IF p_karva = 'X' OR p_karppp EQ 'X'.
WRITE : /1 sy-vline, 217 sy-vline.
ULINE AT 2(215).
WRITE : /1 sy-vline,
2 '

DOCUMENTO INTERNO

,
54 ' TIPO DE ', 64 sy-vline,
65 '
ENTRADAS', 115 sy-vline,

', 53 sy-vline

116 '
167 '

SALIDAS', 166 sy-vline,


SALDO FINAL', 217 sy-vline.

WRITE: /1 sy-vline, 53 sy-vline, 64 sy-vline, 115 sy-vline, 166 sy-vline, 21


7 sy-vline.
ULINE AT 2(51).
ULINE AT 64(153).
WRITE : /1 sy-vline,
2 ' FECHA', 12 sy-vline,
13 'TIP|SERIE|NUMERO', 29 sy-vline, "/@MCT1010811 '
y-vline,
30 'N LOGIST.', 41 sy-vline,
42 'N INTERNO', 53 sy-vline,
*
13 '
TIPO', 25 sy-vline,
*
26 '
SERIE', 42 sy-vline,
*
43 ' NUMERO', 53 sy-vline,
54 'OPERACION', 64 sy-vline,
65 '
CANTIDAD', 81 sy-vline,
82 ' COSTO UNITARIO', 98 sy-vline,
99 ' COSTO TOTAL', 115 sy-vline,
116 '
CANTIDAD', 132 sy-vline,
133 ' COSTO UNITARIO', 149 sy-vline,
150 ' COSTO TOTAL', 166 sy-vline,
167 '
CANTIDAD', 183 sy-vline,
184 ' COSTO UNITARIO', 200 sy-vline,
201 ' COSTO TOTAL', 217 sy-vline.

N SUNAT', 29 s

WRITE : /1 sy-vline, 217 sy-vline.


ULINE AT 2(215).
ELSEIF p_karun = 'X'.
WRITE : /1 sy-vline, 115 sy-vline.
ULINE AT 2(113).
WRITE : /1 sy-vline,
2 '
DOCUMENTO INTERNO', 53 sy-vline,
54 ' TIPO DE ', 64 sy-vline,
65 '
ENTRADAS', 81 sy-vline,
82 '
SALIDAS', 98 sy-vline,
99 ' SALDO FINAL', 115 sy-vline.
WRITE: /1 sy-vline, 53 sy-vline, 64 sy-vline, 81 sy-vline, 98 sy-vline, 115
sy-vline.
ULINE AT 2(51).

*
*
*

WRITE : /1 sy-vline,
2 ' FECHA', 12 sy-vline,
13 '
N SUNAT', 29 sy-vline,
30 'N LOGIST.', 41 sy-vline,
42 'N CONTAB.', 53 sy-vline,
13 ' TIPO', 25 sy-vline,
26 '
SERIE', 42 sy-vline,
43 ' NUMERO', 53 sy-vline,
54 'OPERACION', 64 sy-vline,
81 sy-vline,
98 sy-vline,
115 sy-vline.
WRITE : /1 sy-vline, 115 sy-vline.
ULINE AT 2(113).

ENDIF.
ENDFORM.
" CABECERA_MATERIAL
*---------------------------------------------------------------------*
* TOP-OF-PAGE
*---------------------------------------------------------------------*
TOP-OF-PAGE.
WRITE sy-pagno TO gv_pagno LEFT-JUSTIFIED.
IF p_karva = 'X' OR p_karppp EQ 'X'.
WRITE: 'FORMATO 13.1: REGISTRO DEL INVENTARIO PERMANENTE VALORIZADO, DETALLE
DEL INVENTARIO VALORIZADO'.
ELSEIF p_karun = 'X'.
WRITE: 'FORMATO 12.1: REGISTRO DEL INVENTARIO PERMANENTE EN UNIDADES FISICAS
, DETALLE DEL INVENTARIO PERMANENTE EN UNID. FISICAS'.
ENDIF.
WRITE: /,
/1 'PERIODO
:', AT 18 p_gjahr, AT 23 '-', AT 25 p_monat, AT 160
'Fecha: ', AT 167 p_fecha,
/1 'RUC
:', AT 18 gv_ruc, AT 160 'Pag. : ', AT 167 gv_pagno,
AT 175 'de', AT 179 '**',
/1 'RAZON SOCIAL :', AT 18 gv_razon.
IF NOT gs_cabec-estab IS INITIAL.
WRITE: /1 'ESTABLECIMIENTO:', AT 18 gs_cabec-estab.
ENDIF.
WRITE: /.
IF gs_cabec-matnr EQ gv_matnr.
PERFORM cabecera_material.
ENDIF.
CLEAR gv_matnr.
*---------------------------------------------------------------------*
* END-OF-PAGE
*---------------------------------------------------------------------*
END-OF-PAGE.
gv_matnr = gs_cabec-matnr.
IF p_karva EQ 'X' OR p_karppp EQ 'X'.
ULINE AT 1(217).
SKIP.
ELSEIF p_karun EQ 'X'.
ULINE AT 1(115).
SKIP.
ENDIF.
*--------------------------------------------------------------------* AT LINE SELECTION
*--------------------------------------------------------------------AT LINE-SELECTION.
DATA: lv_num(10) TYPE c.
IF sy-cucol GE 41 AND sy-cucol LE 51.
SET PARAMETER ID 'BUK' FIELD p_bukrs.
SET PARAMETER ID 'BLN' FIELD sy-lisel+41(10).
SET PARAMETER ID 'GJR' FIELD p_gjahr.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ELSEIF sy-cucol GE 29 AND sy-cucol LE 39.
SET PARAMETER ID 'MBN' FIELD sy-lisel+29(10).
SET PARAMETER ID 'MJA' FIELD p_gjahr.
CALL TRANSACTION 'MB03' AND SKIP FIRST SCREEN.
ENDIF.
*&---------------------------------------------------------------------*
*&
FORM TOTAL_PAGINAS
*&---------------------------------------------------------------------*

FORM total_paginas .
DO sy-pagno TIMES.
READ LINE 4 OF PAGE sy-index.
REPLACE '**' WITH gv_pagno INTO sy-lisel.
MODIFY LINE 4 OF PAGE sy-index.
ENDDO.
ENDFORM.
" TOTAL_PAGINAS
*&---------------------------------------------------------------------*
*&
FORM PREPARAR_ALV
*&---------------------------------------------------------------------*
FORM preparar_alv .
CLEAR: gs_cabec, gs_detalle.
REFRESH: gtd_gest.
LOOP AT gtd_cabec INTO gs_cabec.
LOOP AT gtd_detalle INTO gs_detalle WHERE werks = gs_cabec-werks
AND matnr = gs_cabec-matnr.
CLEAR: gs_gest.
MOVE-CORRESPONDING gs_cabec TO gs_gest.
MOVE-CORRESPONDING gs_detalle TO gs_gest.
APPEND gs_gest TO gtd_gest.
ENDLOOP.
ENDLOOP.
ENDFORM.
" PREPARAR_ALV
*&---------------------------------------------------------------------*
*&
FORM SALIDA_IMPRESA
*&---------------------------------------------------------------------*
FORM salida_impresa .
DATA: ls_output TYPE ssfcompop,
ls_contrl TYPE ssfctrlop,
lv_per(10) TYPE c,
lv_titulo TYPE char200.
ls_contrl-no_dialog
ls_contrl-device
ls_contrl-preview
ls_contrl-langu
ls_output-bcs_langu
ls_output-tddest
ls_output-tdnewid
ls_output-tdimmed
ls_output-tdcopies

=
=
=
=
=
=
=
=
=

' '.
'PRINTER'.
'X'.
sy-langu.
sy-langu.
p_print.
'X'.
'X'.
1.

IF p_karva = 'X' OR p_karppp EQ 'X'.


gv_formname = 'ZFIPES_LIB08'.
lv_titulo = 'FORMATO 13.1: REGISTRO DEL INVENTARIO PERMANENTE VALORIZADO,
DETALLE DEL INVENTARIO VALORIZADO'.
ELSEIF p_karun = 'X'.
gv_formname = 'ZFIPES_LIB16'.
lv_titulo = 'FORMATO 12.1: REGISTRO DEL INVENTARIO PERMANENTE EN UNIDADES
FISICAS, DETALLE DEL INVENTARIO PERMANENTE EN UNID. FISICAS'.
ENDIF.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname
= gv_formname
IMPORTING
fm_name
= gv_fm_name
EXCEPTIONS
no_form
= 1
no_function_module = 2

OTHERS

= 3.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CLEAR: gv_costsalini_soc, "Suma Saldo Inicial x Sociedad
gv_costin_soc, "Suma Costo Entrada x Sociedad
gv_costout_soc, "Suma Costo Salida x Sociedad
gv_costfin_soc. "Suma Saldo Final x Sociedad
CLEAR: gv_cantsalini_soc, "Suma Saldo Inicial Cantidad x Sociedad
gv_cantin_soc, "Suma Cantidad Entrada x Sociedad
gv_cantout_soc, "Suma Cantidad Salida x Sociedad
gv_cantfin_soc. "Suma Saldo Final Cantidad x Sociedad
LOOP AT gtd_t001k INTO gs_t001k.
CLEAR: gv_costsalini_cen, "Suma Saldo Inicial x Centro
gv_costin_cen, "Suma Costo Entrada x Centro
gv_costout_cen, "Suma Costo Salida x Centro
gv_costfin_cen. "Suma Saldo Final x Centro
CLEAR: gv_cantsalini_cen, "Suma Saldo Inicial Cantidad x Centro
gv_cantin_cen, "Suma Cantidad Entrada x Centro
gv_cantout_cen, "Suma Cantidad Salida x Centro
gv_cantfin_cen. "Suma Saldo Final Cantidad x Centro
CONCATENATE p_gjahr '-' p_monat INTO gs_t001k_ssfo-perio SEPARATED BY space.
gs_t001k_ssfo-ruc = gv_ruc.
gs_t001k_ssfo-razon = gv_razon.
CONCATENATE gs_t001k-bwkey '-' gs_t001k-name1 INTO gs_t001k_ssfo-estab SEPAR
ATED BY space.
gs_t001k_ssfo-fecha = p_fecha.
LOOP AT gtd_cabec INTO gs_cabec WHERE werks = gs_t001k-bwkey.
CLEAR: gv_cantin_mat, "Suma Cantidad Entrada x Material
gv_costin_mat, "Suma Costo Entrada x Material
gv_cantout_mat, "Suma Cantidad Salida x Material
gv_costout_mat, "Suma Costo Salida x Material
gv_cantfin_mat, "Suma Cantidad Final x Material
gv_costfin_mat, "Suma Saldo Final x Material
gv_acum_cantfin_mat, "Acumulador Cantidad Final x Material
gv_acum_cosufin_mat, "Costo Unitario Final x Material "Acumulado"
gv_acum_costfin_mat. "Acumulador Costo Final x Material
gs_cabec_ssfo-werks = gs_cabec-werks.
gs_cabec_ssfo-matnr = gs_cabec-matnr.
gs_cabec_ssfo-maktx = gs_cabec-maktx.
gs_cabec_ssfo-tpmat = gs_cabec-tipo_mat.
CONCATENATE gs_cabec-zundmed '-' gs_cabec-textum INTO gs_cabec_ssfo-unmed
SEPARATED BY space.
gs_cabec_ssfo-meval = gs_cabec-met_val.
gs_cabec_ssfo-meins = gs_cabec-meins.
LOOP AT gtd_detalle INTO gs_detalle WHERE werks = gs_cabec-werks
AND matnr = gs_cabec-matnr.
gs_detalle_ssfo-werks = gs_detalle-werks.
gs_detalle_ssfo-matnr = gs_detalle-matnr.
IF gs_detalle-fecha NE '00000000'.
gs_detalle_ssfo-budat = gs_detalle-fecha.
ENDIF.

gv_acum_cantfin_mat = gv_acum_cantfin_mat + gs_detalle-cant_tot.


IF p_karppp EQ 'X'.
gv_acum_costfin_mat = gs_detalle-cost_fin.
ELSE.
gv_acum_costfin_mat = gv_acum_costfin_mat + gs_detalle-cost_fin.
ENDIF.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
gv_acum_cosufin_mat = gv_acum_costfin_mat / gv_acum_cantfin_mat.
ENDCATCH.
IF sy-subrc = 5.
gv_acum_cosufin_mat = '0.00'.
ENDIF.
gs_detalle_ssfo-blart = gs_detalle-ztipo_comp.
gs_detalle_ssfo-xblnr = gs_detalle-serie.
gs_detalle_ssfo-mblnr = gs_detalle-mblnr.
gs_detalle_ssfo-belnr = gs_detalle-mblnrori.
gs_detalle_ssfo-bwart = gs_detalle-ztipo_ope.
gs_detalle_ssfo-meent = gs_detalle-cant_in.
gs_detalle_ssfo-cuent = gs_detalle-cosu_in.
gs_detalle_ssfo-dment = gs_detalle-cost_in.
gs_detalle_ssfo-mesal = gs_detalle-cant_out.
gs_detalle_ssfo-cusal = gs_detalle-cosu_out.
gs_detalle_ssfo-dmsal = gs_detalle-cost_out.
gs_detalle_ssfo-mefin = gv_acum_cantfin_mat.
gs_detalle_ssfo-cufin = gv_acum_cosufin_mat.
gs_detalle_ssfo-dmfin = gv_acum_costfin_mat.
gv_cantin_mat = gv_cantin_mat + gs_detalle-cant_in. "Suma Cantidad Entra
da x Material
gv_costin_mat = gv_costin_mat + gs_detalle-cost_in. "Suma Costo Entrada
x Material
gv_cantout_mat = gv_cantout_mat + gs_detalle-cant_out. "Suma Cantidad Sa
lida x Material
gv_costout_mat = gv_costout_mat + gs_detalle-cost_out. "Suma Costo Salid
a x Material
gv_cantfin_mat = gv_cantfin_mat + gs_detalle-cant_tot. "Suma Cantidad Fi
nal x Material
IF p_karppp EQ 'X'.
gv_costfin_mat = gs_detalle-cost_fin. "Suma Saldo Final x Material
ELSE.
gv_costfin_mat = gv_costfin_mat + gs_detalle-cost_fin. "Suma Saldo Fin
al x Material
ENDIF.
IF gs_detalle-ztipo_ope = '16'.
gv_costsalini_cen = gv_costsalini_cen + gs_detalle-cost_in. "Suma Sal
do Inicial x Centro
gv_cantsalini_cen = gv_cantsalini_cen + gs_detalle-cant_in. "Suma Sal
do Inicial Cantidad x Centro
ELSE.
gv_costin_cen = gv_costin_cen + gs_detalle-cost_in. "Suma Costo Entra
da x Centro
gv_cantin_cen = gv_cantin_cen + gs_detalle-cant_in. "Suma Cantidad En
trada x Centro
ENDIF.
APPEND gs_detalle_ssfo TO gtd_detalle_ssfo.
CLEAR: gs_detalle_ssfo.

ENDLOOP.
gs_cabec_ssfo-meent
gs_cabec_ssfo-dment
gs_cabec_ssfo-mesal
gs_cabec_ssfo-dmsal
gs_cabec_ssfo-mefin
gs_cabec_ssfo-dmfin

=
=
=
=
=
=

gv_cantin_mat.
gv_costin_mat.
gv_cantout_mat.
gv_costout_mat.
gv_cantfin_mat.
gv_costfin_mat.

gv_costout_cen = gv_costout_cen + gv_costout_mat. "Suma Costo Salida x Cen


tro
gv_costfin_cen = gv_costfin_cen + gv_costfin_mat. "Suma Saldo Final x Mate
rial
gv_cantout_cen = gv_cantout_cen + gv_cantout_mat. "Suma Cantidad Salida x
Centro
gv_cantfin_cen = gv_cantfin_cen + gv_cantfin_mat. "Suma Saldo Final Cantid
ad x Material
APPEND gs_cabec_ssfo TO gtd_cabec_ssfo.
CLEAR: gs_cabec_ssfo.
ENDLOOP.
gs_t001k_ssfo-dmini
gs_t001k_ssfo-dment
gs_t001k_ssfo-dmsal
gs_t001k_ssfo-dmfin

=
=
=
=

gv_costsalini_cen.
gv_costin_cen.
gv_costout_cen.
gv_costfin_cen.

gs_t001k_ssfo-meini
gs_t001k_ssfo-meent
gs_t001k_ssfo-mesal
gs_t001k_ssfo-mefin

=
=
=
=

gv_cantsalini_cen.
gv_cantin_cen.
gv_cantout_cen.
gv_cantfin_cen.

gv_costsalini_soc = gv_costsalini_soc + gv_costsalini_cen. "Suma Saldo Inici


al x Sociedad
gv_costin_soc = gv_costin_soc + gv_costin_cen. "Suma Costo Entrada x Socied
ad
gv_costout_soc = gv_costout_soc + gv_costout_cen. "Suma Costo Salida x Socie
dad
gv_costfin_soc = gv_costfin_soc + gv_costfin_cen. "Suma Saldo Final x Socied
ad
gv_cantsalini_soc = gv_cantsalini_soc + gv_cantsalini_cen. "Suma Saldo Inici
al Cantidad x Sociedad
gv_cantin_soc = gv_cantin_soc + gv_cantin_cen. "Suma Cantidad Entrada x Soc
iedad
gv_cantout_soc = gv_cantout_soc + gv_cantout_cen. "Suma Cantidad Salida x So
ciedad
gv_cantfin_soc = gv_cantfin_soc + gv_cantfin_cen. "Suma Saldo Final Cantidad
x Sociedad
ls_contrl-no_open = 'X'.
ls_contrl-no_close = 'X'.
AT FIRST.
CLEAR ls_contrl-no_open.
ENDAT.
AT LAST.

CLEAR ls_contrl-no_close.
gs_t001k_ssfo-dmini_soc
gs_t001k_ssfo-dment_soc
gs_t001k_ssfo-dmsal_soc
gs_t001k_ssfo-dmfin_soc

=
=
=
=

gv_costsalini_soc.
gv_costin_soc.
gv_costout_soc.
gv_costfin_soc.

gs_t001k_ssfo-meini_soc
gs_t001k_ssfo-meent_soc
gs_t001k_ssfo-mesal_soc
gs_t001k_ssfo-mefin_soc

=
=
=
=

gv_cantsalini_soc.
gv_cantin_soc.
gv_cantout_soc.
gv_cantfin_soc.

ENDAT.
FREE MEMORY ID gv_formname.
EXPORT gs_t001k_ssfo
gtd_cabec_ssfo
gtd_detalle_ssfo
TO MEMORY ID gv_formname.
CALL FUNCTION gv_fm_name
EXPORTING
control_parameters =
output_options
=
user_settings
=
gv_pagno_in
=
gv_titulo
=
IMPORTING
gv_pagno_out
=
EXCEPTIONS
formatting_error =
internal_error
=
send_error
=
user_canceled
=
OTHERS
=

ls_contrl
ls_output
' '
gv_pagno_ssfo
lv_titulo
gv_pagno_ssfo
1
2
3
4
5.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
MESSAGE ID 'ZPEFI' TYPE 'S' NUMBER '003'.
ENDIF.
CLEAR: gs_t001k_ssfo.
FREE: gtd_cabec_ssfo, gtd_cabec_ssfo.
ENDLOOP.
ENDFORM.
" SALIDA_IMPRESA
*&---------------------------------------------------------------------*
*&
FORM SALIDA_EXCEL
*&---------------------------------------------------------------------*
FORM salida_excel .
DATA: lv_txt(150) TYPE c.
CLEAR: gs_excel.
REFRESH: gtd_excel.
IF p_karva = 'X' OR p_karppp EQ 'X'.
gs_excel-titulo = 'FORMATO 13.1: REGISTRO DEL INVENTARIO PERMANENTE VALORIZA

DO, DETALLE DEL INVENTARIO VALORIZADO'.


ELSEIF p_karun = 'X'.
gs_excel-titulo = 'FORMATO 12.1: REGISTRO DEL INVENTARIO PERMANENTE EN UNIDA
DES FISICAS, DETALLE DEL INVENTARIO PERMANENTE EN UNID. FISICAS'.
ENDIF.
APPEND gs_excel TO gtd_excel.
CLEAR: gs_excel.
gs_excel-titulo = space.
APPEND gs_excel TO gtd_excel.
CLEAR: gs_excel.
CONCATENATE 'PERIODO:' p_gjahr '-' p_monat INTO gs_excel-titulo SEPARATED BY s
pace.
APPEND gs_excel TO gtd_excel.
CLEAR: gs_excel.
CONCATENATE 'RUC:' gv_ruc INTO gs_excel-titulo.
APPEND gs_excel TO gtd_excel.
CLEAR: gs_excel.
CONCATENATE 'RAZON SOCIAL:' gv_razon INTO gs_excel-titulo.
APPEND gs_excel TO gtd_excel.
"Titulos de Columnas
CLEAR: gs_excel.
gs_excel-matnr
= 'MATERIAL'.
gs_excel-tipo_mat = 'TIPO'.
gs_excel-maktx
= 'DESCRIPCION'.
gs_excel-zundmed = 'UND. MED.'.
gs_excel-met_val = 'METODO VAL.'.
gs_excel-estab
= 'ESTABLECIMIENTO'.
gs_excel-fecha
= 'FECHA'.
gs_excel-BWART
= 'CL.MOV.'.
* gs_excel-ztipo_comp = 'TIPO'.
gs_excel-serie
= 'N SUNAT'.
gs_excel-mblnr
= 'N LOGISTICA'.
gs_excel-mblnrori = 'N CONTAB'.
gs_excel-ztipo_ope = 'TIPO DE OPERACION'.
gs_excel-cant_in = 'CANTIDAD-ENTRADA'.
gs_excel-cosu_in = 'COSTO UNITARIO-ENTRADA'.
gs_excel-cost_in = 'COSTO TOTAL-ENTRADA.'.
gs_excel-cant_out = 'CANTIDAD-SALIDA'.
gs_excel-cosu_out = 'COSTO UNITARIO-SALIDA'.
gs_excel-cost_out = 'COSTO TOTAL-SALIDA'.
gs_excel-cant_fin = 'CANTIDAD-FINAL'.
gs_excel-cosu_fin = 'COSTO UNITARIO-FINAL'.
gs_excel-cost_fin = 'COSTO TOTAL-FINAL'.
gs_excel-docref
= 'DOC.REFERENCIA'.
APPEND gs_excel TO gtd_excel.
CLEAR: gs_cabec, gs_detalle.
LOOP AT gtd_cabec INTO gs_cabec.
LOOP AT gtd_detalle INTO gs_detalle WHERE werks = gs_cabec-werks
AND matnr = gs_cabec-matnr.
CLEAR: gs_excel.
gs_excel-matnr = gs_cabec-matnr.
gs_excel-tipo_mat = gs_cabec-tipo_mat.
gs_excel-maktx = gs_cabec-maktx.
gs_excel-zundmed = gs_cabec-zundmed.

gs_excel-met_val = gs_cabec-met_val.
gs_excel-BWART
= gs_detalle-BWART.
" 11.12.2014 - @11122014ADD
gs_excel-docref = gs_detalle-serie.
" 11.12.2014 - @11122014ADD
READ TABLE gtd_t001k INTO gs_t001k WITH KEY bwkey = gs_cabec-werks.
IF sy-subrc = 0.
CONCATENATE gs_t001k-bwkey '-' gs_t001k-name1 INTO gs_excel-estab SEPARA
TED BY space.
ELSE.
gs_excel-estab = gs_cabec-werks.
ENDIF.
gs_excel-fecha = gs_detalle-fecha.
*
gs_excel-ztipo_comp = .
gs_excel-serie = gs_detalle-serie.
gs_excel-mblnr = gs_detalle-mblnr.
gs_excel-mblnrori = gs_detalle-mblnrori.
gs_excel-ztipo_ope = gs_detalle-ztipo_ope.
gs_excel-cant_in = gs_detalle-cant_in.
IF p_karva = 'X' OR p_karppp EQ 'X'.
PERFORM edita_importe USING gs_detalle-cosu_in.
gs_excel-cosu_in = gv_monto.
PERFORM edita_importe USING gs_detalle-cost_in.
gs_excel-cost_in = gv_monto.
ENDIF.
gs_excel-cant_out = gs_detalle-cant_out.
IF p_karva = 'X' OR p_karppp EQ 'X'.
PERFORM edita_importe USING gs_detalle-cosu_out.
gs_excel-cosu_out = gv_monto.
PERFORM edita_importe USING gs_detalle-cost_out.
gs_excel-cost_out = gv_monto.
ENDIF.
PERFORM edita_importe USING gs_detalle-cant_tot.
gs_excel-cant_fin = gv_monto.
IF p_karva = 'X' OR p_karppp EQ 'X'.
PERFORM edita_importe USING gs_detalle-cosu_fin.
gs_excel-cosu_fin = gv_monto.
PERFORM edita_importe USING gs_detalle-cost_fin.
gs_excel-cost_fin = gv_monto.
ENDIF.
APPEND gs_excel TO gtd_excel.
ENDLOOP.
ENDLOOP.
CALL FUNCTION 'MS_EXCEL_OLE_STANDARD_DAT'
EXPORTING
file_name
= p_file
create_pivot
= 0
TABLES
data_tab
= gtd_excel
EXCEPTIONS
file_not_exist
= 1
filename_expected
= 2
communication_error
= 3
ole_object_method_error = 4
ole_object_property_error = 5
invalid_pivot_fields
= 6
download_problem
= 7
OTHERS
= 8.
ENDFORM.
" SALIDA_EXCEL
*---------------------------------------------------------------------*

*
FORM EDITA_IMPORTE
*---------------------------------------------------------------------*
FORM edita_importe USING p_importe TYPE any.
CLEAR gv_monto.
WRITE p_importe TO gv_monto.
IF gv_monto CA '-'.
gv_monto+sy-fdpos(1) = space.
IF gv_monto CA '1234567890'.
sy-fdpos = sy-fdpos - 1.
gv_monto+sy-fdpos(1) = '-'.
ENDIF.
ENDIF.
ENDFORM.
" EDITA_IMPORTE
*&---------------------------------------------------------------------*
*&
Form VERIFICA_TIPO_OPERACION
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM verifica_tipo_operacion .
* Verifica que no ingrese el tipo 16 en tabla de equivalencia.
* DATA: w_tope TYPE y8mm_KARTIPOPE-tope.
SELECT SINGLE *
FROM zfipet_lib09
WHERE tope EQ '16'.
ENDFORM.

" VERIFICA_TIPO_OPERACION

*&---------------------------------------------------------------------*
*&
Form VALIDAR_CAMPOS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->PI_ERROR text
*----------------------------------------------------------------------*
FORM validar_campos CHANGING pi_error.
IF p_impre EQ 'X'.
IF p_print IS INITIAL.
MESSAGE ID 'ZPEFI' TYPE 'I' NUMBER '005' DISPLAY LIKE 'S'.
pi_error = 'X'.
EXIT.
ENDIF.
ENDIF.
IF p_excel EQ 'X'.
IF p_file IS INITIAL.
MESSAGE ID 'ZPEFI' TYPE 'I' NUMBER '006' DISPLAY LIKE 'S'.
pi_error = 'X'.
EXIT.
ENDIF.
ENDIF.
ENDFORM.
" VALIDAR_CAMPOS
*Text elements
*----------------------------------------------------------

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

000
001
002
003
004
005
020
021
022
023
025
026
030
031
032
M01
M02
M03
M04

Parmetros Iniciales
Parmetros Adicionales
Ejecucin del Reporte
Tipo de Reporte
Configuracin
Saldos Iniciales
Reporte Impreso
Impresora
Archivo Excel
Ruta Archivo
Reporte
Gestion ALV
Tabla U.Med.
Considerar tablas MSEG - BSIM
Considerar solo tabla MSEG
Unidad Medida
Tipo de Material
Tipo Operacin
Ajustes

*Selection texts
*---------------------------------------------------------* P_BKLAS D
.
* P_BLART D
.
* P_BUKRS D
.
* P_EXCEL
Archivo Excel
* P_FECHA
Fecha de Impresin
* P_FILE D
.
* P_GESTI
Reporte de Gestion
* P_GJAHR D
.
* P_IMPRE
Impresora
* P_KARPPP
Kardex Valorizado a PPP
* P_KARUN
Krdex en Unidades
* P_KARVA
Kardex Valorizado a P.Est.
* P_MATNR D
.
* P_MONAT D
.
* P_PRINT D
.
* P_REPOR
Reporte Pantalla
* P_SALIN
Saldos iniciales
* P_WERKS D
.
*Messages
*---------------------------------------------------------*
* Message class: Y8FI
*001 Usuario No Tiene Autorizacin
*002 Sociedad y Centros inconsistentes
*003 El reporte ya fue generado
*005 Ingresar Nombre de Impresora
*006 Ingresar Ruta de Archivo Excel
*011 Ingrese el nombre del archivo.
*012 Ingresar la extension XLS.

You might also like