Rupturas de Control

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • amam2605
    Senior Member
    • ene
    • 150

    #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
    *&---------------------------------------------------------------------*
Trabajando...