You are on page 1of 6

Reprocessamento de lote

Tabela de controle para 5 tentativas

Cdigo

*---------------------------------------------------------------------
--
* Empresa..: <Caso no seja programa GLOBAL, informar as Empresas que
* utilizaro este programa>
* Programa.: ZGLOSD_REP_BATCH2
* Tipo.....: Executavel
* Mdulo...: SD
* Transao: ZSD0002
* Descrio: Reprocessamento de lote
* Autor....: Bruno Csar Rgolo
* Data.....: 02/04/2015
* [HISTRICO]
* ======== ========== ========== =====================================
==
* Data Autor Request Descrio
* ======== ========== ========== =====================================
==
* ======== ========== ========== =====================================
==
REPORT zglosd_rep_batch2.

TABLES: /xnfe/batchhd.

*TYPES: BEGIN OF y_status,


* cuf TYPE char2,
* online TYPE char1,
* END OF y_status.

DATA: t_bathd TYPE TABLE OF /xnfe/batchhd,


"t_status TYPE TABLE OF y_status,
t_bat TYPE TABLE OF ztbsd_batch,
t_ev_bat TYPE TABLE OF /xnfe/event_bat.

DATA: w_bathd LIKE LINE OF t_bathd,


"w_status LIKE LINE OF t_status,
w_bat LIKE LINE OF t_bat,
w_ev_bat LIKE LINE OF t_ev_bat.

DATA: v_proc TYPE c.


"v_dest TYPE bdbapidst.

* Tela de Seleo
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002.
SELECT-OPTIONS: s_guid FOR /xnfe/batchhd-guid NO INTERVALS,
s_batid FOR /xnfe/batchhd-batchid NO INTERVALS,
s_data FOR sy-datum NO-EXTENSION.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001.


PARAMETERS: rb_nfe RADIOBUTTON GROUP rb1 DEFAULT 'X',
rb_eve RADIOBUTTON GROUP rb1.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
PERFORM f_seleciona_dados CHANGING v_proc.
CHECK NOT v_proc IS INITIAL.
PERFORM f_processa_dados.
*&--------------------------------------------------------------------
-*
*& Form F_SELECIONA_DADOS
*&--------------------------------------------------------------------
-*
FORM f_seleciona_dados CHANGING v_proc.

DATA: v_create_low TYPE /xnfe/batchhd-createtime,


v_create_high TYPE /xnfe/batchhd-createtime,
v_low TYPE /xnfe/event_bat-sendtmpl,
v_high TYPE /xnfe/event_bat-sendtmpl.

DATA: v_createlow TYPE char100,


v_createhigh TYPE char100.

v_proc = 'X'.

IF NOT rb_nfe IS INITIAL.

IF s_guid[] IS INITIAL AND s_batid[] IS INITIAL.


IF s_data-low IS INITIAL.
IF NOT s_data-high IS INITIAL.
s_data-low = s_data-high - 1.
ELSE.
s_data-low = sy-datum - 1.
s_data-high = sy-datum.
ENDIF.
ENDIF.

CONCATENATE s_data-low '000000' INTO v_createlow.


v_create_low = v_createlow.

IF s_data-high IS INITIAL.
CONCATENATE s_data-low '235959' INTO v_createhigh.
ELSE.
CONCATENATE s_data-high '235959' INTO v_createhigh.
ENDIF.
v_create_high = v_createhigh.

SELECT *
FROM /xnfe/batchhd
INTO TABLE t_bathd
WHERE guid IN s_guid
AND doctype EQ 'NFE'
AND batchid IN s_batid
AND actstat EQ '02'
AND last_stepstatus EQ '02'
AND createtime >= v_create_low
AND createtime <= v_create_high.
IF NOT sy-subrc IS INITIAL.
MESSAGE text-003 TYPE 'S' DISPLAY LIKE 'E'.
CLEAR v_proc.
EXIT.
ENDIF.
ELSE.
CLEAR: v_create_low, v_create_high.

SELECT *
FROM /xnfe/batchhd
INTO TABLE t_bathd
WHERE guid IN s_guid
AND doctype EQ 'NFE'
AND batchid IN s_batid
AND actstat EQ '02'
AND last_stepstatus EQ '02'.
IF NOT sy-subrc IS INITIAL.
MESSAGE text-003 TYPE 'S' DISPLAY LIKE 'E'.
CLEAR v_proc.
EXIT.
ENDIF.
ENDIF.

