Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Enrique.Borroni

Páginas: 1 2 [3]
31
Varios / Tablas de Ventas y Distribucion
« en: 03 de Noviembre de 2007, 10:54:43 am »
KONV   Conditions for Transaction Data
KONP   Conditions for Items
LIKP   Delivery Header Data
LIPS   Delivery: Item data
VBAK   Sales Document: Header Data
VBAP   Sales Document: Item Data
VBBE   Sales Requirements: Individual Records
VBEH   Schedule line history
VBEP   Sales Document: Schedule Line Data
VBFA   Sales Document Flow
VBLB   Sales document: Release order data
VBLK   SD Document: Delivery Note Header
VBPA   Sales Document: Partner
VBRK   Billing: Header Data
VBRP   Billing: Item Data
VBUK   Sales Document: Header Status and Administrative Data
VBUP   Sales Document: Item Status
VEKP   Handling Unit - Header Table
VEPO   Packing: Handling Unit Item (Contents)
VEPVG   Delivery Due Index

32
Varios / Tablas de Sistema
« en: 03 de Noviembre de 2007, 10:53:56 am »
ADCP   Person/Address assignment (central address administration)
ADIRACCESS   Table to store keys for TADIR objects
ADR2   Telephone numbers (central address admin.)
ADRP   Persons (central address administration)
APQD   DATA DEFINITION Queue
APQI   Queue info definition
D010SINF   ABAP- Information about ABAP program source code
E071   Change and Transport System- Object Entries of Requests/Tasks
E07T   Change and Transport System- Short Texts for Requests/Tasks
ENLFDIR   Additional Attributes for Function Modules
INDX   System table INDX
NAST   Message Status
STXH   STXD SAPscript text file header
T005   Countries
T005S   Taxes- Region (Province) Key
T005U   Taxes- Region Key- Texts
T006   Units of Measurement
T015M   Names of the months
T247   Month name and short text
T777A   Building Addresses
TADIR   Directory of Repository Objects
TBTCO   Job status overview table
TBTCP   Batch job step overview
TFDIR   Function Module
TFTIT   Function Module Short Text
TSP03L   Spool- Long device names
TSTC   SAP Transaction Codes
TSTCT   Transaction Code Texts
TUTYP   User Types in Current Price List in SAP System
TUZUS   Special versions
TVARV   Table of variables in selection criteria
TVDIR   View Directory
US930   Data Relevant to Measurement for User Master Record
USR01   User master record (runtime data)
USR02   Logon data
USR04   User master authorizations
USR06   Additional Data per User
USR14   Surchargeable Language Versions per User
USR21   Assign user name address key
ARCH_OBJ   Objects for archiving and reorganization
BTCUED   Description of user event IDs for background processing
BTXSUPB   BSI- Upgrade-Information
CCCFLOW   Client Copy Control Flow
DBSTATC   DB Optimizer Control (Statistics Creation)
DEVACCESS   Table for development users
DEVL   OBSOLETE- Do not use (See TCETRAL)
E070   Change and Transport System- Header of Requests/Tasks
E070L   CTS- Index for Assigning Numbers to Requests/Tasks
INSTVERS   Documentation for installation Status and History
PAT03   Patch Directory
SDBAC   DBA Action Table
T100   Messages
TAPLT   Program Application Long Texts
TASYS   OBSOLETE- Do not use, see TCEDELI
TDEVC   Development Classes
TEMSE   Temp Sequential table.
TLOCK   Change and Transport System- Lock Table
TNAPR   Processing programs for output. Can be very handy to find the print program for a SAPScript.
TNAST   Printed output control table
TPFET   Table of profile parameters
TPFHT   Profile header, administration data for profiles in DB
TPROT   Table contains all DD tables to be logged
TRBAT   Communication Table for Transport Control
TRDIRT   Title texts for programs in TRDIR
TRESN   Table of Naming Conventions in ABAP Workbench
TRJOB   Job ID for Coordinating Batch-ABAP/UNIX for Transports
TSP03C   Spool- Device Description Extension
TST03   TemSe data
TSYST   OBSOLETE- Do not use (see TCESYST)
TWSYS   OBSOLETE- Do not use (See TCETRAL)
USOBT   Relation transaction - authorization object
USR03   User address data
USR05   User Master Parameter ID
USR12   User master authorization values
USR40   Table for illegal passwords
USR41   User master- Additional data
UST04   User masters
VARIT   Variant texts
VARID   Variant directory
D010TAB   Table for Use Report---Tables
DD02L   SAP tables
DD02T   R/3 DD- SAP table texts
DD03L   Table Fields
DD03T   DD- Texts for fields (language dependent)
EDIDC   IDOC Control Records
EDIDOT   Short description of IDoc types
EDID2   IDOC segments (version 3.1)
EDID4   IDOC segments (version 4.6)
EDSEA   EDI- Table of all segments of current release
VRSX2   Central Table for Version Management (Report Source)
TSE05   Can add parameters to the INSERT COMMAND (IC). Then, when you insert command, your info appears in the editor. Useful for comment blocks, common section of code, etc.
CDPOS   Change document items
CDHDR   Change document header
T529A   governs the foreground sequence of infotypes the system will use to prompt the user during online and batch processing. You will have to code your BDC to follow that sequence of creating infotypes.
T588Z   governs the dynamic event processing that will only take place during online user inputs. For BDC's you will have to create separate BDC's to handle any infotypes that are inserted dynamically by this table.
T588M   Infotype Screen Control

33
Reports / Obtener Registro de Condiciones de Pedidos de Compra
« en: 03 de Noviembre de 2007, 10:51:18 am »
REPORT Y_CONDICIONES_PO.


select * from ekko.
       select * from konv where knumv = ekko-knumv
           "Get all the condition records for the purchase order
       endselect.
endselect.

* Get the info record conditions record
* First declare the record structure for the key
data: begin of int_konp,
             txt1(5),
             lifnr(5),
             matnr(18),
             txt2(4),
             txt3(1),
        end of int_konp.

clear: konh, konp, int_konp.

* data for the record key konh-vakey
int_konp-txt1    = '00000'.
int_konp-lifnr    = ekko-lifnr+5(5).
int_konp-matnr = ekpo-matnr(18).
int_konp-txt2    = 'ALL'.
int_konp-werks = ekpo-werks.
int_konp-txt3    = '0'.

select * from konh where      kschl = 'PB00'            "Conditions (Header)
                                     and datab => p_datum.       "valid from date

      if konh-vakey = int_konp.                                  "Conditions (Item)
             select single * from konp where knumh = konh-knumh.
             continue.
      endif.

endselect.

34
Bapis / BAPI_ACC_DOCUMENT_POST - Contabiliza documentos FI
« en: 03 de Noviembre de 2007, 10:43:34 am »
REPORT Y_BAPI_ACC_DOCUMENT_POST.

selection-screen begin of block bl01 .

parameters:
  check_l             radiobutton group rb1,
  check_a default 'X' radiobutton group rb1,
  post                radiobutton group rb1.
selection-screen uline.
parameters:
  rev_c               radiobutton group rb1,
  rev_p               radiobutton group rb1.
selection-screen uline.
parameters:
  ref_key like bapiache01-obj_key default 'TEST000001BAPICALL',
  dest    like bdi_logsys-logsys  default '          '.

selection-screen end   of block bl01 .

data:
  gd_documentheader    like bapiache09,
  gd_customercpd       like bapiacpa09,
  gd_fica_hd           like bapiaccahd,
  it_accountreceivable like table of bapiacar09 with header line,
  it_accountgl         like table of bapiacgl09 with header line,
  it_accounttax        like table of bapiactx09 with header line,
  it_criteria          like table of bapiackec9 with header line,
  it_valuefield        like table of bapiackev9 with header line,
  it_currencyamount    like table of bapiaccr09 with header line,
  it_return            like table of bapiret2   with header line,
  it_receivers         like table of bdi_logsys with header line,
  it_fica_it           like table of bapiaccait with header line,
  it_accountpayable    like table of bapiacap09 with header line,
  it_paymentcard       like table of bapiacpc09 with header line,
  it_ext               like table of bapiacextc with header line.
*  it_re                LIKE TABLE OF bapiacre09 WITH HEADER LINE,
*  it_ext2              LIKE TABLE OF bapiparex  WITH HEADER LINE.


perform fill_internal_tables.

if check_l = 'X'.

  call function 'BAPI_ACC_DOCUMENT_CHECK'
       destination dest
       exporting
            documentheader    = gd_documentheader
            customercpd       = gd_customercpd
            contractheader    = gd_fica_hd
       tables
            accountgl         = it_accountgl
            accountreceivable = it_accountreceivable
            accountpayable    = it_accountpayable
            accounttax        = it_accounttax
*            currencyamount    = it_currencyamount
            criteria          = it_criteria
            valuefield        = it_valuefield
            extension1        = it_ext
            return            = it_return
            paymentcard       = it_paymentcard
            contractitem      = it_fica_it.
*            extension2        = it_ext2
*            realestate        = it_re.
  .

  write: / 'Result of check lines:'.                        "#EC NOTEXT
  perform show_messages.

endif.

if check_a = 'X'.

  call function 'BAPI_ACC_DOCUMENT_CHECK'
    destination dest
    exporting
      documentheader    = gd_documentheader
      customercpd       = gd_customercpd
      contractheader    = gd_fica_hd
    tables
      accountgl         = it_accountgl
      accountreceivable = it_accountreceivable
      accountpayable    = it_accountpayable
      accounttax        = it_accounttax
      currencyamount    = it_currencyamount
      criteria          = it_criteria
      valuefield        = it_valuefield
      extension1        = it_ext
      return            = it_return
      paymentcard       = it_paymentcard
      contractitem      = it_fica_it.
*      extension2        = it_ext2
*      realestate        = it_re.

  write: / 'Result of check all:'.                          "#EC NOTEXT
  perform show_messages.

endif.

if post = 'X'.

  data: l_type like gd_documentheader-obj_type,
        l_key  like gd_documentheader-obj_key,
        l_sys  like gd_documentheader-obj_sys.

  if dest = space or
     dest = gd_documentheader-obj_sys.
*    post synchron

    call function 'BAPI_ACC_DOCUMENT_POST'
      exporting
        documentheader    = gd_documentheader
        customercpd       = gd_customercpd
        contractheader    = gd_fica_hd
      importing
        obj_type          = l_type
        obj_key           = l_key
        obj_sys           = l_sys
      tables
        accountgl         = it_accountgl
        accountreceivable = it_accountreceivable
        accountpayable    = it_accountpayable
        accounttax        = it_accounttax
        currencyamount    = it_currencyamount
        criteria          = it_criteria
        valuefield        = it_valuefield
        extension1        = it_ext
        return            = it_return
        paymentcard       = it_paymentcard
        contractitem      = it_fica_it.
*        extension2        = it_ext2
*        realestate        = it_re.

    write: / 'Result of post:'.                             "#EC NOTEXT
    perform show_messages.

  else.
*   create Idoc

    it_receivers-logsys = dest.
    append it_receivers.

    call function 'ALE_ACC_DOCUMENT_POST'
      exporting
        documentheader    = gd_documentheader
        customercpd       = gd_customercpd
        contractheader    = gd_fica_hd
      tables
        accountgl         = it_accountgl
        accountreceivable = it_accountreceivable
        accountpayable    = it_accountpayable
        accounttax        = it_accounttax
        currencyamount    = it_currencyamount
        criteria          = it_criteria
        valuefield        = it_valuefield
        extension1        = it_ext
        paymentcard       = it_paymentcard
        contractitem      = it_fica_it
*        extension2        = it_ext2
*        realestate        = it_re
        receivers         = it_receivers
*       COMMUNICATION_DOCUMENTS =
*       APPLICATION_OBJECTS     =
      exceptions
        error_creating_idocs    = 1
        others                  = 2  .

    if sy-subrc = 0.
      write: / 'IDoc created'.                              "#EC NOTEXT
    else.
      write: sy-msgid.
    endif.

  endif.
endif.

if rev_p = 'X' or rev_c = 'X'.
  data: rev like bapiacrev,
        rev_key like ref_key.

  rev_key       = ref_key.
  rev_key(1)    = 'R'.
  rev-obj_type  = gd_documentheader-obj_type.
  rev-obj_key   = rev_key.
  rev-obj_sys   = gd_documentheader-obj_sys.
  rev-obj_key_r = ref_key.

  if rev_c is initial.
    if dest = space or
       dest = gd_documentheader-obj_sys.

      call function 'BAPI_ACC_DOCUMENT_REV_POST'
        exporting
          reversal = rev
          bus_act  = gd_documentheader-bus_act
        tables
          return   = it_return.
    else.
      it_receivers-logsys = dest.
      append it_receivers.

      call function 'ALE_ACC_DOCUMENT_REV_POST'
        exporting
          reversal                      = rev
          busact                        = gd_documentheader-bus_act
*         OBJ_TYPE                      = 'BUS6035'
*         SERIAL_ID                     = '0'
        tables
          receivers                     = it_receivers
*         COMMUNICATION_DOCUMENTS       =
*         APPLICATION_OBJECTS           =
        exceptions
          error_creating_idocs          = 1
          others                        = 2
                .
      if sy-subrc <> 0.
        message id sy-msgid type sy-msgty number sy-msgno
                with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      else.
        write: / 'IDoc created'.                            "#EC NOTEXT
      endif.

    endif.
  else.
    call function 'BAPI_ACC_DOCUMENT_REV_CHECK'
      exporting
        reversal = rev
        bus_act  = gd_documentheader-bus_act
      tables
        return   = it_return.
  endif.

  write: / 'Result of Reversal Posting:'.                   "#EC NOTEXT
  perform show_messages.

endif.

commit work.




*---------------------------------------------------------------------*
*      Form  fill_internal_tables
*---------------------------------------------------------------------*
form fill_internal_tables.

  perform fill_header.
  perform fill_accountgl.
*  perform fill_accountar.
  perform fill_accountap.
  perform fill_accounttax.
  perform fill_currencyamount.
*  perform fill_criteria.
*  perform fill_valuefield.
*  perform fill_re.
*  perform fill_cpd.
*  perform fill_contractitem.
*  perform fill_contractheader.
*  perform fill_paymentcard.
*  perform fill_extension.

endform.                               " fill_internal_tables

*---------------------------------------------------------------------*
*      Form  Show_messages
*---------------------------------------------------------------------*
form show_messages.

  if it_return[] is initial.
    write: / 'no messages'.
  else.
    skip 1.
    loop at it_return.
      write: /    it_return-type,
             (2)  it_return-id,
                  it_return-number,
             (80) it_return-message,
*                 IT_RETURN-LOG_NO
*                 IT_RETURN-LOG_MSG_NO
                  it_return-message_v1,
*                 IT_RETURN-MESSAGE_V2
*                 IT_RETURN-MESSAGE_V3
*                 IT_RETURN-MESSAGE_V4
             (20) it_return-parameter,
             (3)  it_return-row,
                  it_return-field.
*                 IT_RETURN-SYSTEM
    endloop.
  endif.

  uline.

endform.                               " Show_messages


*---------------------------------------------------------------------*
*       FORM fill_accountgl                                           *
*---------------------------------------------------------------------*
form fill_accountgl.

  clear it_accountgl.
  it_accountgl-itemno_acc     = 2.
  it_accountgl-gl_account     = '0021510201'.
  it_accountgl-item_text      = 'BAPI Test G/L line item'.  "#EC NOTEXT
 it_accountgl-bus_area       = '01'.
 it_accountgl-profit_ctr     = '0000010101'.
 it_accountgl-comp_code      = 'SLOC'.
  append it_accountgl.


  clear it_accountgl.
  it_accountgl-itemno_acc     = 3.
  it_accountgl-gl_account     = '0082000201'.
  it_accountgl-item_text      = 'BAPI Test G/L line item'.  "#EC NOTEXT
  it_accountgl-bus_area       = '01'.
  it_accountgl-profit_ctr     = '0000010101'.
  it_accountgl-comp_code      = 'SLOC'.
  it_accountgl-tax_code       = 'A3'.
  append it_accountgl.


  clear it_accountgl.
  it_accountgl-itemno_acc     = 5.
  it_accountgl-gl_account     = '0021510201'.
  it_accountgl-item_text      = 'BAPI Test G/L line item'.  "#EC NOTEXT
 it_accountgl-bus_area       = '01'.
 it_accountgl-profit_ctr     = '0000010301'.
 it_accountgl-comp_code      = 'SLOC'.
  append it_accountgl.

  clear it_accountgl.
  it_accountgl-itemno_acc     = 6.
  it_accountgl-gl_account     = '0082000201'.
  it_accountgl-item_text      = 'BAPI Test G/L line item'.  "#EC NOTEXT
  it_accountgl-bus_area       = '01'.
  it_accountgl-profit_ctr     = '0000010301'.
  it_accountgl-comp_code      = 'SLOC'.
  it_accountgl-tax_code       = 'A3'.
  append it_accountgl.


  clear it_accountgl.
  it_accountgl-itemno_acc     = 7.
*  it_accountgl-itemno_acc     = 8.
  it_accountgl-gl_account     = '0021510201'.
  it_accountgl-item_text      = 'BAPI Test G/L line item'.  "#EC NOTEXT
 it_accountgl-bus_area       = '90'.
 it_accountgl-profit_ctr     = '0000900008'.
 it_accountgl-comp_code      = 'CORP'.
  append it_accountgl.


  clear it_accountgl.
  it_accountgl-itemno_acc     = 8.
*  it_accountgl-itemno_acc     = 9.
  it_accountgl-gl_account     = '0082000201'.
  it_accountgl-item_text      = 'BAPI Test G/L line item'.  "#EC NOTEXT
  it_accountgl-bus_area       = '90'.
  it_accountgl-profit_ctr     = '0000900008'.
  it_accountgl-comp_code      = 'CORP'.
*  it_accountgl-tax_code       = 'A3'.
  append it_accountgl.

endform.                    "fill_accountgl

*---------------------------------------------------------------------*
*       FORM fill_header                                              *
*---------------------------------------------------------------------*
form fill_header.

*  CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
*    IMPORTING
*      own_logical_system = gd_documentheader-obj_sys.

