MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Act. en Masivo indicadores Retención Deudor XD99 (foro/showthread.php?t=76685)

ehrman 20/01/17 15:48:32

Act. en Masivo indicadores Retención Deudor XD99
 
Debido a la militante que se tiene con la transacción XD99 en referencia a la actualización en masivo de los indicadores de retención, se publica el siguiente Batch Input que permite realizar cambios en masa, ya sean de modificación, eliminación o adición de nuevos indicadores. Se publica únicamente la base, ya si quieren pueden generar un ALV, reporte que muestre al final el resultado, etc. pero eso ya es forma. Espero les pueda aportar, me vi en la necesidad de hacerlo de manera relámpago por la nueva reforma tributaria aquí en Colombia.

************************************************************************
* Descripción : Cambio Indicadores de Retencion Clientes
* Fecha : 2017/01/17
* Autor : Luis Ehrman Gutierrez

report ZACT_INDIC_DEUDORES.

*Estructura del Plano
*Cliente Soc. T.ret. I.ret. Act. Desde Hasta Eliminar

*100000061 1000 A1 01 X 01.01.2013 01.01.9999 X
*100000061 1000 A2 01 X 01.01.2013 01.01.9999
*100000061 1000 AC 01 X 01.01.2013 01.01.9999
*100000061 1000 AD 01 01.01.2013 01.01.9999
*100000061 1000 AI 01 X 01.01.2013 01.01.9999
*100000061 1000 AS 01 X 01.01.2013 01.01.9999
*100000061 1000 AT 01 X 01.01.2013 01.01.9999
*100000061 1000 AV 01 01.01.2013 01.01.9999

*&---------------------------------------------------------------------*
*& Include Declaracionde Variables
*&---------------------------------------------------------------------*
DATA: IT_BDCDATA TYPE STANDARD TABLE OF BDCDATA WITH HEADER LINE,
IT_BDCMSGCOLL TYPE STANDARD TABLE OF BDCMSGCOLL WITH HEADER LINE,
V_MODE TYPE BDCMODE,
V_STATUS(120) TYPE C.

DATA: BEGIN OF IT_KNBW OCCURS 100.
INCLUDE STRUCTURE KNBW.
DATA: END OF IT_KNBW.

TYPES: BEGIN OF ST_CARGA,
KUNNR TYPE KNBW-KUNNR,
BUKRS TYPE KNBW-BUKRS,
WITHT TYPE WITHT, "Indicador para tipo de retenciones
WT_WITHCD TYPE WT_WITHCD, "INDICADOR DE RETENCIÓN
WT_AGENT TYPE WT_WTAGT, "¿AUTORIZADO A AUTORRETENCIÓN DE IMPUESTOS?
WT_AGTDF TYPE CHAR10, "AUTORIZADO PARA LA RETENCIÓN DE IMPUESTOS A PARTIR DE
WT_AGTDT TYPE CHAR10, "AUTORIZACIÓN DE RETENCIÓN DE IMPUESTOS HASTA
DELE TYPE CHAR1,
END OF ST_CARGA.


** INTERNAL TABLES DEFINITION
DATA: TI_CARGA TYPE STANDARD TABLE OF ST_CARGA,
WA_CARGA TYPE ST_CARGA.

DATA: ARCH_IN2 TYPE STRING.
PARAMETERS: ARCH_IN LIKE RLGRAP-FILENAME DEFAULT 'C:\'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR ARCH_IN.


DATA: FNAME LIKE RLGRAP-FILENAME.
* Llamar funcion de explorador para seleccionar el archivo plano
CALL FUNCTION 'F4_FILENAME'
IMPORTING
FILE_NAME = FNAME.
ARCH_IN = FNAME.

ARCH_IN = FNAME.


START-OF-SELECTION.

PERFORM CARGA_ARCHIVO.
LOOP AT TI_CARGA INTO WA_CARGA.
PERFORM BATCH_XD02.
ENDLOOP.



*&---------------------------------------------------------------------*
*& Form CARGA_ARCHIVO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM CARGA_ARCHIVO.

DATA: LC_TEXTO(50).

IF ARCH_IN(1) EQ '/' OR ARCH_IN(1) EQ '\'.

** OPEN FLAT FILE
** ABRE EL ARCHIVO PLANO
* ECC. Descomentariar para versión 6.0
OPEN DATASET ARCH_IN IN TEXT MODE FOR INPUT ENCODING NON-UNICODE.
" OPEN DATASET ARCH_IN FOR INPUT.

IF SY-SUBRC NE 0.

LC_TEXTO = 'Error al abrir el archivo'(M01).

CALL FUNCTION 'POPUP_FOR_INTERACTION'
EXPORTING
HEADLINE = 'ERROR'
TEXT1 = LC_TEXTO
TICON = 'E'
BUTTON_1 = 'Aceptar'.
EXIT.

