lunes, 15 de febrero de 2010

Funciones FIPI

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