Ruptura de Control

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • CRISTINO.GARCIA
    Senior Member
    • ago
    • 101

    #1

    Ruptura de Control

    Hola a todos

    En un reporte que estoy trabajando y necesito realizar una ruptura de control, esta no me esta respetando el corte al momento de enviarla por correo. Cada vez que cambie de codigo de cliente debo enviar los documentos asociados por email y aqui es donde me mezcla los codigos que puedo revisar.

    Muchas Gracias de antemano.




    *----------------------------------------------------------------------*
    * RUTINA DE IMPRESION DEL COMPROBANTE
    *----------------------------------------------------------------------*
    FORM IMPRIMIR_REPOR.
    FORMAT RESET.

    SORT DOCUM BY CTNUMBER TITRA XBLNR.
    LOOP AT DOCUM.
    AT NEW CTNUMBER.
    NEW-PAGE.
    ON_OFF = 1.
    CONT_OP = 0.
    SY-PAGNO = 1.
    ENDAT.

    CONT_OP = CONT_OP + 1.
    *------------------ CAMBIA LA INTENSIDAD DE LA LINEA ------------------*

    IF ON_OFF = 1.
    ON_OFF = 0.
    FORMAT COLOR COL_NORMAL INTENSIFIED ON.
    ELSE.
    FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
    ON_OFF = 1.
    ENDIF.
    *----------------------------------------------------------------------*
    WRITE: /002 CONT_OP NO-ZERO,
    008 DOCUM-BLDAT USING EDIT MASK '__/__/____',
    019 DOCUM-XBLNR RIGHT-JUSTIFIED,
    040 DOCUM-ZUONR RIGHT-JUSTIFIED,
    061 DOCUM-NOTAD RIGHT-JUSTIFIED,
    082 DOCUM-NOTAC RIGHT-JUSTIFIED,
    103 DOCUM-TITRA CENTERED,
    115 DOCUM-F_AFE RIGHT-JUSTIFIED,
    136 DOCUM-DMBTR,
    153 DOCUM-EXENTO,
    170 DOCUM-HWBAS,
    187(10) DOCUM-KBETR RIGHT-JUSTIFIED,
    198 DOCUM-HWSTE,
    217 DOCUM-WT_QBSHH.

    WRITE: 001 SY-VLINE,
    007 SY-VLINE,
    018 SY-VLINE,
    039 SY-VLINE,
    060 SY-VLINE,
    081 SY-VLINE,
    102 SY-VLINE,
    114 SY-VLINE,
    135 SY-VLINE,
    152 SY-VLINE,
    169 SY-VLINE,
    186 SY-VLINE,
    197 SY-VLINE,
    214 SY-VLINE,
    216 SY-VLINE,
    233 SY-VLINE.

    *---------------------- TOTALES DEL COMPROBANTE -----------------------*
    T_DMBTR = T_DMBTR + DOCUM-DMBTR.
    T_EXENTO = T_EXENTO + DOCUM-EXENTO.
    T_HWBAS = T_HWBAS + DOCUM-HWBAS.
    T_HWSTE = T_HWSTE + DOCUM-HWSTE.
    T_WT_QBSHH = T_WT_QBSHH + DOCUM-WT_QBSHH.



    AT END OF CTNUMBER. " Imprime totales del comprobante
    WRITE: SY-ULINE(214),
    216 SY-ULINE(18).
    WRITE: /136 T_DMBTR,
    153 T_EXENTO,
    170 T_HWBAS,
    198 T_HWSTE,
    217 T_WT_QBSHH.
    WRITE: 135 SY-VLINE,
    152 SY-VLINE,
    169 SY-VLINE,
    186 SY-VLINE,
    197 SY-VLINE,
    214 SY-VLINE,
    216 SY-VLINE,
    233 SY-VLINE.
    FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
    WRITE: /135 SY-ULINE(52),
    197 sy-uline(18),
    216 SY-ULINE(18).
    CLEAR: T_DMBTR, T_EXENTO, T_HWBAS, T_HWSTE, T_WT_QBSHH.

    IF LIST_COR = 'X'.
    ADR6-SMTP_ADDR = SPACE.
    PERFORM BUSCA_EMAIL.
    ENDIF.
    ENDAT.

    ENDLOOP.


    ENDFORM.

    *----------------------------------------------------------------------*
    * RUTINA DE IMPRESION DE ENCABEZADOS
    *----------------------------------------------------------------------*
    FORM ENCABEZADOS.
    SKIP.
    WRITE: /020 SY-TITLE(70) CENTERED,
    110 SY-ULINE(20), 131 SY-ULINE(23),
    157 SY-ULINE(14).
    CONCATENATE TEXT-T01 TEXT-T02 INTO TEXTO.
    WRITE: /005 TEXTO(100) CENTERED, 110 SY-VLINE,
    112 TEXT-R01, 129 SY-VLINE, 131 SY-VLINE,
    135 TEXT-R05, 153 SY-VLINE, 157 SY-VLINE,
    161 TEXT-R02, 170 SY-VLINE.
    CONCATENATE TEXT-T03 TEXT-T04 INTO TEXTO.
    *--------- Imprimir fechas dependiendo del tipo de retención ----------*
    IF DOCUM-WT_POSTM = '1'. " Posteo Ret.Fac
    PEFIS = DOCUM-BUDAT.
    ELSE. " Posteo Ret.Pago
    PEFIS = DOCUM-AUGDT.
    ENDIF.
    *----------------------------------------------------------------------*
    WRITE: /005 TEXTO(100) CENTERED, 110 SY-VLINE,
    112 PEFIS(4), 116 '-',
    117 PEFIS+4(2), 119 '-',
    120 DOCUM-CTNUMBER+2(8), 129 SY-VLINE, 131 SY-VLINE,
    133 TEXT-R06, PEFIS(4), '/', TEXT-R07, PEFIS+4(2),
    153 SY-VLINE, 157 SY-VLINE,
    159 PEFIS USING EDIT MASK '__-__-____', 170 SY-VLINE.
    CONCATENATE TEXT-T05 TEXT-T06 INTO TEXTO.
    CONCATENATE PEFIS(4) '-' PEFIS+4(2) '-' DOCUM-CTNUMBER+2(8) INTO DOCUM2-COMPROBANTE.
    DOCUM2-LIFNR = DOCUM-LIFNR.
    DOCUM2-NAME1 = DOCUM-NAME1.
    DOCUM2-STCD1 = DOCUM-STCD1.
    APPEND DOCUM2.
    WRITE: /005 TEXTO(100) CENTERED, 110 SY-ULINE(20), 131 SY-ULINE(23),
    157 SY-ULINE(14).
    SKIP.
    WRITE: /006 SY-ULINE(85), 97 SY-ULINE(65).
    WRITE: /006 SY-VLINE, 8 TEXT-R03, 90 SY-VLINE,
    97 SY-VLINE, 99 TEXT-R04, 161 SY-VLINE.
    WRITE: /006 SY-VLINE, 8 NOMSOC, 90 SY-VLINE,
    97 SY-VLINE, 99 RIFSOC, 161 SY-VLINE.
    WRITE: /006 SY-ULINE(85), 97 SY-ULINE(65).
    WRITE: /006 SY-ULINE(156).
    WRITE: /006 SY-VLINE, 8 TEXT-R08, 161 SY-VLINE.
    WRITE: /006 SY-VLINE, 8 DIRSOC, 161 SY-VLINE.
    WRITE: /006 SY-ULINE(156).
    WRITE: /006 SY-ULINE(85), 97 SY-ULINE(65).
    WRITE: /006 SY-VLINE, 8 TEXT-R09, 90 SY-VLINE,
    97 SY-VLINE, 99 TEXT-R10, 161 SY-VLINE.
    CONCATENATE DOCUM-NAME1 DOCUM-NAME2 INTO NOMBRE_P SEPARATED BY SPACE.
    WRITE: /006 SY-VLINE, 8 NOMBRE_P, 90 SY-VLINE,
    97 SY-VLINE, 99 DOCUM-STCD1, 161 SY-VLINE.
    WRITE: /006 SY-ULINE(85), 97 SY-ULINE(65).
    SKIP.
    WRITE 169 SY-ULINE(46).
    WRITE: /169 SY-VLINE,
    170(44) TEXT-R11 CENTERED, 214 SY-VLINE.
    WRITE: /169 SY-VLINE,
    170(44) TEXT-R12 CENTERED, 214 SY-VLINE.
    WRITE: SY-ULINE(214), 216 SY-ULINE(18).
    WRITE: /001 SY-VLINE, 2(4) TEXT-R13,
    7 SY-VLINE, 8(10) TEXT-R14 CENTERED,
    18 SY-VLINE, 19(20) TEXT-R15 CENTERED,
    39 SY-VLINE, 40(20) TEXT-R16 CENTERED,
    60 SY-VLINE, 62(20) TEXT-R35 CENTERED,
    81 SY-VLINE, 84(20) TEXT-R35 CENTERED,
    102 SY-VLINE, 106(8) TEXT-R17 CENTERED,
    114 SY-VLINE, 116(20) TEXT-R34 CENTERED,
    135 SY-VLINE, 136(16) TEXT-R18 CENTERED,
    152 SY-VLINE, 153(16) TEXT-R19 CENTERED,
    169 SY-VLINE,
    186 SY-VLINE, 187(10) TEXT-R20 CENTERED,
    197 SY-VLINE, 214 SY-VLINE,
    216 SY-VLINE, 233 SY-VLINE.
    WRITE: /001 SY-VLINE, 2(4) TEXT-R21 CENTERED,
    7 SY-VLINE, 8(10) TEXT-R22 CENTERED,
    18 SY-VLINE, 19(20) TEXT-R22 CENTERED,
    39 SY-VLINE, 40(20) TEXT-R23 CENTERED,
    60 SY-VLINE, 62(20) TEXT-R24 CENTERED,
    81 SY-VLINE, 84(20) TEXT-R25 CENTERED,
    102 SY-VLINE, 106(8) TEXT-R26 CENTERED,
    114 SY-VLINE, 116(20) TEXT-R27 CENTERED,
    135 SY-VLINE, 136(16) TEXT-R28 CENTERED,
    152 SY-VLINE, 153(16) TEXT-R29 CENTERED,
    169 SY-VLINE, 170(16) TEXT-R30 CENTERED,
    186 SY-VLINE, 187(10) TEXT-R31 CENTERED,
    197 SY-VLINE, 198(16) TEXT-R32 CENTERED,
    214 sy-vline,
    216 SY-VLINE, 217(16) TEXT-R33 CENTERED,
    233 SY-VLINE.

    WRITE: SY-ULINE(214),
    216 SY-ULINE(18).
    ENDFORM.
    *----------------------------------------------------------------------*


    * Enviar Aviso Cobro a direccion e-mail del cliente

    FORM ENVIAR_CORREO.

    CLEAR LISTOBJECT.
    REFRESH LISTOBJECT.
    CLEAR COMPRESSED_ATTACHMENT.
    REFRESH COMPRESSED_ATTACHMENT.
    CLEAR RECEIVER_LIST.
    REFRESH RECEIVER_LIST.
    CLEAR W_OBJECT_HD_CHANGE.
    CLEAR MESSAGE_CONTENT.
    REFRESH MESSAGE_CONTENT.
    CLEAR PACKING_LIST.
    REFRESH PACKING_LIST.
    CLEAR COMPRESSED_SIZE.

    * Receivers
    * EMAIL ADDRESS

    RECEIVER_LIST-RECEXTNAM = ADR6-SMTP_ADDR.
    RECEIVER_LIST-RECESC = 'E'.
    RECEIVER_LIST-SNDART = 'INT'.
    RECEIVER_LIST-SNDPRI = '1'.
    APPEND RECEIVER_LIST.

    * General data
    W_OBJECT_HD_CHANGE-OBJLA = SY-LANGU.
    W_OBJECT_HD_CHANGE-OBJNAM = 'Object name'.
    W_OBJECT_HD_CHANGE-OBJSNS = 'P'.

    * Mail subject
    W_OBJECT_HD_CHANGE-OBJDES = 'Comprobante de Retencion'.

    * Mail body
    APPEND 'Comprobante' TO MESSAGE_CONTENT.

    * Attachment
    CALL FUNCTION 'SAVE_LIST'
    EXPORTING
    LIST_INDEX = '0'
    TABLES
    LISTOBJECT = LISTOBJECT.

    CALL FUNCTION 'TABLE_COMPRESS'
    IMPORTING
    COMPRESSED_SIZE = COMPRESSED_SIZE
    TABLES
    IN = LISTOBJECT
    OUT = COMPRESSED_ATTACHMENT.

    DESCRIBE TABLE COMPRESSED_ATTACHMENT.

    CLEAR PACKING_LIST.
    PACKING_LIST-TRANSF_BIN = 'X'.
    PACKING_LIST-HEAD_START = 0.
    PACKING_LIST-HEAD_NUM = 0.
    PACKING_LIST-BODY_START = 1.
    PACKING_LIST-BODY_NUM = SY-TFILL.
    PACKING_LIST-OBJTP = 'ALI'.
    PACKING_LIST-OBJNAM = 'Object name'.
    PACKING_LIST-OBJDES = 'Comprobante de Retencion de IVA'.
    PACKING_LIST-OBJLEN = COMPRESSED_SIZE.
    APPEND PACKING_LIST.


    * Funcion Envio Correo via RFC

    CALL FUNCTION 'SO_OBJECT_SEND'
    EXPORTING
    OBJECT_HD_CHANGE = W_OBJECT_HD_CHANGE
    OBJECT_TYPE = 'RAW'
    OWNER = SY-UNAME
    TABLES
    OBJCONT = MESSAGE_CONTENT
    RECEIVERS = RECEIVER_LIST
    PACKING_LIST = PACKING_LIST
    ATT_CONT = COMPRESSED_ATTACHMENT
    EXCEPTIONS
    OBJECT_NOT_SENT = 9
    OTHERS = 1.


    IF SY-SUBRC <> 0.
    WRITE: / 'Problema en el envio. No se pudo enviar' , DOCUM2-LIFNR.
    ELSE.
    CONCATENATE PEFIS(4) '-' PEFIS+4(2) '-' DOCUM-CTNUMBER+2(8) INTO DOCUM2-COMPROBANTE.
    DOCUM3-COMPROBANTE = DOCUM2-COMPROBANTE.
    DOCUM3-LIFNR = DOCUM2-LIFNR.
    DOCUM3-NAME1 = DOCUM2-NAME1.
    DOCUM3-STCD1 = DOCUM2-STCD1.
    APPEND DOCUM3.
    ENDIF.
    COMMIT WORK.
    ENDFORM.

    * Notificar Departamento de Caja que no se envio el Aviso de Cobro
    FORM NOTIFICAR.

    DATA: T_EMAIL LIKE SOOS1-RECEXTNAM. "EMail distribution list
    * Estructuras para correo OUTLOOK
    DATA: BEGIN OF EMAIL_TEXT OCCURS 10.
    INCLUDE STRUCTURE SOLI.
    DATA: END OF EMAIL_TEXT.

    CONSTANTS: C_EMAIL_DISTRIBUTION LIKE SOOS1-RECEXTNAM VALUE
    'llopez@gmail.com'.

    CLEAR LISTOBJECT.
    REFRESH LISTOBJECT.
    CLEAR COMPRESSED_ATTACHMENT.
    REFRESH COMPRESSED_ATTACHMENT.
    CLEAR RECEIVER_LIST.
    REFRESH RECEIVER_LIST.
    CLEAR W_OBJECT_HD_CHANGE.
    CLEAR MESSAGE_CONTENT.
    REFRESH MESSAGE_CONTENT.
    CLEAR PACKING_LIST.
    REFRESH PACKING_LIST.
    CLEAR COMPRESSED_SIZE.

    EMAIL_TEXT-LINE = 'El Acreedor no tiene direccion e-mail'.
    APPEND EMAIL_TEXT.
    *EMAIL_TEXT-LINE = ADR6-SMTP_ADDR = SPACE.
    EMAIL_TEXT-LINE = DOCUM-LIFNR.
    APPEND EMAIL_TEXT.

    T_EMAIL = C_EMAIL_DISTRIBUTION.

    CALL FUNCTION 'Y_LG_SEND_EMAIL_ITAB'
    EXPORTING
    APPLICATION = 'EMAIL'
    EMAILTITLE = 'Comprobante de Retencion de IVA'
    RECEXTNAM = T_EMAIL
    TABLES
    TEXTTAB = EMAIL_TEXT
    EXCEPTIONS
    OBJECT_NOT_SENT = 9
    OTHERS = 1.
    IF SY-SUBRC <> 0.
    WRITE: / 'Problema en el envio de mensaje Acreedor sin correo' , DOCUM-LIFNR.
    ENDIF.
    COMMIT WORK.
    ENDFORM.



    FORM BUSCA_EMAIL.

    SELECT SINGLE * FROM LFA1
    WHERE LIFNR = DOCUM-LIFNR.

    SELECT SINGLE * FROM ADR6
    WHERE ADDRNUMBER = LFA1-ADRNR.

    IF ADR6-SMTP_ADDR = SPACE.
    PERFORM NOTIFICAR.
    ELSE.
    PERFORM ENVIAR_CORREO.
    ENDIF.

    ENDFORM.



    FORM BAJAR.

    CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
    filename = 'C:\RESUMEN_COMPROBANTE_IVA_ENVIADOS.txt'
    filetype = 'ASC'
    trunc_trailing_blanks_eol = ' '
    * confirm_overwrite = 'X'
    field_separator = '|'
    write_field_separator = 'x'
    TABLES
    data_tab = DOCUM3
    EXCEPTIONS
    invalid_type = 3
    no_batch = 4
    unknown_error = 5
    gui_refuse_filetransfer = 6
    OTHERS = 7.

    IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    ENDFORM.
  • Mauricio Hidalgo
    Senior Member
    • may
    • 481

    #2
    Para asegurar que el corte de control se hará. Para at new....su tabla interna debe no tan solo debe estar ordenada por los campos que conforman el control sino que además deben ser los primeros campos de su tabla interna.

    Saludos

    Comentario

    • CRISTINO.GARCIA
      Senior Member
      • ago
      • 101

      #3
      La tabla donde almaceno la informacion DOCUm el primer campo es CTNUMBER que es el campo por el cual deseo la ruptura, pero igual no lo hace.

      Gracias

      Comentario

      Trabajando...