* OBJ_TYPE has to be replaced by customers object key (Y* or Z*)
*  gd_documentheader-obj_type   = 'IDOC'.
*  gd_documentheader-obj_key    = ref_key.
  gd_documentheader-username   = sy-uname.
  gd_documentheader-header_txt = 'BAPI Test'.               "#EC NOTEXT
* gd_documentheader-obj_key_r  =
* GD_DOCUMENTHEADER-reason_rev =
 gd_documentheader-comp_code  = 'SLOC'.
* GD_DOCUMENTHEADER-AC_DOC_NO  =
  gd_documentheader-fisc_year  = sy-datum(4).
  gd_documentheader-doc_date   = sy-datum.
  gd_documentheader-pstng_date = sy-datum.
* GD_DOCUMENTHEADER-TRANS_DATE =
* GD_DOCUMENTHEADER-VALUE_DATE =
* GD_DOCUMENTHEADER-FIS_PERIOD =
 gd_documentheader-doc_type   = 'KR'.
 gd_documentheader-ref_doc_no = 'xxxx'.
* GD_DOCUMENTHEADER-COMPO_ACC  =
  gd_documentheader-bus_act    = 'RFBU'.

endform.                    "fill_header

*---------------------------------------------------------------------*
*       FORM fill_contractheader                                     *
*---------------------------------------------------------------------*
form fill_contractheader.

*  gd_fica_hd-doc_no           =
*  gd_fica_hd-doc_type_ca      =
*  gd_fica_hd-res_key          =
*  gd_fica_hd-fikey            =
*  gd_fica_hd-payment_form_ref =

endform.                    "fill_contractheader

*---------------------------------------------------------------------*
*       FORM fill_cpd                                                 *
*---------------------------------------------------------------------*
form fill_cpd.

*  gd_customercpd-name
*  gd_customercpd-name_2
*  gd_customercpd-name_3
*  gd_customercpd-name_4
*  gd_customercpd-postl_code
*  gd_customercpd-city
*  gd_customercpd-country
*  gd_customercpd-country_iso
*  gd_customercpd-street
*  gd_customercpd-po_box
*  gd_customercpd-pobx_pcd
*  gd_customercpd-pobk_curac
*  gd_customercpd-bank_acct
*  gd_customercpd-bank_no
*  gd_customercpd-bank_ctry
*  gd_customercpd-bank_ctry_iso
*  gd_customercpd-tax_no_1
*  gd_customercpd-tax_no_2
*  gd_customercpd-tax
*  gd_customercpd-equal_tax
*  gd_customercpd-region
*  gd_customercpd-ctrl_key
*  gd_customercpd-instr_key
*  gd_customercpd-dme_ind
*  gd_customercpd-langu_iso

endform.                    "fill_cpd

*---------------------------------------------------------------------*
*       FORM fill_ar                                                  *
*---------------------------------------------------------------------*
form fill_accountar.

* CLEAR it_accountreceivable.
* it_accountreceivable-itemno_acc =
* it_accountreceivable-customer   =
* IT_ACCOUNTRECEIVABLE-REF_KEY_1  =
* IT_ACCOUNTRECEIVABLE-REF_KEY_2  =
* IT_ACCOUNTRECEIVABLE-REF_KEY_3  =
* IT_ACCOUNTRECEIVABLE-PMNTTRMS   =
* IT_ACCOUNTRECEIVABLE-BLINE_DATE =
* IT_ACCOUNTRECEIVABLE-DSCT_DAYS1 =
* IT_ACCOUNTRECEIVABLE-DSCT_DAYS2 =
* IT_ACCOUNTRECEIVABLE-NETTERMS   =
* IT_ACCOUNTRECEIVABLE-DSCT_PCT1  =
* IT_ACCOUNTRECEIVABLE-DSCT_PCT2  =
* IT_ACCOUNTRECEIVABLE-PYMT_METH  =
* IT_ACCOUNTRECEIVABLE-DUNN_KEY   =
* IT_ACCOUNTRECEIVABLE-DUNN_BLOCK =
* IT_ACCOUNTRECEIVABLE-PMNT_BLOCK =
* IT_ACCOUNTRECEIVABLE-VAT_REG_NO =
* IT_ACCOUNTRECEIVABLE-ALLOC_NMBR =
* it_accountreceivable-item_text  =
* IT_ACCOUNTRECEIVABLE-PARTNER_BK =
* IT_ACCOUNTRECEIVABLE-GL_ACCOUNT =
* it_accountreceivable-comp_code
* it_accountreceivable-bus_area
* it_accountreceivable-pmtmthsupl
* it_accountreceivable-paymt_ref
* it_accountreceivable-scbank_ind
* it_accountreceivable-businessplace
* it_accountreceivable-sectioncode
* it_accountreceivable-branch
* it_accountreceivable-pymt_cur
* it_accountreceivable-pymt_cur_iso
* it_accountreceivable-pymt_amt
* it_accountreceivable-c_ctr_area
* it_accountreceivable-bank_id
* it_accountreceivable-supcountry
* it_accountreceivable-supcountry_iso
* it_accountreceivable-tax_code
* it_accountreceivable-taxjurcode
* it_accountreceivable-tax_date
* it_accountreceivable-sp_gl_ind
* it_accountreceivable-partner_guid = '1465464654'.
* APPEND it_accountreceivable.

endform.                    "fill_accountar

*---------------------------------------------------------------------*
*       FORM fill_ap                                                  *
*---------------------------------------------------------------------*
form fill_accountap.

  clear it_accountpayable.
  it_accountpayable-itemno_acc = 1.
*  it_accountpayable-vendor_no  = '0000060259'.
  it_accountpayable-vendor_no  = '0000060693'.
* it_accountpayable-gl_account
* it_accountpayable-ref_key_1
* it_accountpayable-ref_key_2
* it_accountpayable-ref_key_3
 it_accountpayable-comp_code = 'SLOC'.
 it_accountpayable-bus_area = '01'.
 it_accountpayable-pmnttrms = 'A000'.
* it_accountpayable-bline_date
* it_accountpayable-dsct_days1
* it_accountpayable-dsct_days2
* it_accountpayable-netterms
* it_accountpayable-dsct_pct1
* it_accountpayable-dsct_pct2
* it_accountpayable-pymt_meth
* it_accountpayable-pmtmthsupl
* it_accountpayable-pmnt_block
* it_accountpayable-scbank_ind
* it_accountpayable-supcountry
* it_accountpayable-supcountry_iso
* it_accountpayable-bllsrv_ind
* it_accountpayable-alloc_nmbr
  it_accountpayable-item_text  = 'BAPI Test A/P line item'. "#EC NOTEXT
* it_accountpayable-po_sub_no
* it_accountpayable-po_checkdg
* it_accountpayable-po_ref_no
* it_accountpayable-w_tax_code
* it_accountpayable-businessplace
* it_accountpayable-sectioncode
* it_accountpayable-instr1
* it_accountpayable-instr2
* it_accountpayable-instr3
* it_accountpayable-instr4
* it_accountpayable-branch
* it_accountpayable-pymt_cur
* it_accountpayable-pymt_amt
* it_accountpayable-pymt_cur_iso
* it_accountpayable-sp_gl_ind

  append it_accountpayable.

endform.                    "fill_accountap

*---------------------------------------------------------------------*
*       FORM fill_tax                                                 *
*---------------------------------------------------------------------*
form fill_accounttax.

  clear it_accounttax.
  it_accounttax-itemno_acc = 4.
  it_accounttax-gl_account = '0011361502'.
  it_accounttax-tax_code   = 'A3'.
  it_accounttax-acct_key   = 'VST'.
  it_accounttax-cond_key   = 'MWVS'.
* it_accounttax-itemno_tax = 8.
  append it_accounttax.

*  clear it_accounttax.
*  it_accounttax-itemno_acc = 7.
*  it_accounttax-gl_account = '0011361502'.
*  it_accounttax-tax_code   = 'A3'.
*  it_accounttax-acct_key   = 'VST'.
*  it_accounttax-COND_KEY   = 'MWVS'.
*  append it_accounttax.

*  clear it_accounttax.
**  it_accounttax-itemno_acc = 10.
*  it_accounttax-itemno_acc = 9.
*  it_accounttax-gl_account = '0011361502'.
*  it_accounttax-tax_code   = 'A3'.
*  it_accounttax-acct_key   = 'VST'.
*  it_accounttax-cond_key   = 'MWVS'.
** it_accounttax-itemno_tax = 4.
*  append it_accounttax.

endform.                    "fill_accounttax

*---------------------------------------------------------------------*
*       FORM fill_currencyamount                                      *
*---------------------------------------------------------------------*
form fill_currencyamount.

  clear it_currencyamount.
  it_currencyamount-itemno_acc   = 1.
  it_currencyamount-curr_type    = '00'.
  it_currencyamount-currency     = 'MXN'.
  it_currencyamount-amt_doccur   = '-7408036.2'.
  append it_currencyamount.

  clear it_currencyamount.
  it_currencyamount-itemno_acc   = 2.
  it_currencyamount-curr_type    = '00'.
  it_currencyamount-currency     = 'MXN'.
  it_currencyamount-amt_doccur   = '5336472.00'.
  append it_currencyamount.

  clear it_currencyamount.
  it_currencyamount-itemno_acc   = 3.
  it_currencyamount-curr_type    = '00'.
  it_currencyamount-currency     = 'MXN'.
  it_currencyamount-amt_doccur   = '3840.00'.
  append it_currencyamount.

  clear it_currencyamount.
  it_currencyamount-itemno_acc   = 4.
  it_currencyamount-curr_type    = '00'.
  it_currencyamount-currency     = 'MXN'.
  it_currencyamount-amt_base   = '5548.00'.
  it_currencyamount-amt_doccur   = '832.2'.
*  it_currencyamount-amt_doccur   = '576.00'.
*  it_currencyamount-amt_base   = '3840.00'.
  append it_currencyamount.

  clear it_currencyamount.
  it_currencyamount-itemno_acc   = 5.
  it_currencyamount-curr_type    = '00'.
  it_currencyamount-currency     = 'MXN'.
  it_currencyamount-amt_doccur   = '2051279.00'.
  append it_currencyamount.

  clear it_currencyamount.
  it_currencyamount-itemno_acc   = 6.
  it_currencyamount-curr_type    = '00'.
  it_currencyamount-currency     = 'MXN'.
  it_currencyamount-amt_doccur   = '1690.00'.
  append it_currencyamount.

*  clear it_currencyamount.
*  it_currencyamount-itemno_acc   = 7.
*  it_currencyamount-curr_type    = '00'.
*  it_currencyamount-currency     = 'MXN'.
*  it_currencyamount-amt_base     = '1690.00'.
*  it_currencyamount-amt_doccur   = '253.5'.
*  append it_currencyamount.

  clear it_currencyamount.
*  it_currencyamount-itemno_acc   = 8.
  it_currencyamount-itemno_acc   = 7.
  it_currencyamount-curr_type    = '00'.
  it_currencyamount-currency     = 'MXN'.
  it_currencyamount-amt_doccur   = '13905.00'.
  append it_currencyamount.

  clear it_currencyamount.
*  it_currencyamount-itemno_acc   = 9.
  it_currencyamount-itemno_acc   = 8.
  it_currencyamount-curr_type    = '00'.
  it_currencyamount-currency     = 'MXN'.
*  it_currencyamount-amt_base     = '2.70'.
  it_currencyamount-amt_doccur   = '18.00'.
  append it_currencyamount.

*  clear it_currencyamount.
**  it_currencyamount-itemno_acc   = 10.
*  it_currencyamount-itemno_acc   = 9.
*  it_currencyamount-curr_type    = '00'.
*  it_currencyamount-currency     = 'MXN'.
*  it_currencyamount-amt_doccur   = '2.70'.
*  it_currencyamount-amt_base     = '18.00'.
*  append it_currencyamount.
endform.                    "fill_currencyamount

*---------------------------------------------------------------------*
*       FORM fill_criteria                                            *
*---------------------------------------------------------------------*
form fill_criteria.

* CLEAR it_criteria.
* it_criteria-itemno_acc = 2.
* it_criteria-fieldname = 'BZIRK'.
* it_criteria-character = '000001'.
* append it_criteria.

endform.                    "fill_criteria

*---------------------------------------------------------------------*
*       FORM fill_valuefield                                          *
*---------------------------------------------------------------------*
form fill_valuefield.

* CLEAR it_valuefield.
* it_valuefield-itemno_acc = 2.
* it_valuefield-fieldname = 'VV010'.
* it_valuefield-curr_type
* it_valuefield-currency = 'EUR'.
* it_valuefield-currency_iso
* it_valuefield-amt_valcom
* it_valuefield-base_uom
* it_valuefield-base_uom_iso
* it_valuefield-qua_valcom
* append it_valuefield.

endform.                    "fill_valuefield

*---------------------------------------------------------------------*
*       FORM fill_extension                                           *
*---------------------------------------------------------------------*
form fill_extension.

* CLEAR it_ext.
* it_ext-field1
* it_ext-field2
* it_ext-field3
* it_ext-field4
* APPEND it_ext.

* DATA: ls_zzz TYPE ZZZ_ACCIT.
* CLEAR it_ext2.
* it_ext2-structure = 'ZZZ_ACCIT'.
*  ls_zzz-posnr = 2.
*  ls_zzz-awref_reb = '123654'.
*  ls_zzz-aworg_reb = '654654'.
*  ls_zzz-grant_nbr = '0022002'.
* MOVE ls_zzz TO it_ext2-valuepart1.
* APPEND it_ext2.

endform.                    "fill_extension

*---------------------------------------------------------------------*
*       FORM fill_paymentcard                                         *
*---------------------------------------------------------------------*
form fill_paymentcard.

*  CLEAR it_paymentcard.
*  it_paymentcard-itemno_acc = 1.
*  it_paymentcard-cc_glaccount
*  it_paymentcard-cc_type
*  it_paymentcard-cc_number
*  it_paymentcard-cc_seq_no
*  it_paymentcard-cc_valid_f
*  it_paymentcard-cc_valid_t
*  it_paymentcard-cc_name
*  it_paymentcard-dataorigin
*  it_paymentcard-authamount = '100'.
*  it_paymentcard-currency = 'EUR'.
*  it_paymentcard-currency_iso
*  it_paymentcard-cc_autth_no
*  it_paymentcard-auth_refno
*  it_paymentcard-auth_date
*  it_paymentcard-auth_time
*  it_paymentcard-merchidcl
*  it_paymentcard-point_of_receipt
*  it_paymentcard-terminal
*  it_paymentcard-cctyp = '1'.
*  APPEND it_paymentcard.

endform.                    "fill_paymentcard

*---------------------------------------------------------------------*
*       FORM fill_contractitem                                        *
*---------------------------------------------------------------------*
form fill_contractitem.

* CLEAR it_fica_it.
*  it_fica_it-itemno_acc
*  it_fica_it-cont_acct
*  it_fica_it-main_trans
*  it_fica_it-sub_trans
*  it_fica_it-func_area
*  it_fica_it-fm_area
*  it_fica_it-cmmt_item
*  it_fica_it-funds_ctr
*  it_fica_it-fund
* append it_fica_it.

endform.                    "fill_contractitem

*&---------------------------------------------------------------------*
*&      Form  fill_re
*&---------------------------------------------------------------------*
form fill_re .

*  CLEAR it_re.
*  it_re-itemno_acc      =
*  it_re-business_entity =
*  it_re-building        =
*  it_re-property        =
*  it_re-rental_object   =
*  it_re-serv_charge_key =
*  it_re-settlement_unit =
*  it_re-contract_no     =
*  APPEND it_re.
*

endform.

35
ALV / ALV - Ejemplo de Subtotales
« en: 03 de Noviembre de 2007, 10:40:52 am »
REPORT Y_ALV_SUBTOTALES.

TABLES : vbak.

TYPE-POOLS: slis.                      " ALV Global types

SELECT-OPTIONS :
  s_vkorg FOR vbak-vkorg,              " Sales organization
  s_kunnr FOR vbak-kunnr,              " Sold-to party
  s_vbeln FOR vbak-vbeln.              " Sales document

SELECTION-SCREEN :
  SKIP, BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max.
PARAMETERS p_max(2) TYPE n DEFAULT '20' OBLIGATORY.
SELECTION-SCREEN END OF LINE.

DATA:
  BEGIN OF gt_vbak OCCURS 0,
    vkorg LIKE vbak-vkorg,             " Sales organization
    kunnr LIKE vbak-kunnr,             " Sold-to party
    vbeln LIKE vbak-vbeln,             " Sales document
    netwr LIKE vbak-netwr,             " Net Value of the Sales Order
    waerk LIKE vbak-waerk,             " Document currency
  END OF gt_vbak.

*---------------------------------------------------------------------*
INITIALIZATION.

  v_1 = 'Maximum of records to read'.

*---------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM f_read_data.

  PERFORM f_display_data.

*---------------------------------------------------------------------*
*      Form  f_read_data
*---------------------------------------------------------------------*
FORM f_read_data.

  SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_vbak
           FROM vbak
             UP TO p_max ROWS
          WHERE kunnr IN s_kunnr
            AND vbeln IN s_vbeln
            AND vkorg IN s_vkorg.

ENDFORM.                               " F_READ_DATA
*---------------------------------------------------------------------*
*      Form  f_display_data
*---------------------------------------------------------------------*
FORM f_display_data.

  DEFINE m_fieldcat.
    add 1 to ls_fieldcat-col_pos.
    ls_fieldcat-fieldname   = &1.
    ls_fieldcat-ref_tabname = 'VBAK'.
    ls_fieldcat-do_sum      = &2.
    ls_fieldcat-cfieldname  = &3.
    append ls_fieldcat to lt_fieldcat.
  END-OF-DEFINITION.

  DEFINE m_sort.
    add 1 to ls_sort-spos.
    ls_sort-fieldname = &1.
    ls_sort-up        = 'X'.
    ls_sort-subtot    = &2.
    append ls_sort to lt_sort.
  END-OF-DEFINITION.

  DATA:
    ls_fieldcat TYPE slis_fieldcat_alv,
    lt_fieldcat TYPE slis_t_fieldcat_alv,
    lt_sort     TYPE slis_t_sortinfo_alv,
    ls_sort     TYPE slis_sortinfo_alv,
    ls_layout   TYPE slis_layout_alv.

  m_fieldcat 'VKORG' ''  ''.
  m_fieldcat 'KUNNR' ''  ''.
  m_fieldcat 'VBELN' ''  ''.
  m_fieldcat 'NETWR' 'X' 'WAERK'.
  m_fieldcat 'WAERK' ''  ''.

  m_sort 'VKORG' 'X'.                  " Sort by vkorg and subtotal
  m_sort 'KUNNR' 'X'.                  " Sort by kunnr and subtotal
  m_sort 'VBELN' ''.                   " Sort by vbeln

  ls_layout-cell_merge = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            is_layout   = ls_layout
            it_fieldcat = lt_fieldcat
            it_sort     = lt_sort
       TABLES
            t_outtab    = gt_vbak.

