jueves, 16 de julio de 2015

Campos adicionales para acreedor / proveedor.

Para añadir campos adicionales de acreedor (lfa1, lfb1) he seguido estos 2 links:
  1. Custom Screen in Vendor Master
  2. Adding Customer Fields In Vendor Master
El primero no me acababa de funcionar a la hora de grabar y el segundo no me acaba de gustar lo que hace para dejar modificar los campos o no. He seguio lo que decía para activar las BADIS. Aqui explico lo que he hecho para poder grabar, he usado un grupo de funciones para el control del screen como hace el segundo link. 

Mi append lo he hecho para la LFB1 y le he llamado ZLFB1.

Me he creado un grupo de funciones ZBC_VENDOR con un dynpro 9000 y he puesto he cogido los campos de diccionario de LFB1.

Tiene como variables globales en LZBC_VENDORTOP
tableszlfb1.datagl_activity type aktyp.

La dynpro tiene   process before output  module status_9000.

module status_9000 output.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
loop at screen.
*For XD01, It would be H
*For XD02, it would be V
*For XD03, it would be A. 
 if gl_activity = 'A'. " 
Display screen-input = '0'. 
 endif. 
 modify screen. 
 endloop.*
endmodule.

Y tiene 2 módulos de funciones.

function z_bc_vendor_screen_get.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  EXPORTING
*"     REFERENCE(P_ZLFB1) TYPE  ZLFB1
*"----------------------------------------------------------------------

  move-corresponding zlfb1 to p_zlfb1.

endfunction.

function z_bc_vendor_screen_set.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(P_ACTIVITY) TYPE  AKTYP OPTIONAL
*"     REFERENCE(P_ZLFB1) TYPE  ZLFB1 OPTIONAL
*"----------------------------------------------------------------------
*
  move-corresponding p_zlfb1 to zlfb1.
  gl_activity p_activity.
*
endfunction.

Y las implementos en los métodos de la BADI VENDOR_ADD_DATA_CS de la siguiente forma.

  method if_ex_vendor_add_data_cs~set_data.
*
    datal_zlfb1 type zlfb1.
    move-corresponding  i_lfb1 to l_zlfb1.
*
    call function 'Z_BC_VENDOR_SCREEN_SET'
      exporting
        p_activity i_activity
        p_zlfb1   l_zlfb1.
*
  endmethod.

  method if_ex_vendor_add_data_cs~get_data.
    datal_zlfb1 type zlfb1.
    call function 'Z_BC_VENDOR_SCREEN_GET'
      importing
        p_zlfb1 l_zlfb1.
*
    move-corresponding l_zlfb1 to s_lfb1.
*
  endmethod.

method if_ex_vendor_add_data_cs~get_taxi_screen.
  if flt_val 'Z1'.
    case i_taxi_fcode.
      when 'ZTAB1'.
      e_program 'SAPLZBC_VENDOR'"Grupo de funciones ZBC_VENDOR
      e_screen '9000'.
      e_headerscreen_layout 'B'.
    when others.
    endcase.
  endif.
endmethod.


Además para que si no hay datos de sociedad no salga la pestaña ZTAB1

  METHOD if_ex_vendor_add_data_cs~suppress_taxi_tabstrips.
*
    DATAcode   TYPE not_used_taxi_fcodes_tab,
          code_l LIKE LINE OF code.
*
    IF i_bukrs IS INITIAL.
      code_l 'ZTAB1'.
      APPEND code_l TO code.
*
      e_not_used_taxi_fcodes code.
    ENDIF.
*
  ENDMETHOD.

De la parte de Custo dejo aquí la pantalla de la SPRO en castellano.

jueves, 2 de julio de 2015

Leyendo fichero de la AL11 con caracter extraño # (hashtag).

Un compañero, Joan Zenon, tenía un problema al leer con OPEN DATA SET un fichero que tiene en el servidor. Tanto con la AL11 como al leer en el programa tenía carácter # al final. Estas cosas son por el fin de carro o fin de línea, pero intentado reemplazar con las constantes de la clase cl_abap_char_utilities no acababa de encontrar cual era. 

Al final lo ha solucionado con la función SCP_REPLACE_STRANGE_CHARS. Por defecto pone el punto (.) porque es 46 el valor que tiene el parámetro REPLACEMENT, si ponemos 32 deja un espacio.