FB05 Compensación

FBL5N consulta artículos pendientes del cliente

Método de compensación

Liquidación estándar: se han liquidado todas las líneas pendientes

Parcialmente despejado: la línea que está parcialmente despejada todavía está pendiente, y las otras líneas están despejadas, y se genera una línea sin despejar. Consulte la línea parcialmente despejada

Liquidación restante: todas las líneas de pedido originales se liquidan y se genera un nuevo comprobante de artículo sin liquidar

 

Hay dos formas de pago para los clientes

Recibo normal de compensación de pago: factura al cliente, el cliente paga directamente, al hacerlo, los comprobantes contables se compensarán automáticamente. Primero borre la cuenta en fb05 y luego ingrese la línea de asunto manual.

Compensación de pago temporal: compensación con pago anticipado (utilice comprobantes y facturas contables de pago anticipado al compensar las cuentas).

Teneduría de libros en el momento del recibo anticipado, débito a clientes (clientes de facturas fijas) facturas de aceptación del libro mayor general especiales , recibo anticipado de crédito;

Libro mayor especial para debitar cuentas de clientes recibidas por adelantado

Otro claro

Cuentas por cobrar y por pagar de clientes

El cliente debe ser un cobro del proveedor.

 

Borrar con BDC

Si desea completar el artículo de línea en la compensación, la pantalla del artículo de línea puede ser diferente. Puede usar NEXT_DYNPRO_SEARCH para determinar la pantalla. Hay 4 pantallas adicionales en total, que también se pueden calcular. Consulte la función ZFM_AR_03_16.

Puede ubicar el artículo de línea del comprobante abierto, consulte ZFM_AR_03_16.

Para pantallas dinámicas, campos obligatorios, etc., se puede utilizar un procesamiento alternativo

 

 

DEMOSTRACIÓN DE BDC

formulario frm_acc_clear_bdc.

  datos: el comienzo de lt_alv_c ocurre 0,

         bukrs como gt_alv-bukrs,

         waers como gt_alv-waers,

         socio como gt_alv-socio,

         dimensión como gt_alv-dimension,

         wrbtr como gt_alv-wrbtr,

         wrbtr_s como gt_alv-wrbtr,

         wrbtr_h como gt_alv-wrbtr,

         augbl como gt_alv-augbl,

         rtype como gt_alv-rtype,

         rtmsg como gt_alv-rtmsg,

       final de lt_alv_c.

 

  datos:

* lt_ztfi048b como tabla de ztfi048b con línea de encabezado,

    lv_blart como bkpf-blart,

    lv_wrbtr_s como gt_alv-wrbtr,

    lv_wrbtr_h como gt_alv-wrbtr,

    lv_abpos escriba abpos_f05a, "el número de artículo para comenzar a mostrar

    lv_s, "La línea S ha alcanzado la cantidad objetivo

    lv_h. "La línea H ha alcanzado la cantidad objetivo

 

* si p_d = 'X' ..

* lv_blart = 'Z1'.

* demás.

* lv_blart = 'Z2'.

* terminara si.

  lv_blart = 'AB'.

 

  bucle en gt_alv donde sel = 'X'.

    claro: lt_alv_c.

    lt_alv_c-bukrs = gt_alv-bukrs.

    lt_alv_c-partner = gt_alv-partner.

    lt_alv_c-waers = gt_alv-waers.

    lt_alv_c-dimension = gt_alv-dimension.

    si gt_alv-shkzg = 'S'.

      lt_alv_c-wrbtr_s = gt_alv-wrbtr.

    elseif gt_alv-shkzg = 'H'.

      lt_alv_c-wrbtr_h = gt_alv-wrbtr.

    terminara si.

    recopilar lt_alv_c.

  endloop.

  si sy-subrc ne 0.

    mensaje e001 (00) con 'Seleccionar al menos una fila'.

  terminara si.

 

  elimine lt_alv_c donde wrbtr_s es inicial o wrbtr_h es inicial.

 

  bucle en lt_alv_c.

    si lt_alv_c-wrbtr_s <= lt_alv_c-wrbtr_h.

      lt_alv_c-wrbtr = lt_alv_c-wrbtr_s.

    demás.

      lt_alv_c-wrbtr = lt_alv_c-wrbtr_h.

    terminara si.

 

    claro: lv_wrbtr_s, lv_wrbtr_h, lv_abpos, lv_s, lv_h.

    realice frm_bdc_init.

* buscar

    realice frm_bdc_dynnr usando 'SAPMF05A' '0122'.

    ejecute frm_bdc_field usando 'DATS' 'BKPF-BLDAT' sy-datum.

    ejecute frm_bdc_field usando el espacio 'BKPF-BLART' lv_blart.

    ejecute frm_bdc_field usando el espacio 'BKPF-BUKRS' lt_alv_c-bukrs.

    ejecute frm_bdc_field usando el sy-datum 'DATS' 'BKPF-BUDAT'.

    realice frm_bdc_field usando el espacio 'BKPF-WAERS' lt_alv_c-waers.