ENDFORM.       

36
ALV / ALV - Ejemplo de Code - Group
« en: 03 de Noviembre de 2007, 10:39:04 am »
REPORT Y_ALV_CODE_GROUP.

TYPE-POOLS: SLIS.
TABLES:MARC, MARD, VBAP, LIPS, EKPO, VBFA, EKBE, MARM, VBBE, MARA, MBEW.

SELECTION-SCREEN BEGIN OF BLOCK SEL WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_WERKS FOR MARC-WERKS, " Plant
                S_MATNR FOR MARC-MATNR, " Material
                S_MTART FOR MARA-MTART. " Material Type
SELECTION-SCREEN END OF BLOCK SEL.

PARAMETERS: P_VARI LIKE DISvariant-VARIANT. " ALV Variant

CONSTANTS: FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.

DATA: BEGIN OF INV OCCURS 100,
        WERKS LIKE MARD-WERKS, " Plant
        MATNR LIKE MARD-MATNR, " Material
        MTART LIKE MARA-MTART, " Material Type
        STPRS LIKE MBEW-STPRS, " Standard Price
        AVAIL LIKE MARD-LABST, " Available
        LABST LIKE MARD-LABST, " Unrestricted use
        INSME LIKE MARD-INSME, " Quality Inspection
        RETME LIKE MARD-RETME, " Returns
        TRANS LIKE MARC-UMLMC, " Stock in transit (calculated)
        UMLMC LIKE MARC-UMLMC, " Stock Transfer (plant)
        UMLME LIKE MARD-UMLME, " Transfer (SLoc)
        WESBS LIKE EKBE-WESBS, " GR Blocked Stock
        TRAME LIKE MARC-TRAME, " Stock in transit
        SPEME LIKE MARD-SPEME, " Blocked
        KWMENG LIKE VBAP-KWMENG, " Sales orders
        LFIMG LIKE LIPS-LFIMG, " Scheduled for Delivery
        MENGE LIKE EKPO-MENGE, " Open Purch. Orders
        VALUE LIKE MBEW-SALK3, " Stock Value (Calculated)
        MEINS LIKE MARA-MEINS, " Unit of measure
      END OF INV.

DATA: FIELDTAB TYPE SLIS_T_FIELDCAT_ALV,
      HEADING  TYPE SLIS_T_LISTHEADER,
      LAYOUT   TYPE SLIS_LAYOUT_ALV,
      EVENTS   TYPE SLIS_T_EVENT,
      REPNAME  LIKE SY-REPID,
      F2CODE   LIKE SY-UCOMM VALUE  '&ETA',
      G_SAVE(1) TYPE C,
      G_EXIT(1) TYPE C,
      G_VARIANT LIKE DISVARIANT,
      GX_VARIANT LIKE DISVARIANT.

break-point.
INITIALIZATION.
  REPNAME = SY-REPID.
  PERFORM INITIALIZE_FIELDCAT USING FIELDTAB[].
  PERFORM BUILD_EVENTTAB USING EVENTS[].
  PERFORM BUILD_COMMENT USING HEADING[].
  PERFORM INITIALIZE_VARIANT.

break-point.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI.
  PERFORM F4_FOR_VARIANT.
break-point.
AT SELECTION-SCREEN.
  PERFORM PAI_OF_SELECTION_SCREEN.
break-point.
START-OF-SELECTION.
  PERFORM GET_MARD.
  PERFORM GET_UNIT_OF_MEASURE.
  PERFORM GET_MARC.
  PERFORM GET_EKPO.
  PERFORM GET_LIPS.
  PERFORM GET_VBAP.
  PERFORM GET_OPEN.
  PERFORM GET_PRICE.

END-OF-SELECTION.
break-point.
  PERFORM BUILD_LAYOUT USING LAYOUT.
  PERFORM WRITE_OUTPUT.
 

*&---------------------------------------------------------------------*
*&      Form  INITIALIZE_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_FIELDTAB[]  text                                           *
*----------------------------------------------------------------------*
FORM INITIALIZE_FIELDCAT USING P_FIELDTAB TYPE SLIS_T_FIELDCAT_ALV.
  DATA: L_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
* fixed columns (obligatory)
  CLEAR L_FIELDCAT.

  L_FIELDCAT-TABNAME    = 'INV'.
  L_FIELDCAT-FIX_COLUMN = 'X'.
  L_FIELDCAT-NO_OUT     = 'O'.

  L_FIELDCAT-FIELDNAME  = 'WERKS'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME  = 'MATNR'.
  APPEND L_FIELDCAT TO P_FIELDTAB.

* totalized columns
  CLEAR L_FIELDCAT.
  L_FIELDCAT-TABNAME   = 'INV'.
  L_FIELDCAT-SP_GROUP  = 'A'.
  L_FIELDCAT-DO_SUM    = 'X'.
  L_FIELDCAT-FIELDNAME = 'LABST'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'INSME'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'RETME'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'UMLME'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'WESBS'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'SPEME'.
  APPEND L_FIELDCAT TO P_FIELDTAB.

* columns with different description
  L_FIELDCAT-FIELDNAME = 'KWMENG'.
  L_FIELDCAT-SELTEXT_M = 'Sales Orders'.
  L_FIELDCAT-SELTEXT_S = 'Sales Or'.
  L_FIELDCAT-SELTEXT_L = 'Sales Orders Qty'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'LFIMG'.
  L_FIELDCAT-SELTEXT_M = 'Sched. Delivery'.
  L_FIELDCAT-SELTEXT_S = 'Schd. Del'.
  L_FIELDCAT-SELTEXT_L = 'Scheduled for Delivery'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'TRANS'.
  L_FIELDCAT-SELTEXT_M = 'Stk. in transit'.
  L_FIELDCAT-SELTEXT_S = 'Stk. trns'.
  L_FIELDCAT-SELTEXT_L = 'Stock in transit (sum)'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'AVAIL'.
  L_FIELDCAT-SELTEXT_M = 'Available'.
  L_FIELDCAT-SELTEXT_S = 'Avail.'.
  L_FIELDCAT-SELTEXT_L = 'Stock Available'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'MENGE'.
  L_FIELDCAT-SELTEXT_M = 'Open Orders'.
  L_FIELDCAT-SELTEXT_S = 'Open Ord'.
  L_FIELDCAT-SELTEXT_L = 'Open Purchase Orders'.
  APPEND L_FIELDCAT TO P_FIELDTAB.

* columns not displayed
  CLEAR L_FIELDCAT.
  L_FIELDCAT-TABNAME   = 'INV'.
  L_FIELDCAT-SP_GROUP  = 'A'.
  L_FIELDCAT-NO_OUT    = 'X'.
  L_FIELDCAT-FIELDNAME = 'MEINS'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'UMLMC'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'TRAME'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'STPRS'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
  L_FIELDCAT-FIELDNAME = 'VALUE'.
  APPEND L_FIELDCAT TO P_FIELDTAB.
ENDFORM.                               " INITIALIZE_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  BUILD_EVENTTAB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_EVENTS[]  text                                             *
*----------------------------------------------------------------------*
FORM BUILD_EVENTTAB USING P_EVENTS TYPE SLIS_T_EVENT.
  DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
       EXPORTING
            I_LIST_TYPE = 0
       IMPORTING
            ET_EVENTS   = P_EVENTS.
  READ TABLE P_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
                           INTO LS_EVENT.
  IF SY-SUBRC = 0.
    MOVE FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
    APPEND LS_EVENT TO P_EVENTS.
  ENDIF.
ENDFORM.                               " BUILD_EVENTTAB

*&---------------------------------------------------------------------*
*&      Form  BUILD_COMMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_HEADING[]  text                                            *
*----------------------------------------------------------------------*
FORM BUILD_COMMENT USING P_HEADING TYPE SLIS_T_LISTHEADER.
  DATA: HLINE TYPE SLIS_LISTHEADER,
        TEXT(60) TYPE C,
        SEP(20) TYPE C.
  CLEAR: HLINE, TEXT.
  HLINE-TYP  = 'H'.
  WRITE: TEXT-101 TO TEXT+23.
  HLINE-INFO = TEXT.
  APPEND HLINE TO P_HEADING.
  CLEAR TEXT.
  WRITE: 'User: ' TO TEXT,
         SY-UNAME TO TEXT+6,
         'Date: ' TO TEXT+25,
         SY-DATUM TO TEXT+31,
         'Page: ' TO TEXT+50,
         SY-PAGNO TO TEXT+56.
  HLINE-INFO = TEXT.
  APPEND HLINE TO P_HEADING.
 
 

ENDFORM.                    " BUILD_COMMENT

*---------------------------------------------------------------------*
*       FORM TOP_OF_PAGE                                              *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
       EXPORTING
            IT_LIST_COMMENTARY = HEADING.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  INITIALIZE_VARIANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM INITIALIZE_VARIANT.
  G_SAVE = 'A'.
  CLEAR G_VARIANT.
  G_VARIANT-REPORT = REPNAME.
  GX_VARIANT = G_VARIANT.
  CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
       EXPORTING
            I_SAVE     = G_SAVE
       CHANGING
            CS_VARIANT = GX_VARIANT
       EXCEPTIONS
            NOT_FOUND  = 2.
  IF SY-SUBRC = 0.
    P_VARI = GX_VARIANT-VARIANT.
  ENDIF.
ENDFORM.                               " INITIALIZE_VARIANT

*&---------------------------------------------------------------------*
*&      Form  F4_FOR_VARIANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F4_FOR_VARIANT.
  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
       EXPORTING
            IS_VARIANT = G_VARIANT
            I_SAVE     = G_SAVE
       IMPORTING
            E_EXIT     = G_EXIT
            ES_VARIANT = GX_VARIANT
       EXCEPTIONS
            NOT_FOUND  = 2.
  IF SY-SUBRC = 2.
    MESSAGE ID SY-MSGID TYPE 'S'      NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    IF G_EXIT = SPACE.
      P_VARI = GX_VARIANT-VARIANT.
    ENDIF.
  ENDIF.
ENDFORM.                               " F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*&      Form  PAI_OF_SELECTION_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM PAI_OF_SELECTION_SCREEN.
*
  IF NOT P_VARI IS INITIAL.
    MOVE G_VARIANT TO GX_VARIANT.
    MOVE P_VARI TO GX_VARIANT-VARIANT.
    CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
         EXPORTING
              I_SAVE     = G_SAVE
         CHANGING
              CS_VARIANT = GX_VARIANT.
    G_VARIANT = GX_VARIANT.
  ELSE.
    PERFORM INITIALIZE_VARIANT.
  ENDIF.
ENDFORM.                               " PAI_OF_SELECTION_SCREEN
 

*&---------------------------------------------------------------------*
*&      Form  GET_MARD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_MARD.
  SELECT MATNR WERKS LABST INSME RETME UMLME SPEME
         FROM MARD
         INTO CORRESPONDING FIELDS OF INV
         WHERE MATNR IN S_MATNR
         AND   WERKS IN S_WERKS.
    COLLECT INV.
  ENDSELECT.
  PERFORM FILTER_BY_MATERIAL_TYPE.
ENDFORM.                               " GET_MARD

*&---------------------------------------------------------------------*
*&      Form  FILTER_BY_MATERIAL_TYPE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FILTER_BY_MATERIAL_TYPE.
  LOOP AT INV.
    CLEAR INV-MTART.
    SELECT SINGLE MTART
           INTO INV-MTART
           FROM MARA
           WHERE MATNR EQ INV-MATNR
           AND   MTART IN S_MTART.
    IF SY-SUBRC EQ 0.
      MODIFY INV.
    ELSE.
      DELETE INV.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " FILTER_BY_MATERIAL_TYPE

*&---------------------------------------------------------------------*
*&      Form  GET_MARC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_MARC.
  LOOP AT INV.
    SELECT SINGLE UMLMC TRAME
           FROM MARC
           INTO CORRESPONDING FIELDS OF INV
           WHERE MATNR EQ INV-MATNR
           AND   WERKS EQ INV-WERKS.
    IF SY-SUBRC EQ 0.
      INV-TRANS = INV-UMLMC + INV-TRAME.
      MODIFY INV.
    ENDIF.
  ENDLOOP.
ENDFORM.                               " GET_MARC
*&---------------------------------------------------------------------*
*&      Form  GET_EKPO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_EKPO.
  DATA: WESBS LIKE INV-WESBS,
        SHKZG LIKE EKBE-SHKZG,
        MEINS LIKE EKPO-MEINS,
        LMEIN LIKE EKPO-LMEIN.
  LOOP AT INV.
    CLEAR: WESBS, SHKZG, MEINS, LMEIN.
    SELECT Y~WESBS Y~SHKZG X~MEINS X~LMEIN
           INTO (WESBS, SHKZG, MEINS, LMEIN)
           FROM EKPO AS X JOIN EKBE AS Y
           ON   X~EBELN = Y~EBELN
           AND  X~EBELP = Y~EBELP
           WHERE X~MATNR EQ INV-MATNR
           AND   X~WERKS EQ INV-WERKS
           AND   X~LOEKZ NE 'L'.
      IF SHKZG EQ 'H'.
        MULTIPLY WESBS BY -1.
      ENDIF.
      IF MEINS NE LMEIN.
        PERFORM CONVERT_UNIT_OF_MEASURE CHANGING INV-MATNR MEINS WESBS.
      ENDIF.
      ADD WESBS TO INV-WESBS.
    ENDSELECT.
    MODIFY INV.
  ENDLOOP.
ENDFORM.                               " GET_EKPO
*&---------------------------------------------------------------------*
*&      Form  GET_LIPS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_LIPS.
  DATA: LFIMG LIKE INV-LFIMG.
  LOOP AT INV.
    CLEAR: LFIMG, INV-LFIMG.
    SELECT OMENG
           INTO LFIMG
           FROM VBBE
           WHERE MATNR EQ INV-MATNR
           AND   WERKS EQ INV-WERKS
           AND   VBTYP EQ 'J'.
      ADD LFIMG TO INV-LFIMG.
    ENDSELECT.
    MODIFY INV.
  ENDLOOP.
ENDFORM.                               " GET_LIPS
*&---------------------------------------------------------------------*
*&      Form  GET_VBAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_VBAP.
  DATA: KWMENG LIKE INV-KWMENG.
  LOOP AT INV.
    CLEAR: KWMENG, INV-KWMENG.
    SELECT OMENG
           INTO KWMENG
           FROM VBBE
           WHERE MATNR EQ INV-MATNR
           AND   WERKS EQ INV-WERKS
           AND   VBTYP EQ 'C'.
      ADD KWMENG TO INV-KWMENG.
    ENDSELECT.
    INV-AVAIL = INV-LABST - INV-INSME - INV-KWMENG - INV-LFIMG.
    MODIFY INV.
  ENDLOOP.
ENDFORM.                               " GET_VBAP

*&---------------------------------------------------------------------*
*&      Form  GET_UNIT_OF_MEASURE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_UNIT_OF_MEASURE.
  LOOP AT INV.
    SELECT SINGLE MEINS
           FROM MARA
           INTO INV-MEINS
           WHERE MATNR EQ INV-MATNR.
    MODIFY INV.
  ENDLOOP.
ENDFORM.                               " GET_UNIT_OF_MEASURE

*&---------------------------------------------------------------------*
*&      Form  GET_OPEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_OPEN.
  DATA: BEGIN OF XTAB OCCURS 10,       " Open orders table
           WERKS LIKE EKPO-WERKS,
           LGORT LIKE EKPO-LGORT,
           MATNR LIKE EKPO-MATNR,
           MENGE LIKE EKPO-MENGE,
           MENGK LIKE EKPO-MENGE,
         END OF XTAB.
  RANGES: L_WERKS FOR MARD-WERKS.

  LOOP AT INV.
    REFRESH XTAB.
    CLEAR: XTAB, L_WERKS.
    MOVE INV-WERKS TO L_WERKS-LOW.
    CALL FUNCTION 'MB_ADD_PURCHASE_ORDER_QUANTITY'
         EXPORTING
              X_MATNR = INV-MATNR
              X_MEINS = INV-MEINS
              X_ELIKZ = SPACE
              X_LOEKZ = SPACE
         TABLES
              XTAB    = XTAB
              XWERKS  = L_WERKS.
    MOVE XTAB-MENGE TO INV-MENGE.
    MODIFY INV.
  ENDLOOP.
ENDFORM.                               " GET_OPEN

*&---------------------------------------------------------------------*
*&      Form  GET_PRICE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_PRICE.
  LOOP AT INV.
    SELECT SINGLE STPRS
           FROM MBEW
           INTO INV-STPRS
           WHERE MATNR EQ INV-MATNR
           AND   BWKEY EQ INV-WERKS
           AND   BWTAR EQ SPACE.
      IF SY-SUBRC EQ 0.
        INV-VALUE = INV-STPRS *
                  ( INV-LABST + INV-INSME + INV-TRANS + INV-SPEME ).
        MODIFY INV.
      ENDIF.
  ENDLOOP.
ENDFORM.                    " GET_PRICE

*---------------------------------------------------------------------*
*       FORM CONVERT_UNIT_OF_MEASURE                                  *
*---------------------------------------------------------------------*
*       text                                                          *
*---------------------------------------------------------------------*
*  -->  P_MATNR                                                       *
*  -->  P_VRKME                                                       *
*  -->  P_QUANT                                                       *
*---------------------------------------------------------------------*
FORM CONVERT_UNIT_OF_MEASURE USING P_MATNR P_VRKME P_QUANT.
  DATA: UMREZ LIKE MARM-UMREZ,
        UMREN LIKE MARM-UMREN.
  SELECT SINGLE UMREZ UMREN
         INTO (UMREZ, UMREN)
         FROM MARM
         WHERE MATNR EQ P_MATNR
         AND   MEINH EQ P_VRKME.
  IF SY-SUBRC EQ 0.
    COMPUTE P_QUANT = ( P_QUANT * UMREZ ) / UMREN.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LAYOUT  text                                               *
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT USING P_LAYOUT TYPE SLIS_LAYOUT_ALV.
  P_LAYOUT-F2CODE       = F2CODE.
  P_LAYOUT-ZEBRA        = 'X'.
  P_LAYOUT-DETAIL_POPUP = 'X'.
