|
#1
|
|||
|
|||
Rupturas de Control
Hola a Todos !!!
Necesito trabajar con rupturas de control para una modificacion que debo realizar pero no manejo bien ese procedimiento, este es mi codigo, el programa realiza la Generacion automatica de las facturas correspondientes a los pedidos de avisos credito, generando 1 factura por pagina (llama la transacción (VF01) Crear Factura). Actualmente el une varios anunciantes (TH_PEDIDO_2-ANUN) aunque sean diferentes que son de la agencia (TH_PEDIDO_2-KUNNR) y maximo 2 anunciantes por pagina. Ahora se quiere que se agrupen los anunciantes de esa misma agencia (maximo 2 por factura) y se imprima. La Factura queda asi actualmente: Codigo: 35000 (TH_PEDIDO_2-KUNNR) 38413 (TH_PEDIDO_2-ANUN) Monto 12000 (TH_PEDIDO_2-ANUN) Monto Si me pueden dar una mano al respecto. Muchas Gracias Saludos AMAM REPORT Z_FACT_VENTAS_AVISOS_UNA_PAGIN LINE-SIZE 100 NO STANDARD PAGE HEADING LINE-COUNT 000(001) MESSAGE-ID SY. TABLES: VBRK, VBFA, VBPA, VBAP, T001B. TABLES VKDFS. DATA: MES TYPE I, EJERCICIO TYPE I. DATA: BEGIN OF TH_PEDIDO_2 OCCURS 100, VBELN(10), KUNNR LIKE VBPA-KUNNR, ANUN LIKE VBPA-KUNNR, END OF TH_PEDIDO_2. DATA BEGIN OF T_BDC_DATA OCCURS 1000. INCLUDE STRUCTURE BDCDATA. "TABLA PARA LA BDC_DATA. DATA END OF T_BDC_DATA. DATA BEGIN OF T_MESSTAB OCCURS 10. INCLUDE STRUCTURE BDCMSGCOLL. "TABLA QUE GUARDA LOS ERRORES. DATA END OF T_MESSTAB. DATA: IND_S. DATA: WC_FECHA(10). * Parametros de Entrada SELECTION-SCREEN BEGIN OF BLOCK B0 WITH FRAME TITLE TEXT-001. PARAMETERS: P_OV LIKE VBRK-VKORG OBLIGATORY DEFAULT '1000', P_SECTOR LIKE VBRK-SPART OBLIGATORY DEFAULT '11', P_FKART LIKE VBRK-FKART OBLIGATORY DEFAULT 'ZF2'. SELECT-OPTIONS P_FECHA FOR VBRK-FKDAT OBLIGATORY DEFAULT SY-DATUM. SELECT-OPTIONS P_KUNNR FOR VBRK-KUNRG. SELECTION-SCREEN END OF BLOCK B0. START-OF-SELECTION. IND_S = 0. CLEAR T_BDC_DATA. REFRESH T_BDC_DATA. SELECT * FROM VKDFS WHERE FKTYP = 'A' AND VKORG = P_OV AND FKDAT IN P_FECHA AND FKART = P_FKART AND KUNNR IN P_KUNNR AND FAKSK = ''. SELECT SINGLE * FROM VBAP WHERE VBELN = VKDFS-VBELN AND SPART = P_SECTOR. IF SY-SUBRC = 0. PERFORM SEL_ANUN. IND_S = 1. TH_PEDIDO_2-VBELN = VKDFS-VBELN. TH_PEDIDO_2-KUNNR = VKDFS-KUNNR. APPEND TH_PEDIDO_2. ENDIF. ENDSELECT. * Validacion fecha factura no corresponda a un periodo contable cerrado IF P_FECHA-HIGH = '00000000'. P_FECHA-HIGH = P_FECHA-LOW. ENDIF. SELECT SINGLE * FROM T001B WHERE BUKRS = 'VDEU' AND MKOAR = '+'. MES = P_FECHA-HIGH+4(2). EJERCICIO = P_FECHA-HIGH(4). IF MES < 5. EJERCICIO = EJERCICIO - 1. MES = MES + 8. ELSE. MES = MES - 4. ENDIF. IF T001B-FRYE1 > EJERCICIO OR ( T001B-FRYE1 = EJERCICIO AND T001B-FRPE1 > MES ). MESSAGE E002 WITH 'La fecha corresponde a un periodo cerrado'. ENDIF. * Fin modificacion IF IND_S = 1. PERFORM GENERA_FACTURAS. ENDIF. END-OF-SELECTION. FORM GENERA_FACTURAS. DATA: IND, PEDIDO(10), NRO_POS_TOT TYPE I, NRO_POS TYPE I, CONT(3), WC_CAMPO(15), WC_KUNNR LIKE LIKP-KUNNR. IND = 1. SORT TH_PEDIDO_2 BY KUNNR ANUN VBELN. NRO_POS_TOT = 0. CONCATENATE P_FECHA-HIGH+6(2) '.' P_FECHA-HIGH+4(2) '.' P_FECHA-HIGH(4) INTO WC_FECHA. PERFORM DYNPRO_START USING 'SAPMV60A' '0102'. PERFORM DYNPRO_FIELD USING 'BDC_CURSOR' 'KOMFK-VBELN(13)'. PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'FKAN'. IND = 0. LOOP AT TH_PEDIDO_2. CONT = CONT + 1. NRO_POS = 0. * wc_kunnr = th_entrega_2-kunnr. * Cuenta posiciones permitidas por Documento de Facturacion SELECT COUNT(*) INTO NRO_POS FROM VBAP WHERE VBELN = TH_PEDIDO_2-VBELN. NRO_POS_TOT = NRO_POS_TOT + NRO_POS. IF ( TH_PEDIDO_2-KUNNR NE WC_KUNNR OR NRO_POS_TOT > '2' ) AND IND = 1. IF P_OV = '8000'. * PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'FKVO'. * PERFORM DYNPRO_START USING 'SAPMV60A' '0107'. PERFORM DYNPRO_FIELD USING 'RV60A-FKDAT' WC_FECHA. * PERFORM DYNPRO_START USING 'SAPMV60A' '0102'. ENDIF. PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '/11'. CALL TRANSACTION 'VF01' USING T_BDC_DATA MODE 'N' UPDATE 'S' MESSAGES INTO T_MESSTAB. CLEAR T_BDC_DATA. REFRESH T_BDC_DATA. PERFORM DYNPRO_START USING 'SAPMV60A' '0102'. PERFORM DYNPRO_FIELD USING 'BDC_CURSOR' 'KOMFK-VBELN(13)'. PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'FKAN'. NRO_POS_TOT = NRO_POS. CONT = 1. ENDIF. IND = 1. WC_KUNNR = TH_PEDIDO_2-KUNNR. CONCATENATE 'KOMFK-VBELN(' CONT ')' INTO WC_CAMPO. CONDENSE WC_CAMPO NO-GAPS. PERFORM DYNPRO_FIELD USING WC_CAMPO TH_PEDIDO_2-VBELN. ENDLOOP. * Ulitmo registro IF P_OV = '8000'. * PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'FKVO'. * PERFORM DYNPRO_START USING 'SAPMV60A' '0107'. PERFORM DYNPRO_FIELD USING 'RV60A-FKDAT' WC_FECHA. * PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'FKAN'. * PERFORM DYNPRO_START USING 'SAPMV60A' '0102'. ENDIF. PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '/11'. CALL TRANSACTION 'VF01' USING T_BDC_DATA MODE 'N' UPDATE 'S' MESSAGES INTO T_MESSTAB. CLEAR TH_PEDIDO_2. CLEAR TH_PEDIDO_2. ENDFORM. *&---------------------------------------------------------------------* *& Form SEL_ANUN *&---------------------------------------------------------------------* * Obtiene el Anunciante por pedido y posicion *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM SEL_ANUN. SELECT SINGLE KUNNR INTO TH_PEDIDO_2-ANUN FROM VBPA WHERE VBELN EQ VKDFS-VBELN AND PARVW EQ 'ZA'. IF SY-SUBRC <> 0. TH_PEDIDO_2-ANUN = VKDFS-KUNNR. ENDIF. ENDFORM. " SEL_ANUN *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form DYNPRO_FIELD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_1760 text * * -->P_1761 text * *----------------------------------------------------------------------* FORM DYNPRO_FIELD USING FIELD VALUE. CLEAR T_BDC_DATA. T_BDC_DATA-FNAM = FIELD. T_BDC_DATA-FVAL = VALUE. APPEND T_BDC_DATA. ENDFORM. " DYNPRO_FIELD *&---------------------------------------------------------------------* *& Form DYNPRO_START *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_1765 text * * -->P_1766 text * *----------------------------------------------------------------------* FORM DYNPRO_START USING PROGRAM DYNPRO. CLEAR T_BDC_DATA. T_BDC_DATA-PROGRAM = PROGRAM. T_BDC_DATA-DYNPRO = DYNPRO. T_BDC_DATA-DYNBEGIN = 'X'. APPEND T_BDC_DATA. ENDFORM. " DYNPRO_START *&---------------------------------------------------------------------* |
Herramientas | Buscar en Tema |
Desplegado | |
|
|