Las funciones FIPI sirven para generar un batch pero utilizando un grupo de funciones que generara automaticamente el batch indicandole los campos que se quieren cargar.
La funcion que contabiliza es esta:
POSTING_INTERFACE_DOCUMENT
Si todo va bien generara un documento financiero. Si no generara un BATCH en la sm35 para poder visualizar el error.
Primero se debe de abrir el juego de datos con esta funcion:
CALL FUNCTION 'POSTING_INTERFACE_START'
    EXPORTING
     i_client                 = sy-mandt
     i_function               = 'C'
     i_group                  = 'DES847'
*   I_HOLDDATE               = ' '
*   I_KEEP                   = ' '
     i_mode                   = ld_mode
     i_update                 = 'S'
     i_user                   = sy-uname
     i_xbdcc                  = 'X'
   EXCEPTIONS
     client_incorrect         = 1
     function_invalid         = 2
     group_name_missing       = 3
     mode_invalid             = 4
     update_invalid           = 5
     OTHERS                   = 6.
Ahora tendremos que cargar los datos al juego de datos y es aqui lo interesante ya que en los programas para batch teniamos que cargar el tipico SCREEN y CAMPO en las funciones FIPI bastara con indicar la esctructura a la cual le queremos pasar datos:
 PERFORM informar_ftpost TABLES p_it_ftpost
                          USING c_k l_cont 'BKPF-BUKRS' g_bukrs.
* Clase de documento
  PERFORM informar_ftpost TABLES p_it_ftpost
                          USING c_k l_cont 'BKPF-BLART' g_blart. "T1
Aqui le estamos pasando sociedad y clase de documento, este es el detalle del form:
FORM informar_ftpost  TABLES   p_it_ftpost STRUCTURE ftpost
                      USING    p_tipo TYPE c
                               p_contador
                               p_campo
                               p_valor.
  DATA: lw_ftpost TYPE ftpost.
  CLEAR lw_ftpost.
*TIPO DE CAMPOS K = CABECERA P = POSICION
  lw_ftpost-stype = p_tipo.
*CONTADOR DE LINEAS
  lw_ftpost-count = p_contador.
*CAMPO
  lw_ftpost-fnam  = p_campo.
*VALOR DEL CAMPO INDICADO
  lw_ftpost-fval  = p_valor.
  CONDENSE lw_ftpost-fval.
  APPEND lw_ftpost TO p_it_ftpost.
  CLEAR lw_ftpost.
ENDFORM.                    " INFORMAR_FTPOST
Lo mismo para las posiciones:
 PERFORM informar_ftpost
      TABLES p_it_ftpost
      USING c_p
            l_cont
            'BSEG-BSCHL'
            lw_estructura-clavecontdebe.
Y viene la pregunta, como sabemos en que momento estamos hablando de la cabecer o de un debe o de un haber?
Esto vendra regido por una variable que en el form  es l_cont que indica la posicion a donde queremos cargar. Para la creacion de una factura tendriamos:
l_cont = 1 Para la cabecera
l_cont = 2 Para el Debe
l_cont = 3 para le Haber
Cuando ya tengamos todos los campos listos contabilizaremos con esta funcion:
 CALL FUNCTION 'POSTING_INTERFACE_DOCUMENT'
    EXPORTING
      i_tcode                       = g_transaccion
*      I_SGFUNCT                     = ' '
*      I_NO_AUTH                     = ' '
   IMPORTING
       e_msgid                      = p_retorno-id
       e_msgno                      = p_retorno-number
       e_msgty                      = p_retorno-type
       e_msgv1                      = p_retorno-message_v1
       e_msgv2                      = p_retorno-message_v2
       e_msgv3                      = p_retorno-message_v3
       e_msgv4                      = p_retorno-message_v4
*      E_SUBRC                       =
    TABLES
      t_blntab                      = p_blntab
      t_ftpost                      = p_ftpost
      t_fttax                       = p_fttax
   EXCEPTIONS
     account_missing                = 1
     company_code_missing           = 2
     posting_key_invalid            = 3
     posting_key_missing            = 4
     record_type_invalid            = 5
     transaction_code_invalid       = 6
     amount_format_error            = 7
     too_many_line_items            = 8
     company_code_invalid           = 9
     screen_not_found               = 10
     no_authorization               = 11
     OTHERS                         = 12.
De ser todo correcto p_retorno traera el numero de documento generado.
s
Para cerrar el juego de datos no olvidemos :
CALL FUNCTION 'POSTING_INTERFACE_END'.
Para tener un ejemplo completo revisa este link
http://www.sapnet.ru/viewtopic.php?t=2350
lunes, 15 de febrero de 2010
Suscribirse a:
Comentarios (Atom)