viernes, 14 de diciembre de 2012

Como Modificar tabla de sap sin vista de actualizacion


1. Ingresar a la SE37
2. Ejecutar el módulo de funciones SE16N_INTERFACE.
3. Darle valor ‘X’ a las siguientes variables (siempre apretando el lapicito para grabar el cambio):
· I_TAB (nombre de la tabla a modificar)
· I_EDIT (valor = ‘X’)
· I_SAPEDIT (valor = ‘X’)
4. Ejecutar

lunes, 26 de noviembre de 2012

ZFUFTP_DOWNLOAD_2


FUNCTION zfuftp_download_2.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(PI_IDFTP) TYPE  ZIDFTP
*"     REFERENCE(PI_FILENAME) TYPE  UFPATHDAT
*"  TABLES
*"      P_ITABLE
*"  EXCEPTIONS
*"      TCPIP_ERROR
*"      COMMAND_ERROR
*"      DATA_ERROR
*"----------------------------------------------------------------------
  DATA: BEGIN OF w_zmegaftp,
          zidftp TYPE zmegaftp-zidftp,
          zdirip TYPE zmegaftp-zdirip,
          zpath  TYPE zmegaftp-zpath,
          zuserftp TYPE zmegaftp-zuserftp,
          zpassw TYPE zmegaftp-zpassw,
        END OF w_zmegaftp.
  DATA: v_path TYPE zpath.

  IF pi_filename CA '*/$&()@!?¿'.

    MESSAGE e001(zab) WITH 'El archivo un carácter invalido'.

  ENDIF.

  SELECT SINGLE zidftp
                zdirip
                zpath
                zuserftp
                zpassw
           INTO w_zmegaftp
           FROM zmegaftp
          WHERE zidftp = pi_idftp.

  IF sy-subrc = 0.

    IF NOT w_zmegaftp-zdirip IS INITIAL AND
       NOT w_zmegaftp-zuserftp IS INITIAL AND
       NOT w_zmegaftp-zpassw IS INITIAL.

      CONCATENATE w_zmegaftp-zpath
                  pi_filename
             INTO v_path.



      PERFORM f_ftp_r3_to_server2 TABLES p_itable
                                   USING v_path
                                         w_zmegaftp-zdirip
                                         w_zmegaftp-zuserftp
                                         w_zmegaftp-zpassw
                                CHANGING v_subrc1
                                         v_subrc2.
      IF v_subrc1 NE 0.

        CASE v_subrc1.
          WHEN 1.

            RAISE tcpip_error.

          WHEN 2.

            RAISE command_error.

          WHEN 3.

            RAISE data_error.

          WHEN OTHERS.

        ENDCASE.

      ENDIF.

      IF v_subrc2 NE 0.

        CASE v_subrc2.

          WHEN 1.

            RAISE tcpip_error.

          WHEN 2.

            RAISE command_error.

          WHEN 3.

            RAISE data_error.

          WHEN OTHERS.

            RAISE others.

        ENDCASE.

      ENDIF.


    ELSE.

      MESSAGE a000(zab) WITH pi_idftp.

    ENDIF.

  ELSE.

    MESSAGE a000(zab).

  ENDIF.

ENDFUNCTION.

jueves, 1 de noviembre de 2012

Batch para modificar cliente desde un TXT

*lee un archivo de texto con los clientes y les modifica cierto campo

report ZBATCH_CTES_NVOESQEMA
       no standard page heading line-size 255.

       parameters: p_name(128)  type c.


data: begin of record occurs 0.
      data kunnr like mara-kunnr.
data end of record.




include bdcrecx1.




 at selection-screen on value-request for p_name.
  call function 'KD_GET_FILENAME_ON_F4'
       EXPORTING
            program_name  = sy-repid
            dynpro_number = sy-dynnr
            field_name    = ''
            static        = ''
            mask          = ''
       CHANGING
            file_name     = p_name
       EXCEPTIONS
            mask_too_long = 1
            others        = 2.

start-of-selection.

perform leer_archivo.

"perform open_group.
loop at record.
perform bdc_dynpro      using 'SAPMF02D' '0101'.
perform bdc_field       using 'BDC_CURSOR'
                              'RF02D-D0310'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'RF02D-KUNNR'
                              record-kunnr.
perform bdc_field       using 'RF02D-BUKRS'
                              ''.
perform bdc_field       using 'RF02D-VKORG'
                              '0030'.
perform bdc_field       using 'RF02D-VTWEG'
                              '10'.