ENDFORM.                               " BUILD_LAYOUT

*&---------------------------------------------------------------------*
*&      Form  WRITE_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM WRITE_OUTPUT.
  SORT INV BY WERKS MATNR.
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
            I_PROGRAM_NAME     = REPNAME
            I_INTERNAL_TABNAME = 'INV'
            I_INCLNAME         = REPNAME
       CHANGING
            CT_FIELDCAT        = FIELDTAB.
  IF SY-SUBRC <> 0.
    WRITE: 'SY-SUBRC: ', SY-SUBRC, 'REUSE_ALV_FIELDCATALOG_MERGE'.
  ENDIF.

  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
            I_CALLBACK_PROGRAM = REPNAME
            I_STRUCTURE_NAME   = 'INV'
            IS_LAYOUT          = LAYOUT
            IT_FIELDCAT        = FIELDTAB
            I_DEFAULT          = 'A'
            I_SAVE             = G_SAVE
            IS_VARIANT         = G_VARIANT
            IT_EVENTS          = EVENTS[]
       TABLES
            T_OUTTAB           = INV.
break-point.
  IF SY-SUBRC <> 0.
    WRITE: 'SY-SUBRC: ', SY-SUBRC, 'REUSE_ALV_LIST_DISPLAY'.
  ENDIF.
ENDFORM

37
ALV / ALV - Elemplo con Auto Refresh Cada 5 Segundos
« en: 03 de Noviembre de 2007, 10:35:57 am »
REPORT Y_ALV_AUTO_REFRESH.

TYPE-POOLS: slis.                      " ALV Global Types

DATA :
  gt_user LIKE uinfo OCCURS 0 WITH HEADER LINE. " User info in SM04

*---------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM f_read_data.

  PERFORM f_display_data.

*---------------------------------------------------------------------*
*       Form  F_LIRE_DATA
*---------------------------------------------------------------------*
FORM f_read_data.

  REFRESH gt_user.

* Get User's info
  CALL FUNCTION 'THUSRINFO'
       TABLES
            usr_tabl = gt_user.

* Wait in a task
  PERFORM f_call_rfc_wait.

ENDFORM.                               " F_READ_DATA
*---------------------------------------------------------------------*
*      Form  F_DISPLAY_DATA
*---------------------------------------------------------------------*
FORM f_display_data.

  DEFINE m_sort.
    add 1 to ls_sort-spos.
    ls_sort-fieldname = &1.
    append ls_sort to lt_sort.
  END-OF-DEFINITION.

  DEFINE m_event_exit.
    clear ls_event_exit.
    ls_event_exit-ucomm = &1.
    ls_event_exit-after = 'X'.
    append ls_event_exit to lt_event_exit.
  END-OF-DEFINITION.

  DATA :
    ls_layout     TYPE slis_layout_alv,
    lt_sort       TYPE slis_t_sortinfo_alv,
    ls_sort       TYPE slis_sortinfo_alv,
    lt_event_exit TYPE slis_t_event_exit,
    ls_event_exit TYPE slis_event_exit.

* Build Sort Table
  m_sort 'ZEIT'.

* Build Event Exit Table
  m_event_exit '&NTE'.                 " Refresh

  ls_layout-zebra = 'X'.
  ls_layout-colwidth_optimize = 'X'.

  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
            i_callback_program      = sy-cprog
            i_callback_user_command = 'USER_COMMAND'
            is_layout               = ls_layout
            i_structure_name        = 'UINFO'
            it_sort                 = lt_sort
            it_event_exit           = lt_event_exit
       TABLES
            t_outtab                = gt_user.

ENDFORM.                               " F_DISPLAY_DATA
*---------------------------------------------------------------------*
*       FORM USER_COMMAND                                             *
*---------------------------------------------------------------------*
FORM user_command USING i_ucomm     TYPE syucomm
                        is_selfield TYPE slis_selfield.     "#EC CALLED

  CASE i_ucomm.
    WHEN '&NTE'.
      PERFORM f_read_data.
      is_selfield-refresh = 'X'.
      SET USER-COMMAND '&OPT'.         " Optimize columns width
  ENDCASE.

ENDFORM.                               " USER_COMMAND
*---------------------------------------------------------------------*
*      Form  F_CALL_RFC_WAIT
*---------------------------------------------------------------------*
FORM f_call_rfc_wait.

  DATA lv_mssg(80).                                         "#EC NEEDED

* Wait in a task
  CALL FUNCTION 'RFC_PING_AND_WAIT' STARTING NEW TASK '001'
    PERFORMING f_task_end ON END OF TASK
    EXPORTING
      seconds               = 5        " Refresh time
      busy_waiting          = space
    EXCEPTIONS
      RESOURCE_FAILURE      = 1
      communication_failure = 2  MESSAGE lv_mssg
      system_failure        = 3  MESSAGE lv_mssg
      OTHERS                = 4.

ENDFORM.                               " F_CALL_RFC_WAIT
*---------------------------------------------------------------------*
*      Form  F_TASK_END
*---------------------------------------------------------------------*
FORM f_task_end USING u_taskname.

  DATA lv_mssg(80).                                         "#EC NEEDED

* Receiving task results
  RECEIVE RESULTS FROM FUNCTION 'RFC_PING_AND_WAIT'
    EXCEPTIONS
      RESOURCE_FAILURE      = 1
      communication_failure = 2  MESSAGE lv_mssg
      system_failure        = 3  MESSAGE lv_mssg
      OTHERS                = 4.

  CHECK sy-subrc EQ 0.
  SET USER-COMMAND '&NTE'.             " Refresh

ENDFORM.                               

38
Reports / Como Crear ListBox en Reportes
« en: 03 de Noviembre de 2007, 10:30:37 am »
REPORT Y_ListBox_en_Reportes.

TYPE-POOLS: vrm.
DATA: name TYPE vrm_id, list TYPE vrm_values, value LIKE LINE OF list.
PARAMETERS: ps_parm(10) AS LISTBOX VISIBLE LENGTH 10.

AT SELECTION-SCREEN OUTPUT.
  name = 'PS_PARM'.
  value-key = '1'. value-text = 'Linea 1'. APPEND value TO list.
  value-key = '2'. value-text = 'Linea 2'. APPEND value TO list.
  value-key = '3'. value-text = 'Linea 3'. APPEND value TO list.
  value-key = '4'. value-text = 'Linea 4'. APPEND value TO list.
  value-key = '5'. value-text = 'Linea 5'. APPEND value TO list.
  value-key = '6'. value-text = 'Linea 6'. APPEND value TO list.

  CALL FUNCTION 'VRM_SET_VALUES'
       EXPORTING
            id     = name
            values = list.

START-OF-SELECTION.
  WRITE: / 'Parametros : ', ps_parm.

39
ALV / ALV - SALIDAS DE ALMACEN
« en: 03 de Noviembre de 2007, 10:27:51 am »
report y_salidas_de_almacen
      no standard page heading
      message-id zm
      line-count 065
      line-size 080.

***************************** ALV **************************************
type-pools: slis.

data: alv_fieldtab type slis_t_fieldcat_alv,
      alv_heading  type slis_t_listheader,
      alv_layout   type slis_layout_alv,
      alv_events   type slis_t_event,
      alv_sort     type slis_t_sortinfo_alv,
      alv_filter   type slis_t_filter_alv,
      alv_repname  like sy-repid,
      alv_f2code   like sy-ucomm value  '&ETA',
      alv_g_save(1) type c,
      alv_g_exit(1) type c,
      alv_g_variant like disvariant,
      alv_gx_variant like disvariant.

data: alv_fieldcat type slis_fieldcat_alv.
************************************************************************

*------TABLAS/ESTRUCTURAS----------------------------------------------*
tables: ekbe,
        mseg,
        ekko,
        ekpo,
        mkpf,
        lfa1,
        makt.

*------TABLAS INTERNAS-------------------------------------------------*
* tablas internas
data: begin of i_pedidos occurs 100,
        charg  like mseg-charg,
        lifnr  like mseg-lifnr,
        matnr  like mseg-matnr,
        ebeln  like anek-ebeln,
        ebelp  like anek-ebelp,
        budat  like ekbe-budat,
        menge  like ekpo-menge,    "Cantidad original
        meins  like ekpo-meins,
        bwart  like mseg-bwart,
        mblnr  like iseg-mblnr,
        mjahr  like iseg-mjahr,
        zeile  like iseg-zeile,
        cmov   like ekpo-menge,
        crest  like ekpo-menge,
      end of i_pedidos.

data: begin of i_listado occurs 100,
        lifnr  like mseg-lifnr,
        matnr  like mseg-matnr,
        bwart  like mseg-bwart,
        mblnr  like iseg-mblnr,
        mjahr  like iseg-mjahr,
        zeile  like iseg-zeile,
        budat_e  like ekbe-budat,
        ebeln  like anek-ebeln,
        ebelp  like anek-ebelp,
        menge_e  like ekpo-menge,    "Cantidad original
        meins  like ekpo-meins,
        charg  like mseg-charg,
        budat_s  like ekbe-budat,
        menge_s  like ekpo-menge,    "Cantidad original
        color    type slis_t_specialcol_alv,
      end of i_listado.

data: begin of i_aux occurs 100,
        charg  like mseg-charg,
        lifnr  like mseg-lifnr,
        matnr  like mseg-matnr,
        ebeln  like anek-ebeln,
        ebelp  like anek-ebelp,
        cmov   like ekpo-menge,
      end of i_aux.

*------VARIABLES-------------------------------------------------------*
data: l_listado_ant like i_listado.

*------PARAMETER/SELECT-OPTIONS EN PANTALLA----------------------------*
selection-screen begin of block blk_par with frame title text-002. "Pará
select-options: s_bukrs  for ekko-bukrs default '1120',
                s_lifnr  for ekko-lifnr,                    "Proveedor
                s_matnr  for ekpo-matnr,                    "Material
                s_charg  for mseg-charg.


selection-screen end of block blk_par.

**************************** ALV ***************************************
data p_vari like disvariant-variant.   "Display variant
************************************************************************


************************************************************************
*
*                  LOGICA DEL PROGRAMA
*
************************************************************************

*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
initialization.


**************************** ALV ***************************************
  alv_repname = sy-repid.
  perform initialize_fieldcat1 using alv_fieldtab[].
  perform alv_build_eventtab using alv_events[] '1'.
*  PERFORM BUILD_COMMENT USING ALV_HEADING[].
  perform alv_initialize_variant.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
*  PERFORM alv_f4_for_variant.

************************************************************************

at selection-screen.

***************************** ALV **************************************
* perform alv_pai_of_selection_screen.
************************************************************************

*----------------------------------------------------------------------
* START-OF-SELECTION.
*----------------------------------------------------------------------*
start-of-selection.

  perform seleccion_datos.

***************************** ALV **************************************
  perform alv_build_layout using alv_layout.
  perform alv_sortinfo tables alv_sort.
  alv_layout-coltab_fieldname = 'COLOR'.
  perform alv_write_output tables i_listado using 'I_LISTADO'.
************************************************************************


************************************************************************
*
*                  FORMS ADICIONALES
*
************************************************************************

*&---------------------------------------------------------------------*
*&      Form  SELECCION_DATOS
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
form seleccion_datos.
  data: i_mseg  like mseg occurs 20 with header line,
        i_ekbe  like ekbe occurs 20 with header line.
  data: l_cmov  like ekpo-menge,
        l_crest like ekpo-menge,
        l_menge like ekpo-menge.

* Recuperamos todos los 101

  select * from mseg
    into table i_mseg
   where xauto = ''
     and bwart in ('101','102')
     and charg in s_charg
     and matnr in s_matnr
     and lifnr in s_lifnr.

  sort i_mseg.
  free i_ekbe.
  loop at i_mseg.
    select * from ekbe
      appending table i_ekbe
     where gjahr = i_mseg-gjahr
       and belnr = i_mseg-mblnr
       and buzei = i_mseg-zeile
       and bwart = i_mseg-bwart.
  endloop.

  sort i_ekbe.
  free i_pedidos.
  loop at i_ekbe.
    at new ebelp.
      select single lifnr from ekko
        into ekko-lifnr
       where ebeln = i_ekbe-ebeln.
      select single menge meins from ekpo
        into (ekpo-menge, ekpo-meins)
       where ebeln = i_ekbe-ebeln
         and ebelp = i_ekbe-ebelp.
      clear l_crest.
    endat.

    clear i_pedidos.
    i_pedidos-ebeln = i_ekbe-ebeln.
    i_pedidos-ebelp = i_ekbe-ebelp.
    i_pedidos-menge = ekpo-menge.
    i_pedidos-meins = ekpo-meins.
    i_pedidos-charg = i_ekbe-charg.
    i_pedidos-matnr = i_ekbe-matnr.
    i_pedidos-lifnr = ekko-lifnr.
    i_pedidos-budat = i_ekbe-budat.
    i_pedidos-bwart = i_ekbe-bwart.
    i_pedidos-mblnr = i_ekbe-belnr.
    i_pedidos-mjahr = i_ekbe-gjahr.
    i_pedidos-zeile = i_ekbe-buzei.
    if i_ekbe-bwart = '101'.
      i_pedidos-cmov  = i_ekbe-menge.
      add i_ekbe-menge to l_crest.
    else.
      i_pedidos-cmov  = - i_ekbe-menge.
      subtract i_ekbe-menge from l_crest.
    endif.
    i_pedidos-crest = l_crest.

    append i_pedidos.

    move-corresponding i_pedidos to i_aux.
    collect i_aux.

  endloop.

  sort i_pedidos.
  select * from mseg
    into table i_mseg
   where xauto = ''
     and bwart in ('411','412')
     and charg in s_charg
     and matnr in s_matnr
     and lifnr in s_lifnr.

  sort i_mseg.
  loop at i_mseg.
    select single budat from mkpf
      into mkpf-budat
     where mblnr = i_mseg-mblnr
       and mjahr = i_mseg-mjahr.

    sort i_aux.
    loop at i_aux where charg = i_mseg-charg
                    and lifnr = i_mseg-lifnr
                    and matnr = i_mseg-matnr.
      if i_mseg-bwart = '411' and
         i_aux-cmov >= i_mseg-menge.
        move-corresponding i_aux to i_pedidos.
        i_pedidos-budat  = mkpf-budat.
        i_pedidos-bwart = i_mseg-bwart.
        i_pedidos-mblnr = i_mseg-mblnr.
        i_pedidos-mjahr = i_mseg-mjahr.
        i_pedidos-zeile = i_mseg-zeile.
        i_pedidos-cmov  = - i_mseg-menge.
        i_pedidos-crest = i_aux-cmov - i_mseg-menge.

        move-corresponding i_pedidos to i_aux.
        collect i_aux.

        append i_pedidos.
        exit.
      endif.
      if i_mseg-bwart = '412' and
         i_aux-cmov > i_mseg-menge.
        move-corresponding i_aux to i_pedidos.
        i_pedidos-budat  = mkpf-budat.
        i_pedidos-bwart = i_mseg-bwart.
        i_pedidos-mblnr = i_mseg-mblnr.
        i_pedidos-mjahr = i_mseg-mjahr.
        i_pedidos-zeile = i_mseg-zeile.
        i_pedidos-cmov  = i_mseg-menge.
        i_pedidos-crest = i_aux-cmov + i_mseg-menge.

        move-corresponding i_pedidos to i_aux.
        collect i_aux.

        append i_pedidos.
        exit.
      endif.
    endloop.
    if sy-subrc ne 0.
      clear i_pedidos.
      i_pedidos-meins = 'ST'.
      i_pedidos-budat  = mkpf-budat.
      i_pedidos-charg = i_mseg-charg.
      i_pedidos-matnr = i_mseg-matnr.
      i_pedidos-lifnr = i_mseg-lifnr.
      i_pedidos-bwart = i_mseg-bwart.
      i_pedidos-mblnr = i_mseg-mblnr.
      i_pedidos-mjahr = i_mseg-mjahr.
      i_pedidos-zeile = i_mseg-zeile.
      i_pedidos-cmov  = i_mseg-menge.
      move-corresponding i_pedidos to i_aux.
      collect i_aux.
      append i_pedidos.
    endif.

  endloop.

  sort i_pedidos.
  loop at i_pedidos.
    clear i_listado.
    move-corresponding i_pedidos to i_listado.
    if i_pedidos-bwart = '101' or
       i_pedidos-bwart = '102'.
      i_listado-budat_e = i_pedidos-budat.
      i_listado-menge_e = i_pedidos-menge.
    else.
      i_listado-budat_s = i_pedidos-budat.
      i_listado-menge_s = i_pedidos-menge.
      clear: i_listado-ebeln, i_listado-ebelp.
    endif.
    append i_listado.
  endloop.


****************************** ALV ******************************
* Cambia colores de algunas celdas determinadas

  data: color      type slis_specialcol_alv.
  loop at i_listado.
    case i_listado-bwart.
      when '101'.
        clear color.
        color-fieldname = 'BWART'.
        color-color-col = 1.
        append color to i_listado-color.
        color-fieldname = 'BUDAT_E'.
        color-color-col = 1.
        append color to i_listado-color.
        color-fieldname = 'MENGE_E'.
        color-color-col = 1.
        append color to i_listado-color.
      when '102'.
        clear color.
        color-fieldname = 'BWART'.
        color-color-col = 6.
        append color to i_listado-color.
        color-fieldname = 'BUDAT_E'.
        color-color-col = 6.
        append color to i_listado-color.
        color-fieldname = 'MENGE_E'.
        color-color-col = 6.
        append color to i_listado-color.
      when '411'.
        clear color.
        color-fieldname = 'BWART'.
        color-color-col = 3.
        append color to i_listado-color.
        color-fieldname = 'BUDAT_S'.
        color-color-col = 3.
        append color to i_listado-color.
        color-fieldname = 'MENGE_S'.
        color-color-col = 3.
        append color to i_listado-color.
      when '412'.
        clear color.
        color-fieldname = 'BWART'.
        color-color-col = 7.
        append color to i_listado-color.
        color-fieldname = 'BUDAT_S'.
        color-color-col = 7.
        append color to i_listado-color.
        color-fieldname = 'MENGE_S'.
        color-color-col = 7.
        append color to i_listado-color.
    endcase.
    modify i_listado.
  endloop.