* realizar frm_bdc_field usando el espacio 'BKPF-BKTXT' is_head-bktxt. "El número de la orden de trabajo se escribe en el texto del encabezado

* si is_head-kursf no es inicial.

* realice frm_bdc_field usando 'NUM' 'BKPF-KURSF' is_head-kursf. "汇率

* terminara si.

* si is_head-wwert no es inicial.

* realice frm_bdc_field usando'DATS''BKPF-WWERT 'is_head-wwert. "Fecha de conversión

* terminara si.

    realice frm_bdc_field usando el espacio'BDC_OKCODE '' = SL '. "Seleccione elementos abiertos

    bucle en gt_alv donde socio = lt_alv_c-socio y dimensión = lt_alv_c-dimensión y sel = 'X'.

      lv_abpos = lv_abpos + 1.

      datos (lv_str) = gt_alv-belnr && gt_alv-gjahr && gt_alv-buzei.

      si gt_alv-shkzg = 'S'.

        lv_wrbtr_s = lv_wrbtr_s + gt_alv-wrbtr.

      demás.

        lv_wrbtr_h = lv_wrbtr_h + gt_alv-wrbtr.

      terminara si.

 

* Seleccione el banco de corte para préstamos pendientes

      si (lv_s = 'X' y gt_alv-shkzg = 'S') o (lv_h = 'X' y gt_alv-shkzg = 'H').

        Seguir.

      terminara si.

      if (lv_wrbtr_s> = lt_alv_c-wrbtr_h y gt_alv-shkzg = 'S'). "Después de marcar esta línea, no se puede borrar

        lv_s = 'X'.

      terminara si.

      if (lv_wrbtr_h> = lt_alv_c-wrbtr_s y gt_alv-shkzg = 'H').

        lv_h = 'X'.

      terminara si.

 

* Seleccionar partidas abiertas

      realice frm_bdc_dynnr usando 'SAPMF05A' '0710'.

      realice frm_bdc_field usando el espacio'RF05A-AGKOA 'gv_agkoa. "Tipo de cuenta

      realice frm_bdc_field usando el espacio'RF05A-AGUMS 'gt_alv-umskz. "ID de libro mayor general especial

 

*Seleccione

      ejecute frm_bdc_field usando el espacio 'BDC_OKCODE' '/ 05'. "选择

      realice frm_bdc_dynnr usando'SAPMF05A '' 0733 '. "Seleccione las credenciales en el cuadro emergente

      ejecute frm_bdc_field usando el espacio 'RF05A-FELDN (01)' 'BELNR'.

      ejecute frm_bdc_field usando el espacio 'RF05A-SEL01 (01)' lv_str.

      realice frm_bdc_field usando el espacio'BDC_OKCODE '' = PA '. "Procesar elementos pendientes

 

* Calcule hasta la última línea y comience a limpiar

      si lt_alv_c-wrbtr_s <lt_alv_c-wrbtr_h.

        si lv_wrbtr_s = lt_alv_c-wrbtr_s y lv_wrbtr_s <lv_wrbtr_h.

          datos (lv_exit) = 'X'.

        terminara si.

      elseif lt_alv_c-wrbtr_s> lt_alv_c-wrbtr_h.

        if lv_wrbtr_h = lt_alv_c-wrbtr_h y lv_wrbtr_s> lv_wrbtr_h.

          lv_exit = 'X'.

        terminara si.

      elseif lt_alv_c-wrbtr_s = lt_alv_c-wrbtr_h.

        si lv_wrbtr_h = lt_alv_c-wrbtr_h y lv_wrbtr_s = lv_wrbtr_h.

          lv_exit = 'X'.

        terminara si.

      terminara si.

 

      si lv_exit = 'X'.

* Banco de compensación parcial / restante

        si lv_wrbtr_s ne lv_wrbtr_h.

* si p_d = 'X'. "Borrado parcialmente

          datos (lv_okcode) = '= PARTE'.

          datos (lv_fname) = 'DF05B-PSZAH (01)'.

* elseif p_k = 'X'. "Liquidación restante

          lv_okcode = 'DESCANSO'.

          lv_fname = 'DF05B-PSDIF (01)'.

* terminara si.

* Manejar elementos abiertos

          realice frm_bdc_dynnr usando 'SAPDF05X' '3100'.

          ejecute frm_bdc_field usando el espacio 'BDC_OKCODE' lv_okcode.

          realice frm_bdc_dynnr usando 'SAPDF05X' '3100'.

          ejecute frm_bdc_field usando el espacio 'RF05A-ABPOS' lv_abpos. "定位

          realice frm_bdc_field usando el espacio 'BDC_OKCODE' '= / 00'.

          realice frm_bdc_dynnr usando 'SAPDF05X' '3100'.

          realice frm_bdc_field usando el espacio 'BDC_CURSOR' lv_fname.

          realice frm_bdc_field usando el espacio 'BDC_OKCODE' '= PI'. "双击

        terminara si.