perform bdc_field       using 'RF02D-SPART'
                              '10'.
perform bdc_field       using 'RF02D-D0310'
                              'X'.
perform bdc_dynpro      using 'SAPMF02D' '0310'.
perform bdc_field       using 'BDC_CURSOR'
                              'KNVV-KALKS'.
perform bdc_field       using 'BDC_OKCODE'
                              '=UPDA'.
perform bdc_field       using 'KNVV-KALKS'
                              '3'.
perform bdc_transaction using 'XD02'.

endloop.
"perform close_group.




*&---------------------------------------------------------------------*
*&      Form  leer_archivo
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="nbsp" p2="p2" p="p" text="text">*----------------------------------------------------------------------*
FORM leer_archivo.
  data: begin of i_upload occurs 0,
      line(10000),                       "Linea de archivo
   end of i_upload.
  data filename type string.
  filename = p_name.
*  Para cargar el archivo de entrada
  refresh i_upload.
  call function 'GUI_UPLOAD'
       EXPORTING
            filename                = filename
       TABLES
            data_tab                = i_upload
       EXCEPTIONS
            file_open_error         = 1
            file_read_error         = 2
            no_batch                = 3
            gui_refuse_filetransfer = 4
            invalid_type            = 5
            no_authority            = 6
            unknown_error           = 7
            bad_data_format         = 8
            header_not_allowed      = 9
            separator_not_allowed   = 10
            header_too_long         = 11
            unknown_dp_error        = 12
            access_denied           = 13
            dp_out_of_memory        = 14
            disk_full               = 15
            dp_timeout              = 16
            others                  = 17.

loop at i_upload.
* split i_upload-line at ',' into
* record-kunnr.
 record-kunnr = i_upload-line.
 append record.
  clear record.

endloop.
endform.

viernes, 12 de octubre de 2012

Como crear un Field Exit


==========FIELD EXIT=========
1.SE80
2.Crear grupo de funcione de funciones con el nombre del campo ej Z_SAKNR
3.activarlo
4.crear modulo de funciones que empiece con "FIELD_EXIT_" ej FIELD_EXIT_SAKNR
5.En codigo fuente meterle las validaciones. ej para validar que solo tenga ciertos valores
setleaf es una tabla donde podemos meter las condiciones por medio de la sm30.


FUNCTION FIELD_EXIT_SAKNR.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(INPUT)
*"  EXPORTING
*"     REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
*VALIDAMOS QUE LA CUENTA ESTE PERMITIDA PARA ESE USUARIO EN
data lin like sy-tabix.
RANGES: mirango FOR bseg-SAKNR.

SELECT valsign valoption valfrom valto
  INTO (mirango-sign, mirango-option,
        mirango-low, mirango-high)
  FROM setleaf
 WHERE setname = SY-UNAME.
 APPEND mirango.
ENDSELECT.

describe table mirango lines lin.

if lin > 0.
 IF INPUT IN mirango.
  MESSAGE E368(00) with 'ESTA CUENTA DE MAYOR NO ESTA PERMITIDA'.
 ENDIF.
endif.

ENDFUNCTION.

6.Ejecutar  RSMODPRF desde se38 sin parametros
7.MEnu exit campo -> crear   SAKNR con esto se agrega a las lineas
8.seleccionamos la field exit que acabamos de crear y presionamos "asignar prog/dynpro"
ahi llenamos los campos de la pantalla que deben asociarse de la transaccion donde queremos se haga el chequeo
EJ SAPLMEACCTVI 1100

seleccionamos el campo y le damos exit campo -> activar


jueves, 9 de agosto de 2012

Reporte que crea listado de sku y disponibilidad


REPORT ZEF_SKUS .


selection-screen begin of block list with frame title text-001.

parameters: filenam(128) default
'C:\Inetpub\ftproot\comercial\EasyFact\',
             sep default '|'.

selection-screen end of block list.

data: int_wmdvsx  type table of bapiwmdvs with header line,
            int_wmdvex  type table of bapiwmdve with header line,
            d_wkbst like bapicm61v-wkbst.

data: begin of i_mard occurs 0,
      matnr like mard-matnr,
      werks like mard-werks,
      lgort like mard-lgort,
      labst like mard-labst,
      meins like mara-meins,
      end of i_mard.

data: begin of i_out occurs 0,
      line(1000),
      end of i_out.

data texto(1000).