ENDIF.

DO.
READ DATASET ARCH_IN INTO WA_CARGA.

IF SY-SUBRC EQ 4.
LC_TEXTO = 'No es posible transferir la inf del archivo'(M02).

CALL FUNCTION 'POPUP_FOR_INTERACTION'
EXPORTING
HEADLINE = 'ERROR'
TEXT1 = LC_TEXTO
TICON = 'E'
BUTTON_1 = 'Aceptar'.
EXIT.
ENDIF.
APPEND WA_CARGA TO TI_CARGA.

ENDDO.

CLOSE DATASET ARCH_IN.

IF SY-SUBRC EQ 0.
LC_TEXTO = 'Archivo Leido'(M03).

CALL FUNCTION 'POPUP_FOR_INTERACTION'
EXPORTING
HEADLINE = 'INFORMACION'
TEXT1 = LC_TEXTO
TICON = 'I'
BUTTON_1 = 'Aceptar'.

ENDIF.

ELSE.
*//STAR OF H&SSOFT-HATH - 01.05.2010.
*//adici¤n de funci¤n GUI_UPLOAD para version 4.7 o mayor.
IF SY-SAPRL >= '470'.
ARCH_IN2 = ARCH_IN.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = ARCH_IN2
FILETYPE = 'DAT'
* HAS_FIELD_SEPARATOR = '00'
TABLES
DATA_TAB = TI_CARGA.
ELSE.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = ARCH_IN
FILETYPE = 'DAT'
TABLES
DATA_TAB = TI_CARGA.
ENDIF.
*//END OF H&SSOFT-HATH - 01.05.2010.

IF SY-SUBRC <> 0.
LC_TEXTO = 'Archivo No se puede leer'(M04).

CALL FUNCTION 'POPUP_FOR_INTERACTION'
EXPORTING
HEADLINE = 'INFORMACION'
TEXT1 = LC_TEXTO
TICON = 'I'
BUTTON_1 = 'Aceptar'.

ENDIF.

ENDIF.

LOOP AT TI_CARGA INTO WA_CARGA.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_CARGA-KUNNR
IMPORTING
OUTPUT = WA_CARGA-KUNNR.

MODIFY TI_CARGA FROM WA_CARGA.

ENDLOOP.

ENDFORM. "carga_archivo
*&---------------------------------------------------------------------*
*& Include ZINDI_DEUDOR_FOR
*&---------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.

CLEAR IT_BDCDATA.
IT_BDCDATA-PROGRAM = PROGRAM.
IT_BDCDATA-DYNPRO = DYNPRO.
IT_BDCDATA-DYNBEGIN = 'X'.
APPEND IT_BDCDATA.

ENDFORM. " bdc_dynpro
*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FNAM text
* -->FVAL text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.

CLEAR IT_BDCDATA.
IT_BDCDATA-FNAM = FNAM.
IT_BDCDATA-FVAL = FVAL.
APPEND IT_BDCDATA.

ENDFORM. " bdc_field
*&---------------------------------------------------------------------*
*& Form BATCH_XD02
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BATCH_XD02.
REFRESH IT_BDCDATA.
CLEAR: IT_BDCDATA.
DATA: CT_OPCIONES TYPE CTU_PARAMS,
PG TYPE P DECIMALS 0,
V_POS1 TYPE CHAR2,
V_POS2 TYPE CHAR20.

LOOP AT TI_CARGA INTO WA_CARGA.
REFRESH IT_KNBW.
CLEAR: IT_KNBW,V_POS1,V_POS2.

SELECT *
INTO TABLE IT_KNBW
FROM KNBW
WHERE KUNNR = WA_CARGA-KUNNR "Llega del Plano
AND BUKRS = WA_CARGA-BUKRS. "Llega del Plano


PERFORM BDC_DYNPRO USING 'SAPMF02D' '0101'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RF02D-D0610'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'RF02D-KUNNR' WA_CARGA-KUNNR. "Llega del Plano
PERFORM BDC_FIELD USING 'RF02D-BUKRS' WA_CARGA-BUKRS. "Llega del Plano
PERFORM BDC_FIELD USING 'RF02D-D0610' 'X'.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0610'.
CLEAR: PG, V_POS1.
"Consulta y trae de la Tabla Standar todos los indicadores de Retencio del Duedor
READ TABLE IT_KNBW WITH KEY KUNNR = WA_CARGA-KUNNR
BUKRS = WA_CARGA-BUKRS
WITHT = WA_CARGA-WITHT.