* Compensación estándar

        Salida.

      terminara si.

 

*Visión general

      realice frm_bdc_dynnr usando 'SAPDF05X' '3100'.

      realice frm_bdc_field usando el espacio 'BDC_OKCODE' '= AB'. "概览

 

      realice frm_bdc_dynnr usando 'SAPMF05A' '0700'.

      realice frm_bdc_field usando el espacio'BDC_OKCODE '' = SL '. "Seleccione elementos abiertos

    endloop.

 

*Visión general

    realice frm_bdc_dynnr usando 'SAPDF05X' '3100'.

    realice frm_bdc_field usando el espacio 'BDC_OKCODE' '= AB'. "概览

 

    realice frm_bdc_dynnr usando 'SAPMF05A' '0700'.

    realice frm_bdc_field usando el espacio 'BDC_OKCODE' '= BU'. "保存

 

    realice frm_bdc_call usando 'FB05' 'F5' '312' cambiando lt_alv_c-rtype lt_alv_c-rtmsg.

    lt_alv_c-augbl = gt_messtab-msgv1.

    modificar lt_alv_c.

  endloop.

 

  bucle en gt_alv donde sel = 'X'.

    lea la tabla lt_alv_c con socio clave = dimensión gt_alv-socio = dimensión gt_alv.

    si sy-subrc = 0.

      gt_alv-augbl = lt_alv_c-augbl.

      gt_alv-rtype = lt_alv_c-rtype.

      gt_alv-rtmsg = lt_alv_c-rtmsg.

      modificar gt_alv.

    terminara si.

 

  endloop.

endform.

 

 

Borrar con función (abandonado, BDC resuelve todos los problemas)

Solo se puede realizar una compensación estándar y restante, no una compensación parcial (no estoy seguro)

form frm_posting_interface_clearing usando uv_hkont cambiando us_alv como gt_alv.

  datos: tabla de tipo it_blntab de blntab con línea de encabezado,

        it_ftclear tipo de tabla de ftclear con línea de encabezado,

        it_ftpost tipo tabla de ftpost con línea de encabezado,

        it_fttax tipo tabla de fttax con línea de encabezado.

 

  exportar ebr_id de us_alv-ebr_id a la identificación de memoria 'EBR_POST'.

 

  llamar a la función 'POSTING_INTERFACE_START'

    exportador

      i_function = 'C' "B = BDC, C = Llamar Trans.

      i_keep = 'X' "El indicador de eliminación de cola para la sesión procesada

      i_mode = 'N'

    excepciones

      client_incorrect = 1

      function_invalid = 2

      group_name_missing = 3

      mode_invalid = 4

      update_invalid = 5

      otros = 6.

 

* Procesamiento de fecha

  escribir sy-datum en sy-datum.

  escriba us_alv-bank_date a us_alv-bank_date.

  populated_ftpost:

                   'K' 1 'BKPF-BUKRS' us_alv-bukrs, "Código de la empresa

                   'K' 1 'BKPF-BLART' 'AB',

                   'K' 1 'BKPF-BLDAT' sy-datum,

                   'K' 1 'BKPF-BUDAT' us_alv-bank_date,

                   'K' 1 'BKPF-WAERS' us_alv-currency,

* 'K' 1 'BKPF-XBLNR' 'Prueba',

                   'P' 1 'RF05A-NEWBS' '40',

                   'P' 1'BSEG-HKONT 'uv_hkont, "Cuenta bancaria

                   'P' 1'BSEG-SGTXT '': Efectivo recibido por la venta de bienes y la prestación de servicios laborales ',

                   'P' 1'BSEG-VBUND '' 1000 ', "Para probar

                   'P' 1 'COBL-PRCTR' us_alv-prctr.

  si us_alv-rstgr no es inicial.

    populate_ftpost'P '1'BSEG-RSTGR' us_alv-rstgr. "Código de motivo

  terminara si.

 

* 'P' 1 'BSEG-WRBTR' us_alv-amt_claimed,

* Tramitación bdc del importe

  it_ftpost-fnam = 'BSEG-WRBTR'.

  escriba us_alv-amt_claimed en it_ftpost-fval (16).

  añadir it_ftpost.

 