data: begin of it_data occurs 0,
      matnr like mara-matnr,
      bismt like mara-bismt,
      matkl like mara-matkl,
      meins like mara-meins,
      mtart like mara-mtart,
      maktx like makt-maktx,
      werks like marc-werks,
      bwkey like mbew-bwkey,
      zplpr like mbew-zplpr,
      stprs like mbew-stprs,
      verpr like mbew-verpr,
      vplpr like mbew-vplpr,
     zplpr2 like mbew-zplpr,
      peinh like mbew-peinh,
      losgr like marc-losgr,
      ferth like mara-ferth,
      end of it_data.


START-OF-SELECTION.
*MATERIAL AVAILABILITY
perform obtiene_datos.
perform procesa_datos.
perform descarga_datos.

*LISTADO DE MATERIALES
perform obtiene_datos2.
perform procesa_datos2.
perform descarga_datos2.

message s368(00) with 'Terminado'.


*&---------------------------------------------------------------------*
*&      Form  obtiene_datos
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM obtiene_datos.

select mard~matnr werks lgort labst mara~meins into table i_mard
from mard
inner join mara on mard~matnr = mara~matnr.


ENDFORM.                    " obtiene_datos
*&---------------------------------------------------------------------*
*&      Form  procesa_datos
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM procesa_datos.
loop at i_mard.
  clear   int_wmdvex.
  refresh int_wmdvex.

  call function 'BAPI_MATERIAL_AVAILABILITY'
       exporting
            plant      = i_mard-werks
            material   = i_mard-matnr
            unit       = i_mard-meins
            stge_loc   = i_mard-lgort
            check_rule = 'B'
       importing
            av_qty_plt = d_wkbst
       tables
            wmdvsx     = int_wmdvsx
            wmdvex     = int_wmdvex.
  read table int_wmdvex index 1.
  i_mard-labst = int_wmdvex-com_qty.
  if i_mard-labst = 9999999999.
    i_mard-labst = 0.
  endif.
  modify i_mard.
endloop.

delete i_mard where labst = 0.
data tlabst(20).

loop at i_mard.
tlabst = i_mard-labst.
  concatenate
      i_mard-matnr sep
      i_mard-werks sep
      i_mard-lgort sep
      tlabst       sep
      i_mard-meins sep
      into i_out-line.
  condense i_out-line.
  append i_out.
endloop.


ENDFORM.                    " procesa_datos
*&---------------------------------------------------------------------*
*&      Form  descarga_datos
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM descarga_datos.
data filenam2 like filenam.

concatenate filenam 'MATERIAL_AVAILABILITY.TXT' into filenam2.
  open dataset filenam2 for output in text mode.

  loop at i_out.
    transfer i_out to filenam2.
  endloop.
  close dataset filenam2.

ENDFORM.                    " descarga_datos
*&---------------------------------------------------------------------*
*&      Form  obtiene_datos2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM obtiene_datos2.

select
mara~matnr mara~bismt mara~matkl mara~meins
mara~mtart makt~maktx marc~werks mbew~bwkey
mbew~lplpr mbew~stprs mbew~verpr mbew~vplpr
mbew~zplpr mbew~peinh marc~losgr mara~ferth
into table it_data
from mara
inner join makt
on makt~matnr = mara~matnr
inner join marc
on marc~matnr = makt~matnr
inner join mbew
on mbew~matnr = marc~matnr
and mbew~bwkey = marc~werks.
*where mara~matnr in s_matnr
*and mara~mtart in s_mtart
*and makt~maktx in s_maktx
*and marc~werks in s_werks
*and mbew~stprs in s_stprs
*and mbew~verpr in s_verpr.

ENDFORM.                    " obtiene_datos2
*&---------------------------------------------------------------------*
*&      Form  descarga_datos2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM descarga_datos2.
data filenam2 like filenam.

concatenate filenam 'SKU.TXT' into filenam2.
  open dataset filenam2 for output in text mode.

  loop at i_out.
    transfer i_out to filenam2.
  endloop.
  close dataset filenam2.

ENDFORM.                    " descarga_datos2
*&---------------------------------------------------------------------*
*&      Form  procesa_datos2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM procesa_datos2.
data: t1(20),t2(20),t3(20),t4(20),t5(20),t6(20),t7(20).
clear i_out.
refresh i_out.