IF SY-SUBRC NE 0 AND WA_CARGA-DELE = 'X'. "Verifica primero si existe antes de borrar
V_STATUS = 'El indicador que intenta borrar no existe'.
ELSE.
IF SY-SUBRC EQ 0.
V_POS1 = SY-TABIX. "Determina en que posicion estara el indicador en el Dynpro
IF V_POS1 > 7. "Segun las propiedades del standar muestra 7 posiciones
PG = 8 / SY-TABIX. "Si el indicador a Modificar esta por fuera de 7 posiciones
"guardamos cuantos pagedown daremos
ENDIF.
ELSE. "Si vamos a ingresar un nuevo indicador ingresamos aqui
DESCRIBE TABLE IT_KNBW LINES V_POS1. "Validamos cuantos indicadores tiene el Deudor
V_POS1 = V_POS1 + 1. "le sumanos una posicion mas a registrar.
IF V_POS1 > 7. "Segun las propiedades del standar muestra 7 posiciones
PG = 8 / V_POS1. "Si el indicador a Modificar esta por fuera de 7 posiciones
"guardamos cuantos pagedown daremos
ENDIF.
ENDIF.

IF PG > 0. "Determina la cantida de pagedown
V_POS1 = SY-TABIX - ( PG * 7 ). "Determinara la posicion en la cual se ubicara el cursor
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "Se adiciona un cero a la izquierda
EXPORTING
INPUT = V_POS1
IMPORTING
OUTPUT = V_POS1.



DO PG TIMES .
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=P+'. "Numero de pagedown
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0610'.
ENDDO.

IF WA_CARGA-DELE = 'X'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' 'LDEL'.
CONCATENATE 'KNBW-WITHT(' V_POS1 ')' INTO V_POS2.
PERFORM BDC_FIELD USING 'BDC_CURSOR' V_POS2.
ELSE.


CONCATENATE 'KNBW-WITHT(' V_POS1 ')' INTO V_POS2.
PERFORM BDC_FIELD USING 'BDC_CURSOR' V_POS2.
PERFORM BDC_FIELD USING V_POS2 WA_CARGA-WITHT. "Llega del Plano
CONCATENATE 'KNBW-WT_WITHCD(' V_POS1 ')' INTO V_POS2.
PERFORM BDC_FIELD USING V_POS2 WA_CARGA-WT_WITHCD. "Llega del Plano
CONCATENATE 'KNBW-WT_AGENT(' V_POS1 ')' INTO V_POS2.
PERFORM BDC_FIELD USING V_POS2 WA_CARGA-WT_AGENT. "Llega del Plano
CONCATENATE 'KNBW-WT_AGTDF(' V_POS1 ')' INTO V_POS2.
PERFORM BDC_FIELD USING V_POS2 WA_CARGA-WT_AGTDF. "Llega del Plano
CONCATENATE 'KNBW-WT_AGTDT(' V_POS1 ')' INTO V_POS2.
PERFORM BDC_FIELD USING V_POS2 WA_CARGA-WT_AGTDT. "Llega del Plano

ENDIF.

PERFORM BDC_DYNPRO USING 'SAPMF02D' '0610'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=UPDA'.
CONCATENATE 'KNBW-WITHT(' V_POS1 ')' INTO V_POS2.
PERFORM BDC_FIELD USING 'BDC_CURSOR' V_POS2.

CLEAR IT_BDCMSGCOLL[].
"Opciones de Parametros para hacer el llamado de la tx
CT_OPCIONES-DEFSIZE = 'X'. "Omite resolicion de pantalla del usuario y maneja el standar de SAP
CT_OPCIONES-DISMODE = 'N'. "V_MODE. N= No visualiza, A= Visualiza
CT_OPCIONES-UPDMODE = 'S'.
" Ejecuta la transacción
CALL TRANSACTION 'XD02'
USING IT_BDCDATA
OPTIONS FROM CT_OPCIONES "Se incluyen los Parametros
MESSAGES INTO IT_BDCMSGCOLL.

IF SY-SUBRC EQ 0.
WAIT UP TO '1' SECONDS.
COMMIT WORK AND WAIT.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ELSE.
ROLLBACK WORK.
ENDIF.
DATA: V_LOG(120) TYPE C.

LOOP AT IT_BDCMSGCOLL.
"Lee e interpreta el mensaje que resulta de Batch Input
CLEAR V_LOG.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = IT_BDCMSGCOLL-MSGID
MSGNR = IT_BDCMSGCOLL-MSGNR
MSGV1 = IT_BDCMSGCOLL-MSGV1
MSGV2 = IT_BDCMSGCOLL-MSGV2
MSGV3 = IT_BDCMSGCOLL-MSGV3
MSGV4 = IT_BDCMSGCOLL-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = V_LOG.

IF IT_BDCMSGCOLL-MSGTYP EQ 'S'.
V_STATUS = V_LOG.
ELSEIF IT_BDCMSGCOLL-MSGTYP EQ 'E'.
V_STATUS = V_LOG.
ENDIF.

ENDLOOP.


ENDIF.

ENDLOOP.

ENDFORM. "BATCH_XD02


Husos Horarios son GMT. La hora en este momento es 23:37:02.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web