*****************************************************************

endform.                               " SELECCIONAR_DATOS


***************************** ALV *************************************

*---------------------------------------------------------------------*
*       FORM initialize_fieldcat1                                     *
*---------------------------------------------------------------------*
*       Cambia los atributos por defecto de algunos campos
*---------------------------------------------------------------------*
form initialize_fieldcat1 using p_fieldtab type slis_t_fieldcat_alv.
  define fieldcat_no_out.
    clear alv_fieldcat.
    alv_fieldcat-tabname      = 'I_LISTADO'.
    alv_fieldcat-fieldname    = &1.
    alv_fieldcat-no_out       = 'X'.
    append alv_fieldcat to p_fieldtab.
  end-of-definition.


  free alv_fieldtab.
  fieldcat_no_out: 'LIFNR', 'MATNR', 'MEINS'.

  clear alv_fieldcat.
  alv_fieldcat-tabname      = 'I_LISTADO'.
  alv_fieldcat-fieldname    = 'MENGE_E'.
  alv_fieldcat-outputlen       = 14.
  alv_fieldcat-no_zero         = 'X'.
  alv_fieldcat-do_sum          = 'X'.
  append alv_fieldcat to p_fieldtab.
  clear alv_fieldcat.
  alv_fieldcat-tabname      = 'I_LISTADO'.
  alv_fieldcat-fieldname    = 'MENGE_S'.
  alv_fieldcat-outputlen       = 14.
  alv_fieldcat-no_zero         = 'X'.
  alv_fieldcat-do_sum          = 'X'.
  append alv_fieldcat to p_fieldtab.
  clear alv_fieldcat.


endform.                               " INITIALIZE_FIELDCAT



*&---------------------------------------------------------------------*
*&      Form  BUILD_COMMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_HEADING[]  text                                            *
*----------------------------------------------------------------------*
form build_comment using p_heading type slis_t_listheader.
  data: hline type slis_listheader,
        text(60) type c,
        sep(20) type c.
  clear: hline, text.
  hline-typ  = 'H'.
  write: 'List of Pending Deliveries' to text+05.
  hline-info = text.
  append hline to p_heading.
  clear text.
  write: 'User: ' to text,
         sy-uname to text+9,
         'Date: ' to text+30,
         sy-datum to text+37,
         'Page: ' to text+50,
         sy-pagno to text+56.
  hline-info = text.
  append hline to p_heading.

endform.                               " BUILD_COMMENT


*&---------------------------------------------------------------------*
*&      Form  BUILD_EVENTTAB
*&---------------------------------------------------------------------*
*       Inicializa las rutinas de los eventos del listado ALV
*----------------------------------------------------------------------*
form alv_build_eventtab using p_events type slis_t_event
                              p_tabla.
  data: ls_event type slis_alv_event.
  call function 'REUSE_ALV_EVENTS_GET'
       exporting
            i_list_type = 0
       importing
            et_events   = p_events.
  read table p_events with key name = slis_ev_top_of_page
                           into ls_event.
  if sy-subrc = 0.
    move slis_ev_top_of_page to ls_event-form.
    modify p_events from ls_event index sy-tabix.
  endif.

  read table p_events with key name = 'TOP_OF_PAGE'
                           into ls_event.
  if sy-subrc = 0.
    move 'TOP_OF_PAGE' to ls_event-form.
    modify p_events from ls_event index sy-tabix.
  endif.

  read table p_events with key name = slis_ev_before_line_output
                           into ls_event.
  if sy-subrc = 0.
    move 'ANTES_ESCRIBIR_LINEA' to ls_event-form.
    modify p_events from ls_event index sy-tabix.
  endif.


endform.                               " BUILD_EVENTTAB

*---------------------------------------------------------------------*
*       FORM ANTES_ESCRIBIR_LINEA                                     *
*---------------------------------------------------------------------*
*       Rutina que se ejecuta antes de escribir una nueva línea
*---------------------------------------------------------------------*
form antes_escribir_linea using p_c type slis_lineinfo.

  check p_c-subtot is initial.

  if not l_listado_ant is initial.
    if l_listado_ant-lifnr ne i_listado-lifnr or
       l_listado_ant-matnr ne i_listado-matnr.
      uline.
      new-page.
    endif.
  endif.
  l_listado_ant = i_listado.

endform.

*---------------------------------------------------------------------**
* FORM TOP_OF_PAGE
**---------------------------------------------------------------------*
form top_of_page.
  data: lt_commentary type slis_t_listheader with header line.

** Header
*  lt_commentary-typ = 'H'. "-- Creo que lo muestra en negrita
*  lt_commentary-info = 'Stock valorado por almacén'.
*  APPEND lt_commentary.
*  CLEAR lt_commentary.
**
  lt_commentary-typ = 'S'.
  lt_commentary-key = 'Proveedor'.

  clear makt.
  select single * from lfa1
   where lifnr = i_listado-lifnr.
  concatenate i_listado-lifnr lfa1-name1 into lt_commentary-info
              separated by space.
  append lt_commentary.
  clear lt_commentary.
**
  lt_commentary-typ = 'S'.
  lt_commentary-key = 'Material'.

  clear makt.
  select single * from makt
   where matnr = i_listado-matnr
     and spras = sy-langu.

  concatenate i_listado-matnr makt-maktx into lt_commentary-info
              separated by space.

  append lt_commentary.
  clear lt_commentary.
**
  call function 'REUSE_ALV_COMMENTARY_WRITE'
  exporting
  it_list_commentary = lt_commentary[]
* I_LOGO =
 i_end_of_list_grid = 'X'.

  write: /60 'ENTRADAS',
          90 'SALIDAS'.
  .
endform.

*---------------------------------------------------------------------*
*       FORM alv_sortinfo                                             *
*---------------------------------------------------------------------*
*       Criterios de ordenación
*---------------------------------------------------------------------*
form alv_sortinfo tables p_alv_sort type slis_t_sortinfo_alv.

  data sortinfo_alv type slis_sortinfo_alv.

*  CLEAR sortinfo_alv.
*  sortinfo_alv-spos = '1'.
*  sortinfo_alv-fieldname = 'LIFNR'.
*  sortinfo_alv-tabname = 'I_LISTADO'.
*  sortinfo_alv-subtot = 'X'.
*  sortinfo_alv-up = 'X'.
*  APPEND sortinfo_alv TO p_alv_sort.

  clear sortinfo_alv.
  sortinfo_alv-spos = '1'.
  sortinfo_alv-fieldname = 'MATNR'.
  sortinfo_alv-tabname = 'I_LISTADO'.
  sortinfo_alv-up = 'X'.
  sortinfo_alv-subtot = 'X'.
  append sortinfo_alv to p_alv_sort.


endform.                    " ALV_SORTINFO

*---------------------------------------------------------------------*
*       FORM alv_set_pf_status                                        *
*---------------------------------------------------------------------*
*       Estatus
*---------------------------------------------------------------------*
form pf_status_set
   using pu_tab_excl_okcode type slis_t_extab.

  set pf-status 'STANDARD' excluding pu_tab_excl_okcode.

endform.

*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LAYOUT  text                                               *
*----------------------------------------------------------------------*
form alv_build_layout using p_layout type slis_layout_alv.
  p_layout-f2code       = alv_f2code.
  p_layout-zebra        = 'X'.
  p_layout-detail_popup = 'X'.

endform.                               " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  WRITE_OUTPUT
*&---------------------------------------------------------------------*
*       Rutina de salida
*----------------------------------------------------------------------*
form alv_write_output tables pi_tabla
                      using pe_tabla.

  call function 'REUSE_ALV_FIELDCATALOG_MERGE'
       exporting
            i_program_name     = alv_repname
            i_internal_tabname = pe_tabla
            i_inclname         = alv_repname
       changing
            ct_fieldcat        = alv_fieldtab.
  if sy-subrc <> 0.
    write: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_FIELDCATALOG_MERGE'.
  endif.
  call function 'REUSE_ALV_LIST_DISPLAY'
       exporting
            i_callback_program = alv_repname
            i_structure_name   = pe_tabla
            is_layout          = alv_layout
            it_fieldcat        = alv_fieldtab
            i_default          = 'A'
            i_save             = alv_g_save
            is_variant         = alv_g_variant
            it_events          = alv_events[]
            it_sort            = alv_sort
            it_filter          = alv_filter
       tables
            t_outtab           = pi_tabla.
  if sy-subrc <> 0.
    write: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
  endif.
endform.                               " WRITE_OUTPUT
*----------------------------------------------------------------------*
form alv_initialize_variant.
  alv_g_save = 'A'.
  clear alv_g_variant.
  alv_g_variant-report = alv_repname.
  alv_gx_variant = alv_g_variant.
  call function 'REUSE_ALV_VARIANT_DEFAULT_GET'
       exporting
            i_save     = alv_g_save
       changing
            cs_variant = alv_gx_variant
       exceptions
            not_found  = 2.
  if sy-subrc = 0.
    p_vari = alv_gx_variant-variant.
  endif.
endform.                               " INITIALIZE_VARIANT

40
Reports / Bajar Contenido de tablas SAP o "Z" al PC Dinamicamente
« en: 03 de Noviembre de 2007, 10:20:18 am »
REPORT  Y_BC_BAJA_DATA_A_PC.
TABLES: dd02t,                         "R/3-DD: Textos de tablas SAP
        dd03l.                         "Campos de tabla

* L¡nea
DATA: i_source LIKE line OCCURS 100 WITH HEADER LINE.
DATA l_resp.
DATA: program_name     LIKE sy-cprog.
DATA: l_mandt.


DATA : c_tipoarch(10)     TYPE c.


DATA : l_linea(72).
DATA : w_linea(72).
DATA : l_tabla(2000).
DEFINE ap.
  append &1 to i_source.
END-OF-DEFINITION.

*------PARAMETER/SELECT-OPTIONS EN PANTALLA----------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk_par WITH FRAME.
PARAMETERS: tabla LIKE dd03l-tabname OBLIGATORY."Nombre de tabla
PARAMETERS: path LIKE rlgrap-filename  "Directorio de salida
                   DEFAULT 'C:\TEMP\' OBLIGATORY,
            ftype  LIKE rlgrap-filetype DEFAULT 'ASC',
            p_sepa(1) TYPE c.
*parameters:  borrar as checkbox,
*             sinmdt as checkbox.
SELECTION-SCREEN END OF BLOCK blk_par.
SELECTION-SCREEN BEGIN OF BLOCK blk_par3 WITH FRAME TITLE text-003."WHE
PARAMETERS: p_w1(80),
            p_w2(80),
            p_w3(80),
            p_w4(80),
            p_w5(80).
SELECTION-SCREEN END OF BLOCK blk_par3.

SELECTION-SCREEN BEGIN OF BLOCK blk_par2 WITH FRAME.
SELECTION-SCREEN END OF BLOCK blk_par2.


INITIALIZATION.

START-OF-SELECTION.

  PERFORM generar_report.

  PERFORM grabar_tabla.