loop at it_data.
    t1 =  it_data-zplpr.
    t2 =  it_data-stprs.
    t3 =  it_data-verpr.
    t4 =  it_data-vplpr.
    t5 =  it_data-zplpr2.
    t6 =  it_data-peinh.
    t7 =  it_data-losgr.

  concatenate
      it_data-matnr sep
      it_data-bismt sep
      it_data-matkl sep
      it_data-meins sep
      it_data-mtart sep
      it_data-maktx sep
      it_data-werks sep
      it_data-bwkey sep
      t1 sep
      t2 sep
      t3 sep
      t4 sep
      t5 sep
      t6 sep
      t7 sep
      it_data-ferth sep
      into i_out-line.
  condense i_out-line.
  append i_out.
endloop.


ENDFORM.                    " procesa_datos2

martes, 17 de abril de 2012

READ_TEXT en sapscript

Para leer un texto estandar desde un sapscript podemos hacerlo de la siguiente manera

/: INCLUDE &VBDKR-VBELN& OBJECT 'VBBK' ID '0002' LANGUAGE 'EN' PARAGRAPH ID

asi evitamos el uso de la funcion READ_TEXT

miércoles, 11 de abril de 2012

User exit antes de grabar

VA01 en pedido- MV45AFZZ-USEREXIT_SAVE_DOCUMENT_PREPARE
VL01N en entrega- MV50AFZ1-USEREXIT_SAVE_DOCUMENT_PREPARE

lunes, 5 de marzo de 2012

Funcion para obtener condiciones de precio de factura sap

*Solo hay que llenar el numero de factura y marcar KONV_READ = 'X', y el numero de factura

data i_VBRK_I like VBRK.
data zkomv like KOMV occurs 0 with header line.
data zVBPA like VBPAVB occurs 0 with header line.
data zVBRK like VBRKVB occurs 0 with header line.
data zVBRP like VBRPVB occurs 0 with header line.
i_VBRK_I-vbeln = i_t-vbeln.
CALL FUNCTION 'RV_INVOICE_DOCUMENT_READ'
EXPORTING
KONV_READ = 'X'
VBRK_I = i_VBRK_I
TABLES
XKOMV = zKOMV
XVBPA = zVBPA
XVBRK = zVBRK
XVBRP = zVBRP.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

jueves, 16 de febrero de 2012

Conectar excel con SAP

A continuacion una macro con la que desde excel se conecta a sap a una funcion z
la cual tiene que estar marcada en atrubibutos como RFC, en este ejemplo nomandamos parametros solo obtenemos los 10 primeros registros de la tabla KNA1 y los mostramos en el excel.



Sub Conectar()


Dim R3 As Object

Dim MyFunc As Object

' Parametros para exportar a la función RFC

Dim PI_CODIGO As Object

' Tablas para exportar a la función RFC

Dim PT_TABLA As Object

' Tablas para importar de la función RFC

Dim PT_OUTPUT As Object

' Resultado de la conexión con SAP

Dim Result As Boolean

' Otras variables

Dim iRow, iRowAux As Integer

'************************************************************************

' Flujo de proceso

'************************************************************************

' Establecer la conexión con los SAP add-ins

Set R3 = CreateObject("SAP.Functions")

' Ejecutar la función RFC en modo visible (te saldrá el popup de SAP GUI para poner usuario y contraseña

If R3.Connection.logon(0, False) <> True Then

MsgBox ("Error conectando al sistema")

End

Else

' Indicar la función RFC

Set MyFunc = R3.Add("ZTESTKNA1")

' Cargar parametros a ser enviados a la RFC – EXPORTING

' Set PI_CODIGO = MyFunc.exports("PI_CODIGO")

' PI_CODIGO.Value = Range("A1").Value

' Cargar tablas a ser enviadas a la RFC – TABLES

' Set PT_TABLA = MyFunc.Tables("I_KNA1")

' PT_TABLA.Rows.Add

' PT_TABLA.Value(1, "NAME1") = Range("B1").Value

' PT_TABLA.Value(1, "CAMPO2") = Range("B2").Value

' PT_TABLA.Value(2, "CAMPO1") = Range("C1").Value

' PT_TABLA.Value(2, " CAMPO2") = Range("C2").Value

' Llamar a la función RFC y guardar el resultado

Result = MyFunc.CALL

If Result = False Then

MsgBox ("Error llamando a la función")

Else

' Recuperar las tablas de salida – TABLES

Set PT_OUTPUT = MyFunc.Tables("I_KNA1")

For iRow = 1 To PT_OUTPUT.RowCount

ActiveCell.Offset(iRow, 0) = PT_OUTPUT(iRow, "NAME1")


Next

' Salir del sistema SAP

R3.Connection.logoff

End If

End If

End Sub