*Artículos abiertos

  bucle en gt_epic_ebr_seg en datos (ls_epic_ebr_seg) donde ebr_id = us_alv-ebr_id.

    data (lv_str) = ls_epic_ebr_seg-belnr && ls_epic_ebr_seg-gjahr && ls_epic_ebr_seg-buzei.

    si ls_epic_ebr_seg-part_type = 'K'.

      seleccionar solo umskz

        en @data (lv_umskz)

        de bsik

        donde gjahr = @ ls_epic_ebr_seg-gjahr y bukrs = @ ls_epic_ebr_seg-bukrs

        y belnr = @ ls_epic_ebr_seg-belnr y buzei = @ ls_epic_ebr_seg-buzei.

    elseif ls_epic_ebr_seg-part_type = 'D'.

      seleccionar solo umskz

        en lv_umskz

        de bsid

        donde gjahr = ls_epic_ebr_seg-gjahr y bukrs = ls_epic_ebr_seg-bukrs

        y belnr = ls_epic_ebr_seg-belnr y buzei = ls_epic_ebr_seg-buzei.

    terminara si.

    populate_ftclear lv_str us_alv-bukrs lv_umskz ls_epic_ebr_seg-part_type. "concatenar número de documento + año fiscal + número de línea

  endloop.

 

  llamar a la función 'POSTING_INTERFACE_CLEARING'

    exportador

* i_auglv = 'CAMBIO DE RESERVA'

      i_auglv = 'AUSGZAHL'

      i_tcode = 'FB05'

* i_sgfunct = 'C'

    importador

      e_msgid = sy-msgid

      e_msgno = sy-msgno

      e_msgty = sy-msgty

      e_msgv1 = sy-msgv1

      e_msgv2 = sy-msgv2

      e_msgv3 = sy-msgv3

      e_msgv4 = sy-msgv4

* E_SUBRC = SY-SUBRC

    mesas

      t_blntab = it_blntab

      t_ftclear = it_ftclear

      t_ftpost = it_ftpost

      t_fttax = it_fttax

    excepciones

      clearing_procedure_invalid = 1

      clearing_procedure_missing = 2

      table_t041a_empty = 3

      transaccion_code_invalid = 4

      amount_format_error = 5

      too_many_line_items = 6

      company_code_invalid = 7

      screen_not_found = 8

      no_authorization = 9

      otros = 10.

  si sy-msgty = 'S' y sy-msgid = 'F5' y sy-msgno = '312'.

    us_alv-rtype = 'S'.

* us_alv-belnr_clearing = sy-msgv1.

    us_alv-belnr = sy-msgv1.

    us_alv-rtmsg = us_alv-rtmsg && 'Eliminando correctamente:' && ';'.

    us_alv-status_desc = 'Publicado'.

  elseif sy-subrc <> 0 o sy-msgty = 'E'.

    us_alv-rtype = 'E'.

    ID de mensaje sy-msgid tipo sy-msgty número sy-msgno

            con sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 en datos (lv_msg).

    us_alv-rtmsg = us_alv-rtmsg && '清账 失败 :' && lv_msg && ';'.

  terminara si.

  llamar a la función 'POSTING_INTERFACE_END'

    excepciones

      session_not_processable = 1

      otros = 2.

 

  si us_alv-rtype = 'S'.

* Reclamado parcialmente y luego hacer un recibo anticipado

    si us_alv-status = '025'.

      realice frm_acc_post_advance_receipt usando uv_hkont cambiando gt_alv.

    terminara si.

  terminara si.

 

endform.

 

Función restante de compensación

Posición mejorada

El programa principal SAPLFIPI incluye LFIPIF00 formulario transaktion_beenden

FORMULARIO end_transaction USANDO p_no_auth TYPE c.

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" $ "$ \ SE :( 1) Formulario TRANSAKTION_BEENDEN, Iniciar A

* $ * $ - Inicio: (1) ---------------------------------------- ----------------------------------------- $ * $ *

MEJORA 1 ZFI_DOC_POST_CLEAR. "versión activa

"Lógica de compensación parcial

        DATOS: GV_ID TYPE CHAR20. "ID DE MEMORIA

        DATOS: LT_BDCDATA TIPO TABLA DE BDCDATA.

        DATOS: LS_BDCDATA TIPO BDCDATA.

 

        BORRAR: LT_BDCDATA, GV_ID.

        CONCATENAR SY-UNAME 'ADD_SCR' EN GV_ID.

 

        IMPORTAR LT_BDCDATA a LT_BDCDATA DESDE LA ID DE MEMORIA GV_ID. "Datos de pantalla suplementarios

 

        SI LT_BDCDATA NO ES INICIAL.

        APÉNDICE LÍNEAS DE lt_bdcdata a ft.

 

        BUCLE EN FT DONDE FVAL = '/ 11'.

            FT-FVAL = '= PA'.

         MODIFICAR PIES

        ENDLOOP.

        TERMINARA SI.

MEJORA.

 

demostración de Minth

 

 

Supongo que te gusta

Origin blog.csdn.net/cylcylcylcylwo/article/details/114078708
Recomendado
Clasificación