SELECT *
FROM ztbsd_batch
INTO TABLE t_bat
FOR ALL ENTRIES IN t_bathd
WHERE guid EQ t_bathd-guid
AND doctype EQ 'NFE'.
ELSE.
IF s_guid[] IS INITIAL AND s_batid[] IS INITIAL.
IF s_data-low IS INITIAL.
IF NOT s_data-high IS INITIAL.
s_data-low = s_data-high - 1.
ELSE.
s_data-low = sy-datum - 1.
s_data-high = sy-datum.
ENDIF.
ENDIF.

CONCATENATE s_data-low '000000' INTO v_createlow.


v_low = v_createlow.

IF s_data-high IS INITIAL.
CONCATENATE s_data-low '235959' INTO v_createhigh.
ELSE.
CONCATENATE s_data-high '235959' INTO v_createhigh.
ENDIF.
v_high = v_createhigh.

SELECT *
FROM /xnfe/event_bat
INTO TABLE t_ev_bat
WHERE guid IN s_guid
AND batchid IN s_batid
AND step_status EQ '02'
AND actstat EQ '02'
AND sendtmpl >= v_low
AND sendtmpl <= v_high.
IF NOT sy-subrc IS INITIAL.
MESSAGE text-003 TYPE 'S' DISPLAY LIKE 'E'.
CLEAR v_proc.
EXIT.
ENDIF.
ELSE.
SELECT *
FROM /xnfe/event_bat
INTO TABLE t_ev_bat
WHERE guid IN s_guid
AND batchid IN s_batid
AND step_status EQ '02'
AND actstat EQ '02'.
IF NOT sy-subrc IS INITIAL.
MESSAGE text-003 TYPE 'S' DISPLAY LIKE 'E'.
CLEAR v_proc.
EXIT.
ENDIF.
ENDIF.

SELECT *
FROM ztbsd_batch
INTO TABLE t_bat
FOR ALL ENTRIES IN t_ev_bat
WHERE guid EQ t_ev_bat-guid
AND doctype EQ 'EVE'.
ENDIF.

ENDFORM. " F_SELECIONA_DADOS


*&--------------------------------------------------------------------
-*
*& Form F_PROCESSA_DADOS
*&--------------------------------------------------------------------
-*
FORM f_processa_dados.

DATA: v_proc TYPE c.

IF NOT rb_nfe IS INITIAL.


SORT: t_bathd BY cuf,
"t_status BY cuf,
t_bat BY guid.

* LOOP AT t_status INTO w_status WHERE online EQ 'X'.


LOOP AT t_bathd INTO w_bathd." WHERE cuf EQ w_status-cuf.

READ TABLE t_bat INTO w_bat WITH KEY guid = w_bathd-guid


BINARY SEARCH.
IF sy-subrc IS INITIAL.
IF w_bat-retries EQ 5.
CONTINUE.
ENDIF.
ELSE.
w_bat-guid = w_bathd-guid.
w_bat-doctype = 'NFE'.
w_bat-batchid = w_bathd-batchid.
ENDIF.

ADD 1 TO w_bat-retries.

CALL FUNCTION '/XNFE/BATCH_PROCFLOW_EXECUTION'


EXPORTING
iv_guid = w_bat-guid
EXCEPTIONS
no_proc_allowed = 1
technical_error = 2
error_reading_batch = 3
OTHERS = 4.

MODIFY ztbsd_batch FROM w_bat.


COMMIT WORK AND WAIT.
v_proc = 'X'.
ENDLOOP.
* ENDLOOP.
ELSE.
SORT: t_ev_bat BY cuf,
"t_status BY cuf,
t_bat BY guid.

LOOP AT t_ev_bat INTO w_ev_bat.

READ TABLE t_bat INTO w_bat WITH KEY guid = w_ev_bat-guid


BINARY SEARCH.
IF sy-subrc IS INITIAL.
IF w_bat-retries EQ 5.
CONTINUE.
ENDIF.
ELSE.
w_bat-guid = w_ev_bat-guid.
w_bat-doctype = 'EVE'.
w_bat-batchid = w_ev_bat-batchid.
ENDIF.

ADD 1 TO w_bat-retries.

CALL FUNCTION '/XNFE/EV_BAT_PROCESS_EXECUTE'


EXPORTING
iv_batchguid = w_ev_bat-guid
EXCEPTIONS
resend_not_allowed = 1
technical_error = 2
error_reading_events = 3
error_sending_batch = 4
OTHERS = 5.

MODIFY ztbsd_batch FROM w_bat.


COMMIT WORK AND WAIT.
v_proc = 'X'.
ENDLOOP.
ENDIF.

IF NOT v_proc IS INITIAL.


MESSAGE text-004 TYPE 'S'.
ELSE.
MESSAGE text-005 TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.

ENDFORM. " F_PROCESSA_DADOS

You might also like