*---------------------------------------------------------------------*
*       FORM GENERAR_REPORT                                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM generar_report.
  DATA l_tabla(10).

  CLEAR l_mandt.
  SELECT * FROM dd03l
   WHERE tabname = tabla
     AND fieldname = 'MANDT'.
    l_mandt = 'X'.
  ENDSELECT.


  CONCATENATE 'I_' tabla INTO l_tabla.
  ap 'REPORT Z.'.
  CONCATENATE 'TABLES' tabla '.' INTO l_linea SEPARATED BY space.
  ap l_linea.
  CONCATENATE 'DATA' l_tabla
              'LIKE' tabla 'OCCURS 1000 WITH HEADER LINE.'
              INTO l_linea SEPARATED BY space.
  ap l_linea.

  ap 'FORM GRABAR_TABLA.'.
  CONCATENATE 'SELECT * FROM' tabla
              'INTO TABLE ' l_tabla
              INTO l_linea SEPARATED BY space.
  ap l_linea.
  IF NOT p_w1 IS INITIAL.
    CONCATENATE 'WHERE' p_w1 INTO l_linea SEPARATED BY space.
    ap l_linea.
    ap p_w2.
    ap p_w3.
    ap p_w4.
    ap p_w5.
  ENDIF.
  ap '.'.

  c_tipoarch = ftype.


  ap 'CALL FUNCTION ''GUI_DOWNLOAD'''.
  ap 'EXPORTING'.
  CONCATENATE  'FILENAME = ''' path tabla '.'  c_tipoarch  '''' INTO l_linea.
  ap l_linea.

  CONCATENATE 'FILETYPE = ''' c_tipoarch '''' INTO l_linea.
  ap l_linea.

  IF NOT ( p_sepa IS INITIAL ).
    CONCATENATE 'WRITE_FIELD_SEPARATOR = ''' p_sepa ''''  INTO l_linea.
    ap l_linea.
  ENDIF.

  ap 'TABLES'.
  CONCATENATE 'DATA_TAB = ' l_tabla '.' INTO l_linea
  SEPARATED BY space.
  ap l_linea.


  ap 'ENDFORM.        "GRABAR_TABLA'.


  PERFORM generate_subroutine_pool TABLES i_source.

ENDFORM.                    "generar_report


*---------------------------------------------------------------------*
*       FORM GRABAR_TABLA                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM grabar_tabla.
  PERFORM grabar_tabla IN PROGRAM (program_name).
ENDFORM.                    "grabar_tabla

*---------------------------------------------------------------------*
*       FORM CARGAR_TABLA                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM cargar_tabla.

* message i208(00) with '¨Est  seguro de querer cargar los datos?'.
  PERFORM cargar_tabla IN PROGRAM (program_name).
ENDFORM.                    "cargar_tabla

*---------------------------------------------------------------------*
*       FORM BORRAR_TABLA                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM borrar_tabla.
  SELECT * FROM dd02t
   WHERE tabname = tabla
     AND ddlanguage = sy-langu.
    EXIT.
  ENDSELECT.
  CONCATENATE '¨Desea borra tabla' tabla INTO l_linea
                                   SEPARATED BY space.
  CONCATENATE l_linea '?' INTO l_linea.

  CALL FUNCTION 'POPUP_CONTINUE_YES_NO'
    EXPORTING
      defaultoption = 'N'
      textline1     = l_linea
      textline2     = dd02t-ddtext
      titel         = 'Confirmaci¢n'
    IMPORTING
      answer        = l_resp
    EXCEPTIONS
      OTHERS        = 1.

  IF l_resp = 'J'.
    PERFORM borrar_tabla IN PROGRAM (program_name).
  ENDIF.
ENDFORM.                    "borrar_tabla
*---------------------------------------------------------------------*
*       FORM GENERATE_SUBROUTINE_POOL                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  SOURCE_TAB                                                    *
*---------------------------------------------------------------------*
FORM generate_subroutine_pool TABLES source_tab.

  DATA:   line_no          TYPE i,
          syntax_check_message(128).
  DESCRIBE TABLE source_tab.
  CHECK sy-tfill GT 0.
  GENERATE SUBROUTINE POOL source_tab
    NAME program_name
    MESSAGE syntax_check_message
    LINE line_no.
  IF sy-subrc NE 0.
    WRITE: / 'Error de sintaxis, mensaje', syntax_check_message,
    / 'en linea', line_no.
    STOP.
  ENDIF.
ENDFORM.

41
ALV / ALV - Ejemplo de Balance
« en: 03 de Noviembre de 2007, 10:18:06 am »
REPORT Y_BALANCE_ALV  NO STANDARD PAGE  HEADING
                                         LINE-SIZE 132
                                         LINE-COUNT 65.
*----------------------------------------------------------------------*
* Tables
*----------------------------------------------------------------------*
TABLES: BSID,          "open items (Accounting: Secondary Index for Customers)
        KNA1,          "customer master
        RF140,         "temp stru (Work Fields for Correspondence (SAPF140*))
        BSAD,          "cleared items (Accounting: Secondary Index for Customers (Cleared Items))
        KNVV,          "sales data (Customer Master Sales Data)
        KNKK.          "credit mgt (

*----------------------------------------------------------------------*
* constants and variables
*----------------------------------------------------------------------*
TYPE-POOLS: SLIS.

DATA: FIELDCAT             TYPE SLIS_T_FIELDCAT_ALV,
      FIELDCAT1             TYPE SLIS_T_FIELDCAT_ALV,
      FIELDCAT_LN          LIKE LINE OF FIELDCAT,
      LAYOUT_IN            TYPE SLIS_LAYOUT_ALV,
      LAYOUT_IN1           TYPE SLIS_LAYOUT_ALV,
      SORTCAT              TYPE SLIS_T_SORTINFO_ALV,
      SORTCAT1              TYPE SLIS_T_SORTINFO_ALV,
      SORTCAT_LN           LIKE LINE OF SORTCAT,
      EVENTCAT1             TYPE SLIS_T_EVENT,
      EVENTCAT             TYPE SLIS_T_EVENT,
      EVENTCAT_LN          LIKE LINE OF EVENTCAT,
      COL_POS              TYPE I.

DATA:  TARG_MONTH(2)         TYPE N,                        "0001
       TARG_YEAR(4)          TYPE N,                        "0001
       TARG_MTH_ABS          TYPE P,                        "0001
       DOC_MONTH(2)          TYPE N,                        "0001
       DOC_YEAR(4)           TYPE N,                        "0001
       DOC_MTH_ABS           TYPE P,                        "0001
       MTH_RESULT            TYPE P,                        "0001
       EXT_DAYS              TYPE P,
       V_DAYS(3)             TYPE C,
       v_kkber               like knkk-kkber.

DATA:
      BEGIN OF INREC OCCURS 1000,                           "0001
        KUNNR    LIKE BSID-KUNNR,
        BELNR    LIKE BSID-BELNR,
        GJAHR    LIKE BSID-GJAHR,
        BLDAT    LIKE BSID-BLDAT,
        XBLNR    LIKE BSID-XBLNR,
        BLART    LIKE BSID-BLART,
        SGTXT    LIKE BSID-SGTXT,
        SHKZG    LIKE BSID-SHKZG,
        DMBTR    LIKE BSID-DMBTR,
        ZFBDT    LIKE BSID-ZFBDT,
        ZBD1T    LIKE BSID-ZBD1T,
        ZBD2T    LIKE BSID-ZBD2T,
        ZBD3T    LIKE BSID-ZBD3T,
        VBELN    LIKE BSID-VBELN,                           " 0001
        ZUONR    LIKE BSID-ZUONR,
      END OF INREC,
      BEGIN OF T_ITEM OCCURS 1000,                          " 0001
        KUNNR LIKE BSID-KUNNR,
        BELNR LIKE BSID-BELNR,
        GJAHR LIKE BSID-GJAHR,
        BLDAT LIKE BSID-BLDAT,
        XBLNR LIKE BSID-XBLNR,
        BLART LIKE BSID-BLART,
        SGTXT LIKE BSID-SGTXT,
        VBELN LIKE BSID-VBELN,
        ZFBDT LIKE BSID-ZFBDT,
        DMBTR LIKE BSID-DMBTR,
        DAYS(3)  TYPE C,
        ZUONR    LIKE BSID-ZUONR,
      END OF T_ITEM,
      T_LINE LIKE T_ITEM OCCURS 1000 WITH HEADER LINE,      " 0001
      BEGIN OF ITAB OCCURS 1000,
        KUNNR    LIKE KNA1-KUNNR,
        TOTAL    TYPE P DECIMALS 2,
        ZFUTURE  TYPE P DECIMALS 2,
        ZCURRENT TYPE P DECIMALS 2,
        30DAYS   TYPE P DECIMALS 2,
        60DAYS   TYPE P DECIMALS 2,
        90DAYS   TYPE P DECIMALS 2,
        99DAYS   TYPE P DECIMALS 2,
        VKBUR    LIKE KNVV-VKBUR,
        VWERK    LIKE KNVV-VWERK,
        VKGRP    LIKE KNVV-VKGRP,
        KLIMK    LIKE KNKK-KLIMK,
        CASHD    LIKE KNKK-CASHD,
        GRUPP    LIKE KNKK-GRUPP,
        ERDAT    LIKE KNA1-ERDAT,
        NAME1    LIKE KNA1-NAME1,
        NAME2    LIKE KNA1-NAME2,
        STRAS    like kna1-STRAS,
        ORT01    like kna1-ORT01,
        TELF1    LIKE KNA1-TELF1,
        PSORT(10),
      END OF ITAB.
DATA: SEL_TAB     TYPE TABLE OF RSPARAMS with header line..
data: t_variant like DISVARIANT occurs 0 with header line.
*----------------------------------------------------------------------*
* parameters and select-options
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLCK0 WITH FRAME TITLE TEXT-001.

PARAMETERS: STIDA LIKE SY-DATUM DEFAULT SY-DATUM OBLIGATORY,
            P_BUKRS LIKE T001-BUKRS MEMORY ID BUK OBLIGATORY.
*           P_BUKRS LIKE T001-BUKRS DEFAULT 'CC01' OBLIGATORY.  "0003
SELECT-OPTIONS: S_VKBUR FOR KNVV-VKBUR,
                S_KUNNR   FOR BSID-KUNNR MATCHCODE OBJECT DEBI,
                S_VKGRP FOR KNVV-VKGRP,
                s_bzirk for knvv-bzirk,
                S_KONDA FOR KNVV-KONDA,
                S_KDGRP FOR KNVV-KVGR2,
                s_kvgr2 for knvv-kvgr2,
                S_KKBER FOR KNKK-KKBER,
                S_GRUPP FOR KNKK-GRUPP,
                S_CTLPC FOR KNKK-CTLPC,
                S_KTOKD FOR KNA1-KTOKD,
                s_blart for bsid-blart.
PARAMETERS: P_FUTURE AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK BLCK0.
*----------------------------------------------------------------------*
* start-of-selection.
*----------------------------------------------------------------------*
START-OF-SELECTION.
*  PERFORM BUILD_EVENTCAT.
*-----------------
  PERFORM GET_CUSTOMER_INVOICES.
* filter records based on selection criteria
  PERFORM FILTER_RECORDS.

END-OF-SELECTION.
*---------------
  PERFORM ADD_SORT_FIELD.
  PERFORM WRITE_REPORT.
*&---------------------------------------------------------------------*
*&      Form  FILTER_RECORDS
*&---------------------------------------------------------------------*
*       To collect all the required data from DB and store them in
*       internal table.
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FILTER_RECORDS.
*
* delete records based on selection criteria
  LOOP AT ITAB.
    SELECT VKBUR VKGRP VWERK ERDAT KONDA KDGRP bzirk kvgr2
      INTO (ITAB-VKBUR, ITAB-VKGRP, ITAB-VWERK, KNVV-ERDAT,
            KNVV-KONDA, KNVV-KDGRP,knvv-bzirk,knvv-kvgr2)
      FROM KNVV WHERE KUNNR =  ITAB-KUNNR
                ORDER BY ERDAT DESCENDING.
      CASE ITAB-VKBUR.
        WHEN 'SA1'.
          ITAB-VKBUR = 'SF25'.
        WHEN 'QLD1'.
          ITAB-VKBUR = 'SF23'.
        WHEN 'WA1'.
          ITAB-VKBUR = 'SF26'.
      ENDCASE.
      EXIT.
    ENDSELECT.
    IF ITAB-VKBUR IN S_VKBUR AND
       ITAB-VKGRP IN S_VKGRP AND
       KNVV-KONDA IN S_KONDA AND
       KNVV-KDGRP IN S_KDGRP and
       knvv-bzirk in s_bzirk and
       knvv-kvgr2 in s_kvgr2.
    ELSE.
      DELETE ITAB.
      CONTINUE.
    ENDIF.
    SELECT SINGLE KLIMK GRUPP CASHD
      INTO (ITAB-KLIMK, ITAB-GRUPP, ITAB-CASHD)
      FROM KNKK WHERE KUNNR =  ITAB-KUNNR
                AND   KKBER IN S_KKBER
                AND   CTLPC IN S_CTLPC
                AND   GRUPP IN S_GRUPP.
    IF SY-SUBRC NE 0.
      DELETE ITAB.
      CONTINUE.
    ENDIF.
    SELECT SINGLE NAME1 NAME2 TELF1 ERDAT stras ORT01
         INTO (ITAB-NAME1, ITAB-NAME2, ITAB-TELF1,
                 ITAB-ERDAT, itab-stras, itab-ORT01)
           FROM KNA1
           WHERE KUNNR =  ITAB-KUNNR
           AND   KTOKD IN S_KTOKD.
    IF SY-SUBRC NE 0.
      DELETE ITAB.
      CONTINUE.
    ENDIF.
    MODIFY ITAB.
  ENDLOOP.
ENDFORM.                               " FILTER_RECORDS

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

  MOVE STIDA             TO RF140-STIDA.
  MOVE RF140-STIDA+4(2)  TO TARG_MONTH.
  MOVE RF140-STIDA+0(4)  TO TARG_YEAR.
  TARG_MTH_ABS           =  ( TARG_YEAR * 12 ) + TARG_MONTH.

* select open items.
  SELECT KUNNR BELNR GJAHR BLDAT XBLNR BLART SGTXT          " 0001
         SHKZG DMBTR ZFBDT ZBD1T ZBD2T ZBD3T VBELN
         zuonr
    FROM BSID INTO TABLE INREC
    WHERE BUKRS =  P_BUKRS
    AND   BUDAT LE STIDA
    AND   KUNNR IN S_KUNNR
    and   blart in s_blart.

  LOOP AT INREC.
    IF INREC-SHKZG = 'H'.
      INREC-DMBTR  = INREC-DMBTR * -1.
    ENDIF.
    MOVE-CORRESPONDING INREC TO T_ITEM.                     " 0001
    PERFORM COLLECT_INVOICE USING   INREC-KUNNR    INREC-DMBTR
                                    INREC-ZFBDT    INREC-ZBD1T
                                    INREC-ZBD2T    INREC-ZBD3T.
    APPEND T_ITEM.
    CLEAR T_ITEM.
  ENDLOOP.

* select cleared items
  REFRESH INREC.  CLEAR INREC.
  SELECT KUNNR BELNR GJAHR BLDAT XBLNR BLART SGTXT
         SHKZG DMBTR ZFBDT ZBD1T ZBD2T ZBD3T VBELN
         zuonr
    FROM BSAD INTO TABLE INREC
    WHERE BUKRS =  P_BUKRS
    AND   BUDAT LE STIDA
    AND   AUGDT >  STIDA
    AND   KUNNR IN S_KUNNR
    and   blart in s_blart.
  LOOP AT INREC.
    IF INREC-SHKZG = 'H'.
      INREC-DMBTR  = INREC-DMBTR * -1.
    ENDIF.
    MOVE-CORRESPONDING INREC TO T_ITEM.                     " 0001
    PERFORM COLLECT_INVOICE USING   INREC-KUNNR    INREC-DMBTR
                                    INREC-ZFBDT    INREC-ZBD1T
                                    INREC-ZBD2T    INREC-ZBD3T.
    APPEND T_ITEM.
    CLEAR T_ITEM.                                           " 0001
  ENDLOOP.

ENDFORM.                    " GET_CUSTOMER_INVOICES

*&---------------------------------------------------------------------*
*&      Form  COLLECT_INVOICE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_BSID_KUNNR  text
*      -->P_BSID_DMBTR  text
*      -->P_BSID_ZFBDT  text
*      -->P_BSID_ZFBDT1  text
*      -->P_BSID_ZFBDT2  text
*      -->P_BSID_ZFBDT3  text
*----------------------------------------------------------------------*
FORM COLLECT_INVOICE USING    PP_KUNNR
                              PP_DMBTR
                              PP_ZFBDT
                              PP_ZBD1T
                              PP_ZBD2T
                              PP_ZBD3T.

  DOC_MONTH            =  PP_ZFBDT+4(2).
  DOC_YEAR             =  PP_ZFBDT+0(4).
  DOC_MTH_ABS          =  ( DOC_YEAR * 12 ) + DOC_MONTH.
  MTH_RESULT           =  ( TARG_MTH_ABS    - DOC_MTH_ABS ).

  IF NOT PP_ZBD3T IS INITIAL.
    MOVE PP_ZBD3T TO EXT_DAYS.
  ELSEIF NOT PP_ZBD2T IS INITIAL.
    MOVE PP_ZBD2T TO EXT_DAYS.
  ELSEIF NOT PP_ZBD1T IS INITIAL.
    MOVE PP_ZBD1T TO EXT_DAYS.
  ELSE.
    CLEAR EXT_DAYS.
  ENDIF.
* CHECK with Andrew whether this is working or not
* if extended payment terms exist, subtract no of mths from mth_result
*  IF NOT EXT_DAYS IS INITIAL.
*    CASE EXT_DAYS.
*      WHEN 30.
*        SUBTRACT 1 FROM MTH_RESULT.
*      WHEN 60.
*        SUBTRACT 2 FROM MTH_RESULT.
*      WHEN 90.
*        SUBTRACT 3 FROM MTH_RESULT.
*      WHEN 120.
*        SUBTRACT 4 FROM MTH_RESULT.
*    ENDCASE.
*  ENDIF.
* change to key date
  IF P_FUTURE = 'X'.                                        " 0001
    IF MTH_RESULT      <= 0.
      ITAB-ZCURRENT    =  PP_DMBTR.
      T_ITEM-DAYS       = 'CUR'.
    ELSEIF MTH_RESULT  =  1.
      ITAB-30DAYS      =  PP_DMBTR.
      T_ITEM-DAYS       = '30D'.
    ELSEIF MTH_RESULT  =  2.
      ITAB-60DAYS      =  PP_DMBTR.
      T_ITEM-DAYS        = '60D'.
    ELSEIF MTH_RESULT  =  3.
      ITAB-90DAYS      =  PP_DMBTR.
      T_ITEM-DAYS        = '90D'.
    ELSEIF MTH_RESULT  >  3.
      ITAB-99DAYS      =  PP_DMBTR.
      T_ITEM-DAYS        = '99D'.
    ENDIF.
  ELSE.
    IF MTH_RESULT      < 0.
      ITAB-ZFUTURE     =  PP_DMBTR.
      T_ITEM-DAYS       = 'FUT'.
    ELSEIF MTH_RESULT  = 0.
      ITAB-ZCURRENT = PP_DMBTR.
      T_ITEM-DAYS       = 'CUR'.
    ELSEIF MTH_RESULT  =  1.
      ITAB-30DAYS      =  PP_DMBTR.
      T_ITEM-DAYS       = '30D'.
    ELSEIF MTH_RESULT  =  2.
      ITAB-60DAYS      =  PP_DMBTR.
      T_ITEM-DAYS       = '60D'.
    ELSEIF MTH_RESULT  =  3.
      ITAB-90DAYS      =  PP_DMBTR.
      T_ITEM-DAYS       = '90D'.
    ELSEIF MTH_RESULT  >  3.
      ITAB-99DAYS      =  PP_DMBTR.
      T_ITEM-DAYS       = '99D'.
    ENDIF.
  ENDIF.                                                    " 0001
  ITAB-KUNNR         = PP_KUNNR.
  ITAB-TOTAL         = PP_DMBTR.
  COLLECT ITAB.
  CLEAR ITAB.
ENDFORM.                    " COLLECT_INVOICE
*&---------------------------------------------------------------------*
*&      Form  ADD_SORT_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ADD_SORT_FIELD.
  DATA: L_AMOUNT(9)  TYPE N.
  IF P_FUTURE = 'X'.
    LOOP AT ITAB.
      L_AMOUNT = 999999999.
      IF     ITAB-99DAYS > 0.
        L_AMOUNT = L_AMOUNT - ITAB-99DAYS.
        CONCATENATE 'A' L_AMOUNT INTO ITAB-PSORT.
      ELSEIF ITAB-90DAYS > 0.
        L_AMOUNT = L_AMOUNT - ITAB-90DAYS.
        CONCATENATE 'B' L_AMOUNT INTO ITAB-PSORT.
      ELSEIF ITAB-60DAYS > 0.
        L_AMOUNT = L_AMOUNT - ITAB-60DAYS.
        CONCATENATE 'C' L_AMOUNT INTO ITAB-PSORT.
      ELSEIF ITAB-30DAYS > 0.
        L_AMOUNT = L_AMOUNT - ITAB-30DAYS.
        CONCATENATE 'D' L_AMOUNT INTO ITAB-PSORT.
      ELSEIF ITAB-ZCURRENT > 0.
        L_AMOUNT = L_AMOUNT - ITAB-ZCURRENT.
        CONCATENATE 'E' L_AMOUNT INTO ITAB-PSORT.
*     ELSEif itab-zfuture > 0.
*       L_AMOUNT = L_AMOUNT - ITAB-zfuture.
*       CONCATENATE 'F' L_AMOUNT INTO ITAB-PSORT.
      ELSE.
        L_AMOUNT = ABS( ITAB-TOTAL ).
        CONCATENATE 'G' L_AMOUNT INTO ITAB-PSORT.
      ENDIF.
      MODIFY ITAB.
    ENDLOOP.
  ELSE.
    LOOP AT ITAB.
      L_AMOUNT = 999999999.
      IF     ITAB-99DAYS > 0.
        L_AMOUNT = L_AMOUNT - ITAB-99DAYS.
        CONCATENATE 'A' L_AMOUNT INTO ITAB-PSORT.
      ELSEIF ITAB-90DAYS > 0.
        L_AMOUNT = L_AMOUNT - ITAB-90DAYS.
        CONCATENATE 'B' L_AMOUNT INTO ITAB-PSORT.
      ELSEIF ITAB-60DAYS > 0.
        L_AMOUNT = L_AMOUNT - ITAB-60DAYS.
        CONCATENATE 'C' L_AMOUNT INTO ITAB-PSORT.
      ELSEIF ITAB-30DAYS > 0.
        L_AMOUNT = L_AMOUNT - ITAB-30DAYS.
        CONCATENATE 'D' L_AMOUNT INTO ITAB-PSORT.
      ELSEIF ITAB-ZCURRENT > 0.
        L_AMOUNT = L_AMOUNT - ITAB-ZCURRENT.
        CONCATENATE 'E' L_AMOUNT INTO ITAB-PSORT.
      ELSEIF ITAB-ZFUTURE > 0.
        L_AMOUNT = L_AMOUNT - ITAB-ZFUTURE.
        CONCATENATE 'F' L_AMOUNT INTO ITAB-PSORT.
      ELSE.
        L_AMOUNT = ABS( ITAB-TOTAL ).
        CONCATENATE 'G' L_AMOUNT INTO ITAB-PSORT.
      ENDIF.
      MODIFY ITAB.
    ENDLOOP.
  ENDIF.

ENDFORM.                    " ADD_SORT_FIELD
*&---------------------------------------------------------------------*
*&      Form  WRITE_REPORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRITE_REPORT.
  PERFORM BUILD_FIELDCAT.
  PERFORM BUILD_SORTCAT.
  PERFORM BUILD_EVENTCAT.
  PERFORM BUILD_LAYOUT.
  PERFORM START_LIST_VIEWER.
ENDFORM.                    " WRITE_REPORT

*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT.
* KUNNR
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNA1'.
  FIELDCAT_LN-FIELDNAME          = 'KUNNR'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  FIELDCAT_LN-HOTSPOT            = 'X'.
  fieldcat_ln-emphasize = 'C41'.
  APPEND FIELDCAT_LN TO FIELDCAT.
* Name1
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNA1'.
  FIELDCAT_LN-FIELDNAME          = 'NAME1'.
  fieldcat_ln-emphasize = 'C41'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT.
* Credit Limit
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNKK'.
  FIELDCAT_LN-FIELDNAME          = 'KLIMK'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  fieldcat_ln-emphasize = 'C41'.
  APPEND FIELDCAT_LN TO FIELDCAT.
* Total Amount
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME      = 'DMBTR'.
  FIELDCAT_LN-FIELDNAME          = 'TOTAL'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  fieldcat_ln-emphasize = 'C41'.
  FIELDCAT_LN-DO_SUM             = 'X'.
  FIELDCAT_LN-HOTSPOT            = 'X'.
  FIELDCAT_LN-SELTEXT_L          = 'Out.St.Amount'.
  FIELDCAT_LN-SELTEXT_M          = 'Out.St.Amount'.
  FIELDCAT_LN-SELTEXT_S          = 'Out.St.Amount'.
  APPEND FIELDCAT_LN TO FIELDCAT.
  IF P_FUTURE NE 'X'.
* Future
    ADD 1 TO COL_POS.
    CLEAR FIELDCAT_LN.
    FIELDCAT_LN-REF_TABNAME        = 'BSID'.
    FIELDCAT_LN-REF_FIELDNAME      = 'DMBTR'.
    FIELDCAT_LN-FIELDNAME          = 'ZFUTURE'.
    FIELDCAT_LN-COL_POS            = COL_POS.
    FIELDCAT_LN-DO_SUM             = 'X'.
    FIELDCAT_LN-HOTSPOT            = 'X'.
    fieldcat_ln-emphasize = 'C41'.
    FIELDCAT_LN-SELTEXT_L          = 'Future'.
    FIELDCAT_LN-SELTEXT_M          = 'Future'.
    FIELDCAT_LN-SELTEXT_S          = 'Future'.
    APPEND FIELDCAT_LN TO FIELDCAT.
  ENDIF.
* Current
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME      = 'DMBTR'.
  FIELDCAT_LN-FIELDNAME          = 'ZCURRENT'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  FIELDCAT_LN-DO_SUM             = 'X'.
  FIELDCAT_LN-HOTSPOT            = 'X'.
  fieldcat_ln-emphasize = 'C41'.
  FIELDCAT_LN-SELTEXT_L          = 'Current'.
  FIELDCAT_LN-SELTEXT_M          = 'Current'.
  FIELDCAT_LN-SELTEXT_S          = 'Current'.
  APPEND FIELDCAT_LN TO FIELDCAT.
* 30 Days
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME      = 'DMBTR'.
  FIELDCAT_LN-FIELDNAME          = '30DAYS'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  FIELDCAT_LN-DO_SUM             = 'X'.
  FIELDCAT_LN-HOTSPOT            = 'X'.
  fieldcat_ln-emphasize = 'C41'.
  FIELDCAT_LN-SELTEXT_L          = '30 Days'.
  FIELDCAT_LN-SELTEXT_M          = '30 Days'.
  FIELDCAT_LN-SELTEXT_S          = '30 Days'.
  APPEND FIELDCAT_LN TO FIELDCAT.
* 60 Days
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME      = 'DMBTR'.
  FIELDCAT_LN-FIELDNAME          = '60DAYS'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  FIELDCAT_LN-DO_SUM             = 'X'.
  FIELDCAT_LN-HOTSPOT            = 'X'.
  fieldcat_ln-emphasize = 'C41'.
  FIELDCAT_LN-SELTEXT_L          = '60 Days'.
  FIELDCAT_LN-SELTEXT_M          = '60 Days'.
  FIELDCAT_LN-SELTEXT_S          = '60 Days'.
  APPEND FIELDCAT_LN TO FIELDCAT.
* 90 Days
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME      = 'DMBTR'.
  FIELDCAT_LN-FIELDNAME          = '90DAYS'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  FIELDCAT_LN-DO_SUM             = 'X'.
  FIELDCAT_LN-HOTSPOT            = 'X'.
  fieldcat_ln-emphasize = 'C41'.
  FIELDCAT_LN-SELTEXT_L          = '90 Days'.
  FIELDCAT_LN-SELTEXT_M          = '90 Days'.
  FIELDCAT_LN-SELTEXT_S          = '90 Days'.
  APPEND FIELDCAT_LN TO FIELDCAT.
* 99 Days
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME      = 'DMBTR'.
  FIELDCAT_LN-FIELDNAME          = '99DAYS'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  FIELDCAT_LN-DO_SUM             = 'X'.
  FIELDCAT_LN-HOTSPOT            = 'X'.
  fieldcat_ln-emphasize = 'C41'.
  FIELDCAT_LN-SELTEXT_L          = '120 Days'.
  FIELDCAT_LN-SELTEXT_M          = '120 Days'.
  FIELDCAT_LN-SELTEXT_S          = '120 Days'.
  APPEND FIELDCAT_LN TO FIELDCAT.

* Last Payment Date
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNKK'.
  FIELDCAT_LN-FIELDNAME          = 'CASHD'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT.

* Street Name
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNA1'.
  FIELDCAT_LN-FIELDNAME          = 'STRAS'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT.

* City Details
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNA1'.
  FIELDCAT_LN-FIELDNAME          = 'ORT01'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT.


* Telephone
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNA1'.
  FIELDCAT_LN-FIELDNAME          = 'TELF1'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT.
* Credit Group
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNKK'.
  FIELDCAT_LN-FIELDNAME          = 'GRUPP'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT.
* Sales Office
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNVV'.
  FIELDCAT_LN-FIELDNAME          = 'VKBUR'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT.
* Cust Creat Date
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNA1'.
  FIELDCAT_LN-FIELDNAME          = 'ERDAT'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT.
* Del Plant
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNVV'.
  FIELDCAT_LN-FIELDNAME          = 'VWERK'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT.
* Sales Group
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'KNVV'.
  FIELDCAT_LN-FIELDNAME          = 'VKGRP'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT.
* Sort Criteria
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME      = 'KUNNR'.
  FIELDCAT_LN-FIELDNAME          = 'PSORT'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  FIELDCAT_LN-DO_SUM             = 'X'.
  FIELDCAT_LN-SELTEXT_L          = 'Sort Field'.
  FIELDCAT_LN-SELTEXT_M          = 'Sort Field'.
  FIELDCAT_LN-SELTEXT_S          = 'Sort Field'.
  APPEND FIELDCAT_LN TO FIELDCAT.

ENDFORM.                    " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  BUILD_SORTCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_SORTCAT.
*  SORTCAT_LN-SPOS          = '1'.
  SORTCAT_LN-SPOS          = '2'.                           " 0001
  SORTCAT_LN-FIELDNAME     = 'PSORT'.
  SORTCAT_LN-UP            = 'X'.                           " 0001
*  sortcat_ln-subtot        = 'X'.
  APPEND SORTCAT_LN TO SORTCAT.

  CLEAR SORTCAT_LN.
*  SORTCAT_LN-SPOS          = '2'.
*  SORTCAT_LN-FIELDNAME     = 'KUNNR'.
  SORTCAT_LN-SPOS          = '1'.                           " 0001
  SORTCAT_LN-FIELDNAME     = 'NAME1'.                       " 0001
  SORTCAT_LN-UP            = 'X'.
  APPEND SORTCAT_LN TO SORTCAT.

ENDFORM.                    " BUILD_SORTCAT

*&---------------------------------------------------------------------*
*&      Form  BUILD_EVENTCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_EVENTCAT.
  EVENTCAT_LN-NAME = 'TOP_OF_PAGE'.
  EVENTCAT_LN-FORM = 'PAGE_HEADER'.
  APPEND EVENTCAT_LN TO EVENTCAT.
ENDFORM.                    " BUILD_EVENTCAT

*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT.
   LAYOUT_IN-COLWIDTH_OPTIMIZE = 'X'.
*  layout_in-no_hotspot        = 'X'.
  LAYOUT_IN-ZEBRA             = 'X'.
  LAYOUT_IN-GET_SELINFOS      = 'X'.
ENDFORM.                    " BUILD_LAYOUT

*&---------------------------------------------------------------------*
*&      Form  START_LIST_VIEWER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM START_LIST_VIEWER.
  DATA: PGM LIKE SY-REPID.
  PGM = SY-REPID.
*  if t_variant[] is initial.
*    t_variant-report = pgm.
*    t_variant-variant = '/ATB'.
*    t_variant-TEXT = '/ATB'.
*    t_variant-DEPENDVARS = 'S'.
*    append t_variant.
*    clear t_variant.
*  endif.
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
            I_CALLBACK_PROGRAM      = PGM
            I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
            IT_FIELDCAT             = FIELDCAT
            IT_SORT                 = SORTCAT
            IS_LAYOUT               = LAYOUT_IN
            I_SAVE                  = 'A'
*            IS_VARIANT              = t_variant
            IT_EVENTS               = EVENTCAT
       TABLES
            T_OUTTAB                = ITAB
       EXCEPTIONS
            OTHERS                  = 2.

ENDFORM.                    " START_LIST_VIEWER
*-----------------------------------------------------------------------
FORM USER_COMMAND USING UCOMM LIKE SY-UCOMM
                        SELFIELD TYPE SLIS_SELFIELD.
  data l_kunnr(10) type n.
  READ TABLE ITAB INDEX SELFIELD-TABINDEX.
  CHECK SY-SUBRC = 0.
  CASE UCOMM.
    WHEN '&IC1'.
      CASE SELFIELD-SEL_TAB_FIELD.
        WHEN 'ITAB-KUNNR'.
*          SET PARAMETER ID 'KUN' FIELD ITAB-KUNNR.
*          SET PARAMETER ID 'BUK' FIELD P_BUKRS.
          if itab-kunnr co '0123456789 '.
            l_kunnr = itab-kunnr.
            itab-kunnr = l_kunnr.
          endif.
          select single kkber into knkk-kkber
                              from knkk where kunnr = itab-kunnr.
          if sy-subrc eq 0.
            v_kkber = knkk-kkber.
          else.
            clear v_kkber.
          endif.
          refresh sel_tab[].
          MOVE: 'KUNNR' TO SEL_TAB-SELNAME,
                'P'     TO SEL_TAB-KIND,      " PARAMETER
                itab-kunnr   TO SEL_TAB-LOW.
          APPEND SEL_TAB.
          clear sel_tab.
          MOVE: 'KKBER' TO SEL_TAB-SELNAME,
                'P'     TO SEL_TAB-KIND,      " PARAMETER
                v_kkber  TO SEL_TAB-LOW.
          APPEND SEL_TAB.
          clear sel_tab.

          SUBMIT RFDKLI41
                 USING SELECTION-SET 'VAR1'
                 WITH SELECTION-TABLE SEL_TAB
                 AND  RETURN.
*          CALL TRANSACTION 'XD03'.
        WHEN 'ITAB-ZCURRENT'.                               " 0001
          V_DAYS = 'CUR'.
          PERFORM DISPLAY_LINE_ITEM_LEVEL.
        WHEN 'ITAB-ZFUTURE'.
          V_DAYS = 'FUT'.
          PERFORM DISPLAY_LINE_ITEM_LEVEL.
        WHEN 'ITAB-30DAYS'.
          V_DAYS = '30D'.
          PERFORM DISPLAY_LINE_ITEM_LEVEL.
        WHEN 'ITAB-60DAYS'.
          V_DAYS = '60D'.
          PERFORM DISPLAY_LINE_ITEM_LEVEL.
        WHEN 'ITAB-90DAYS'.
          V_DAYS = '90D'.
          PERFORM DISPLAY_LINE_ITEM_LEVEL.
        WHEN 'ITAB-99DAYS'.
          V_DAYS = '99D'.
          PERFORM DISPLAY_LINE_ITEM_LEVEL.
        WHEN 'ITAB-TOTAL'.
          V_DAYS = ' '.
          PERFORM DISPLAY_LINE_ITEM_LEVEL.                  " 0001
      ENDCASE.
  ENDCASE.
ENDFORM.
*----------------------------------------------------------------------*
* PAGE_HEADER
*----------------------------------------------------------------------*
FORM PAGE_HEADER.

  WRITE:/02 'Report:',SY-REPID,
        115 'Time:', SY-TIMLO.

  WRITE: /02 'User:', (10) SY-UNAME,
         115 'Date:', SY-DATUM.


  WRITE: /52 'Customer Aged Trial Balance List',            "0002
         115 'Page:', SY-PAGNO.
  SKIP.
  ULINE /(132).

***
  WRITE: /02 'Open Items as of:', STIDA.

  IF NOT S_VKGRP[] IS INITIAL.
    IF S_VKGRP-HIGH IS INITIAL.
      WRITE: 52 'Sales Group        :',S_VKGRP-LOW.
    ELSE.
      WRITE: 52 'Sales Group        :',S_VKGRP-LOW,'to',S_VKGRP-HIGH.
    ENDIF.
  ELSE.
    WRITE: 52 'Sales Group        : All'.
  ENDIF.

  IF NOT S_GRUPP[] IS INITIAL.
    IF S_GRUPP-HIGH IS INITIAL.
      WRITE: 107 'Credit group :',S_GRUPP-LOW.
    ELSE.
      WRITE: 107 'Credit group :',S_GRUPP-LOW,' to',S_GRUPP-HIGH.
    ENDIF.
  ELSE.
    WRITE: 107 'Credit Group : All'.
  ENDIF.
***
  WRITE: /02 'Comapany Code   :', P_BUKRS.
  IF NOT S_KONDA[] IS INITIAL.
    IF S_KONDA-HIGH IS INITIAL.
      WRITE: 52 'Price group        :',S_KONDA-LOW.
    ELSE.
      WRITE: 52 'Price group        :',S_KONDA-LOW,' to',S_KONDA-HIGH.
    ENDIF.
  ELSE.
    WRITE: 52 'Price Group        : All'.
  ENDIF.

  IF NOT S_CTLPC[] IS INITIAL.
    IF S_CTLPC-HIGH IS INITIAL.
      WRITE: 107 'Risk category:',S_CTLPC-LOW.
    ELSE.
      WRITE: 107 'Risk category:',S_CTLPC-LOW,' to',S_CTLPC-HIGH.
    ENDIF.
  ELSE.
    WRITE: 107 'Risk category: All'.
  ENDIF.
***
  IF NOT S_VKBUR[] IS INITIAL.
    IF S_VKBUR-HIGH IS INITIAL.
      WRITE:/02 'Sales Office    :',S_VKBUR-LOW.
    ELSE.
      WRITE:/02 'Sales Office    :',S_VKBUR-LOW,' to',S_VKBUR-HIGH.
    ENDIF.
  ELSE.
    WRITE:/02 'Sales Office    : All'.
  ENDIF.

  IF NOT S_KDGRP[] IS INITIAL.
    IF S_KDGRP-HIGH IS INITIAL.
      WRITE: 52 'Customer group     :',S_KDGRP-LOW.
    ELSE.
      WRITE: 52 'Customer group     :',S_KDGRP-LOW,' to',S_KDGRP-HIGH.
    ENDIF.
  ELSE.
    WRITE: 52 'Customer group     : All'.
  ENDIF.

  IF NOT S_KTOKD[] IS INITIAL.
    IF S_KTOKD-HIGH IS INITIAL.
      WRITE: 107 'Account Group:',S_KTOKD-LOW.
    ELSE.
      WRITE: 107 'Account Group:',S_KTOKD-LOW,' to',S_KTOKD-HIGH.
    ENDIF.
  ELSE.
    WRITE: 107 'Account Group: All'.
  ENDIF.
***
  IF NOT S_KUNNR[] IS INITIAL.
    IF S_KUNNR-HIGH IS INITIAL.
      WRITE: /02 'Customer No     :',S_KUNNR-LOW.
    ELSE.
      WRITE: /02 'Customer No     :',S_KUNNR-LOW,' to',S_KUNNR-HIGH.
    ENDIF.
  ELSE.
    WRITE: /02 'Customer No     : All'.
  ENDIF.

  IF NOT S_KKBER[] IS INITIAL.
    IF S_KKBER-HIGH IS INITIAL.
      WRITE: 52 'Credit Control Area:',S_KKBER-LOW.
    ELSE.
      WRITE: 52 'Credit Control Area:',S_KKBER-LOW,' to',S_KKBER-HIGH.
    ENDIF.
  ELSE.
    WRITE: 52 'Credit Control Area: All'.
  ENDIF.
  SKIP.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  display_line_item_level
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM DISPLAY_LINE_ITEM_LEVEL.
  REFRESH T_LINE[].
  IF V_DAYS EQ SPACE.
    LOOP AT T_ITEM WHERE KUNNR = ITAB-KUNNR.
      MOVE-CORRESPONDING T_ITEM TO T_LINE.
      APPEND T_LINE.
      CLEAR T_LINE.
    ENDLOOP.
  ELSE.
    LOOP AT T_ITEM WHERE KUNNR = ITAB-KUNNR
                   AND   DAYS = V_DAYS.
      MOVE-CORRESPONDING T_ITEM TO T_LINE.
      APPEND T_LINE.
      CLEAR T_LINE.
    ENDLOOP.
  ENDIF.
  PERFORM BUILD_FIELDCAT_ITEM.
  PERFORM BUILD_SORTCAT_ITEM.
  PERFORM BUILD_EVENTCAT_ITEM.
  PERFORM BUILD_LAYOUT_ITEM.
  PERFORM START_LIST_VIEWER_ITEM.

ENDFORM.                    " display_line_item_level

*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT_item
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT_ITEM.
  REFRESH FIELDCAT1.
* DOCU TYPE
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME          = 'BLART'.
  FIELDCAT_LN-FIELDNAME          = 'BLART'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT1.
* REF dOCU
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME          = 'XBLNR'.
  FIELDCAT_LN-FIELDNAME          = 'XBLNR'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT1.

* BILLING dOCU
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME          = 'VBELN'.
  FIELDCAT_LN-FIELDNAME          = 'VBELN'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  FIELDCAT_LN-HOTSPOT            = 'X'.
  APPEND FIELDCAT_LN TO FIELDCAT1.
* Belnr
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-FIELDNAME          = 'BELNR'.
  FIELDCAT_LN-FIELDNAME          = 'BELNR'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  FIELDCAT_LN-HOTSPOT            = 'X'.
  APPEND FIELDCAT_LN TO FIELDCAT1.
* Budat
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-FIELDNAME          = 'BLDAT'.
  FIELDCAT_LN-FIELDNAME          = 'BLDAT'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT1.

* Total Amount
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME      = 'DMBTR'.
  FIELDCAT_LN-FIELDNAME          = 'DMBTR'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  FIELDCAT_LN-DO_SUM             = 'X'.
  FIELDCAT_LN-SELTEXT_L          = 'Amount'.
  FIELDCAT_LN-SELTEXT_M          = 'Amount'.
  FIELDCAT_LN-SELTEXT_S          = 'Amount'.
  APPEND FIELDCAT_LN TO FIELDCAT1.

* zfbdt
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-FIELDNAME          = 'ZFBDT'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT1.
* Total Amount
  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-REF_FIELDNAME      = 'SGTXT'.
  FIELDCAT_LN-FIELDNAME          = 'SGTXT'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT1.

  ADD 1 TO COL_POS.
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-REF_TABNAME        = 'BSID'.
  FIELDCAT_LN-FIELDNAME          = 'ZUONR'.
  FIELDCAT_LN-COL_POS            = COL_POS.
  APPEND FIELDCAT_LN TO FIELDCAT1.



ENDFORM.                    " BUILD_FIELDCAT_item
*&---------------------------------------------------------------------*
*&      Form  BUILD_SORTCAT_item
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BUILD_SORTCAT_ITEM.
  REFRESH SORTCAT1.
  SORTCAT_LN-SPOS          = '1'.
  SORTCAT_LN-FIELDNAME     = 'BLDAT'.
  SORTCAT_LN-UP            = 'X'.
*  sortcat_ln-subtot        = 'X'.
  APPEND SORTCAT_LN TO SORTCAT1.

  CLEAR SORTCAT_LN.
  SORTCAT_LN-SPOS          = '2'.
  SORTCAT_LN-FIELDNAME     = 'BELNR'.
  SORTCAT_LN-UP            = 'X'.
  APPEND SORTCAT_LN TO SORTCAT1.

ENDFORM.                    " BUILD_SORTCAT_item

*&---------------------------------------------------------------------*
*&      Form  BUILD_EVENTCAT_item
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BUILD_EVENTCAT_ITEM.
  REFRESH EVENTCAT1.
*  EVENTCAT_LN-NAME = 'TOP_OF_PAGE'.
*  EVENTCAT_LN-FORM = 'PAGE_HEADER'.
*  APPEND EVENTCAT_LN TO EVENTCAT1.
ENDFORM.            &n

42
Bapis / ME_PUR_DOCU_CHANGE - Modifica posiciones de pedidos de compra
« en: 03 de Noviembre de 2007, 09:59:51 am »
FUNCION ME_PUR_DOCU_CHANGE
TIPO MM
DESCRIPCION Modifica posiciones de pedidos de compra



REPORT Y_ME_PUR_DOCU_CHANGE .

tables: BAPIEKPOV, BAPIRETURN, ekpo, EKET.

start-of-selection.

  data: l_ekpo1 like BAPIEKPOV OCCURS 3 WITH HEADER LINE,
        l_ekpo2 like BAPIEKPOV OCCURS 3 WITH HEADER LINE,
        L_RETURN LIKE BAPIRETURN OCCURS 3 WITH HEADER LINE.

  select single * from ekpo
   where ebeln = '4500009473'
     and ebelp = '00001'.

  select single * from ekET
   where ebeln = '4500009473'
     and ebelp = '00001'
     AND ETENR = '0001'.


  L_EKPO1-PO_NUMBER = EKPO-EBELN.
  L_EKPO1-PO_ITEM   = EKPO-EBELP.
  L_EKPO1-DELETE_IND = EKPO-LOEKZ.
  L_EKPO1-QUANTITY  = EKPO-MENGE.
  L_EKPO1-UNIT       = EKPO-MEINS.
  L_EKPO1-DELIV_DATE = EKET-EINDT.
  APPEND L_EKPO1.

  L_EKPO2 = L_EKPO1.
  L_EKPO2-QUANTITY = '12.000'.
  APPEND L_EKPO2.
  APPEND L_EKPO2.

  CALL FUNCTION 'ME_PUR_DOCU_CHANGE'
       EXPORTING
            NUMBER             = '4500009473'
       TABLES
            PO_ITEMS_OLD       = l_ekpo1
            PO_ITEMS_NEW       = l_ekpo2
            RETURN             = L_RETURN
       EXCEPTIONS
            INVALID_CALL_OF_FB = 1
            OTHERS             = 2.

    LOOP AT L_RETURN.
      write / L_return.
    ENDLOOP.

43
Bapis / MB_CREATE_GOODS_MOVEMENT
« en: 03 de Noviembre de 2007, 09:58:10 am »
FUNCION MB_CREATE_GOODS_MOVEMENT
TIPO MM
DESCRIPCION MB_CREATE_GOODS_MOVEMENT




Ejemplo
*&---------------------------------------------------------------------*
*&      Form  INICIALIZAR_TABLAS_INTERNAS
*&---------------------------------------------------------------------*
*       Ponemos los datos en su sitio
*----------------------------------------------------------------------*
FORM MM2_INI_TABLAS_INTERNAS.

  FREE: I_MM2_IMSEG, I_MM2_EMSEG, I_MM2_VM07M, I_MM2_MSEG,
        I_MM2_EMKPF, I_MM2_MKPF, I_MM2_IMKPF.
  free: i_mm2_errores, i_mm2_warnings, i_mm2_finales.

  PERFORM MM2_ANYADIR_ENTRADA.

ENDFORM.                               "INICIALIZAR_TABLAS_INTERNAS

*&---------------------------------------------------------------------*
*&      Form  ANYADIR_ENTRADA
*&---------------------------------------------------------------------*
*       Añade los datos de i_mm2_entrada a las tablas internas de
*       entrada de la función MB_CREATE_GOODS_MOVEMENT.
*----------------------------------------------------------------------*
FORM MM2_ANYADIR_ENTRADA.

* Datos básicos
  i_mm2_imseg-bwart = i_mm2_entrada-bwart.      "Tipo de movimiento
  i_mm2_imseg-matnr = i_mm2_entrada-matnr.      "Material
  i_mm2_imseg-erfmg = i_mm2_entrada-erfmg.      "Cantidad
  i_mm2_imseg-erfme = i_mm2_entrada-erfme.      "Unidad de medida
  i_mm2_imseg-werks = i_mm2_entrada-werks.      "Centro origen
  i_mm2_imseg-umwrk = i_mm2_entrada-umwrk.      "Centro destino
  i_mm2_imseg-lgort = i_mm2_entrada-lgort.      "Almacén origen
  i_mm2_imseg-umlgo = i_mm2_entrada-umlgo.      "Almacén destino

* Datos opcionales
  i_mm2_imseg-kostl = i_mm2_entrada-kostl.      "Centro de coste
*  i_mm2_imseg-kostl = p_kostl.                   "Nº de serie
  i_mm2_imseg-elikz = i_mm2_entrada-elikz.      "Entrega final
  i_mm2_imseg-insmk = i_mm2_entrada-insmk.      "Tipo de stock

* Datos pedido
  i_mm2_imseg-ebeln = i_mm2_entrada-ebeln.      "Orden de compra
  i_mm2_imseg-ebelp = i_mm2_entrada-ebelp.      "Posición

* Datos fabricación
  i_mm2_imseg-aufnr = i_mm2_entrada-aufnr.      "Orden fabricación

* Albarán proveedor
  i_mm2_imseg-vbeln = i_mm2_entrada-vbeln.      "Nota entrega

* Otros
  i_mm2_imseg-sobkz = i_mm2_entrada-sobkz.      "Stock especial
  i_mm2_imseg-lifnr = i_mm2_entrada-lifnr.      "Proveedor
  i_mm2_imseg-wempf = i_mm2_entrada-wempf.      "Receptor
  i_mm2_imseg-konto = i_mm2_entrada-konto.      "Cuenta contable
  i_mm2_imseg-grund = i_mm2_entrada-grund.      "Motivo del movimiento
  I_MM2_IMSEG-TBPKZ = 'X'.             "No generar necesidad transporte

* Indicador de movimiento
  clear i_mm2_imseg-kzbew.             "Movimiento sin referencia
  if i_mm2_entrada-zsubtipo = '01'.    "Movimiento con pedido
    i_mm2_imseg-kzbew = 'B'.
  ELSEIF I_MM2_ENTRADA-ZSUBTIPO = '02'."Movimiento con orden de
                                       "fabric.
    i_mm2_imseg-kzbew = 'F'.
  ENDIF.

  append i_mm2_imseg.

* Datos de cabecera de documento
  I_MM2_IMKPF-FRBNR = I_MM2_ENTRADA-FRBNR.      "Vale de material
  I_MM2_IMKPF-BLDAT = I_MM2_ENTRADA-BLDAT.     "Fecha de contabilización
  I_MM2_IMKPF-BUDAT = I_MM2_ENTRADA-BUDAT.      "Fecha de documento
  I_MM2_IMKPF-USNAM = SY-UNAME.        "Nombre del usuario
  I_MM2_IMKPF-BKTXT = I_MM2_ENTRADA-BKTXT.      "Concepto

  APPEND I_MM2_IMKPF.

ENDFORM.                               "ANYADIR_ENTRADA

*&---------------------------------------------------------------------*
*&      Form  CREAR_MOVIMIENTOS_MM
*&---------------------------------------------------------------------*
*       Generamos el movimiento contable y el movimiento MM llamando
*       a la funcion MB_CREATE_GOODS_MOVEMENT.
*       Si es un movimiento que requiere nº de serie, lo introduciremos
*       mediante Batch-Input.
*----------------------------------------------------------------------*
FORM MM2_CREAR_MOVIMIENTOS_MM.
  DATA: L_FLAG,
        L_BI.

  CLEAR L_BI.
  IF V_MM2_MODO_PROCESO_BATCH NE 'N'.
    L_BI = 'X'.
  ELSE.
* Compruebo si tiene carácterísticas de PA
    IF NOT I_MM2_ENTRADA-KONTO IS INITIAL.
      PERFORM MM2_COMPROBAR_CARACT_PA USING I_MM2_ENTRADA-KONTO
                                        CHANGING L_FLAG.
      IF L_FLAG = 'X'.
        L_BI = 'X'.
      ENDIF.
    ENDIF.

* Compruebo si tiene nº de serie
    IF NOT V_MM2_NEC_NUM_SERIE IS INITIAL.
      L_BI = 'X'.
    ENDIF.
  ENDIF.

  IF L_BI IS INITIAL.

    PERFORM MM2_FUNCION_MOV_MM.

    IF NOT V_MM2_NEC_NUM_SERIE IS INITIAL AND
       NOT I_MM2_ENTRADA-SERNR IS INITIAL.
      L_BI = 'X'.
    ENDIF.
  ENDIF.

  IF L_BI = 'X'.
    PERFORM MM2_BATCH_INPUT.
  ENDIF.


ENDFORM.                               " CREAR_MOVIMIENTOS_MM

*&---------------------------------------------------------------------*
*&      Form  MM2_FUNCION_MOV_MM
*&---------------------------------------------------------------------*
*       Generamos el movimiento contable y el movimiento MM llamando
*       a la funcion MB_CREATE_GOODS_MOVEMENT.
*----------------------------------------------------------------------*
FORM MM2_FUNCION_MOV_MM.

  CALL FUNCTION 'MB_CREATE_GOODS_MOVEMENT'
       EXPORTING
            IMKPF       = I_MM2_IMKPF
*           xallp       = ' '
*           xallr       = ' '
            ctcod       = i_mm2_entrada-tcode
*           xqmcl       = ' '
*           XLISU       = X
*           OLD_SUBRC   = ' '
*           IPKCOM      = ' '
            X_AUTHORITY = 'X'
       IMPORTING
            EMKPF       = I_MM2_EMKPF
       TABLES
            EMSEG       = I_MM2_EMSEG
            imseg       = i_mm2_imseg
       EXCEPTIONS
            OTHERS      = 1.

* Comprobamos si ha devuelto errores
  MM-SUBRC = SY-SUBRC.
  IF SY-SUBRC EQ 0.
    i_mm2_finales-mblnr = i_mm2_emseg-mblnr.
    loop at i_mm2_emseg.
      if i_mm2_emseg-msgid ne '00' and
         i_mm2_emseg-msgid ne '  '.
        MM-SUBRC = 4.
      ENDIF.
    ENDLOOP.
    IF I_MM2_EMKPF-SUBRC <> 0.
      MM-SUBRC = 4.
    ELSE.
      SET PARAMETER ID 'MBN' FIELD I_MM2_EMKPF-MBLNR.
      SET PARAMETER ID 'MJA' FIELD I_MM2_EMKPF-MJAHR.
    ENDIF.
  ENDIF.

  IF MM-SUBRC <> 0.
    CLEAR I_MM2_EMKPF.
    SET PARAMETER ID 'MBN' FIELD I_MM2_EMKPF-MBLNR.
    SET PARAMETER ID 'MJA' FIELD I_MM2_EMKPF-MJAHR.
    ROLLBACK WORK.
* Mostramos los errores generados por la función
    loop at i_mm2_emseg where msgid <> space.
      perform mm2_obtener_linea_error using i_mm2_emseg-msgid
                                        i_mm2_emseg-msgty
                                        i_mm2_emseg-msgno
                                        i_mm2_emseg-msgv1
                                        i_mm2_emseg-msgv2
                                        i_mm2_emseg-msgv3
                                        i_mm2_emseg-msgv4
                               CHANGING V_MM2_LINEA.
      read table i_mm2_imseg index sy-tabix.
      IF SY-SUBRC = 0.
        i_mm2_errores-matnr = i_mm2_imseg-matnr.
        i_mm2_errores-ebeln = i_mm2_imseg-ebeln.
        i_mm2_errores-aufnr = i_mm2_imseg-aufnr.
      ENDIF.
      i_mm2_errores-linea = V_MM2_LINEA.
      append i_mm2_errores.
* Si el mensajes es IO 304, es que el error se ha producido por
* no necesitar nº de serie
      if i_mm2_emseg-msgid = 'IO' and i_mm2_emseg-msgno = '304'.
        V_MM2_NEC_NUM_SERIE = 'X'.
      ENDIF.
    ENDLOOP.

    V_MM2_ERROR = 'X'.

  ELSE.
    append i_mm2_finales.

    PERFORM MM2_POST_DOCUMENT.

  ENDIF.

* Borro posibles mensajes de error duplicados
  sort i_mm2_errores.
  delete adjacent duplicates from i_mm2_errores.
  sort i_mm2_warnings.
  delete adjacent duplicates from i_mm2_warnings.

ENDFORM.                               " CREAR_MOVIMIENTOS_MM

*&---------------------------------------------------------------------*
*&      Form  MM2_POST_DOCUMENT
*&---------------------------------------------------------------------*
*       Genera el documento correspondiente al movimiento y realiza
*       el COMMIT
*----------------------------------------------------------------------*
FORM MM2_POST_DOCUMENT.

  MOVE-CORRESPONDING I_MM2_EMSEG TO I_MM2_MSEG.
  MOVE-CORRESPONDING I_MM2_EMKPF TO I_MM2_MKPF.
  I_MM2_VM07M-XPBED = 'X'. "Reducción de neces. en mov. de mercancias.

  CALL FUNCTION 'MB_POST_DOCUMENT' IN UPDATE TASK
       TABLES
            ZMKPF  = I_MM2_MKPF
            ZMSEG  = I_MM2_MSEG
            ZVM07M = I_MM2_VM07M
       EXCEPTIONS
            OTHERS = 1.

  IF V_MM2_NO_COMMIT IS INITIAL.
    COMMIT WORK AND WAIT.
  ENDIF.

ENDFORM.

44
Bapis / BAPI_GOODSMVT_CREATE
« en: 03 de Noviembre de 2007, 09:56:03 am »
FUNCION BAPI_GOODSMVT_CREATE
TIPO MM
DESCRIPCION Realiza movimientos de materiales




Ejemplo
REPORT Y_BAPI_GOODSMVT_CREATE

DATA: l_goodsmvt_header  LIKE  bapi2017_gm_head_01,
      l_goodsmvt_code    LIKE  bapi2017_gm_code,
      l_testrun          LIKE  bapi2017_gm_gen-testrun,
      l_goodsmvt_headret LIKE  bapi2017_gm_head_ret,
      l_materialdocument LIKE  bapi2017_gm_head_ret-mat_doc,
      l_matdocumentyear  LIKE  bapi2017_gm_head_ret-doc_year.

DATA: i_goodsmvt_item    LIKE  bapi2017_gm_item_create OCCURS 10
                               WITH HEADER LINE,
      i_return           LIKE  bapiret2 OCCURS 10 WITH HEADER LINE.


START-OF-SELECTION.

* DATOS CABECERA
  CLEAR l_goodsmvt_header.
  l_goodsmvt_header-pstng_date = sy-datum.
  l_goodsmvt_header-doc_date   = '20010122'.
  l_goodsmvt_header-pr_uname   = sy-uname.
  l_goodsmvt_header-header_txt = 'Ent. desde fábrica'.
  L_GOODSMVT_HEADER-REF_DOC_NO = '00/00'.

* Tipo de movimiento
  l_goodsmvt_code = '01'. "Goods receipt for purchase order

* Posiciones
  CLEAR i_goodsmvt_item.
  i_goodsmvt_item-material  = '01017900'.
  i_goodsmvt_item-plant     = '0210'.
  i_goodsmvt_item-stge_loc  = '0100'.
  i_goodsmvt_item-VENDOR    = '0000000016'.
  i_goodsmvt_item-move_type = '101'.
  i_goodsmvt_item-MVT_IND   = 'B'.   "Indicador de movimiento
  i_goodsmvt_item-PO_NUMBER = '5500000058'.
  i_goodsmvt_item-po_item   = '00010'.
  i_goodsmvt_item-ENTRY_QNT = '10.000'.
  I_GOODSMVT_ITEM-ENTRY_UOM = 'ST'.
  append i_goodsmvt_item.


  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
       EXPORTING
            goodsmvt_header       = l_goodsmvt_header
            goodsmvt_code         = l_goodsmvt_code
            testrun               = ' '
       IMPORTING
            goodsmvt_headret      = l_goodsmvt_headret
            materialdocument      = l_materialdocument
            matdocumentyear       = l_matdocumentyear
       TABLES
            goodsmvt_item         = i_goodsmvt_item
*         GOODSMVT_SERIALNUMBER =
            return                = i_return
            .

  IF SY-SUBRC = 0.
    describe table i_return lines sy-tfill.
    if sy-tfill = 0.
      COMMIT WORK.
    endif.
  ENDIF.

Páginas: 1 2 [3]