Passa ai contenuti principali

Estendere il report delle partite aperte (FBL1N, FBL5N, FBL3N)

certo le partite aperte aiutano ad analizzare la situazione contabile
ma se si è appena partiti con il sistema SAP, come fa l'utente a riconosce a chi appartiene la partita?
sul vecchio sistema era abituato ai codici del vecchio sistema, ma su SAP no.
un aiutino bisogna darglielo all'utente, quindi perchè non aggiungere il nome fornitore, cliente e conto co.ge. alla lista delle parite?
il nome aiuta anche a fare dei subtotali decenti
per le fatture da ricevere non ne parliamo: che bello avere la lista con i subtotali per nome fornitore, numero ordine di acquisto e posizione di acquisto



estendere il report è semplice. La nota oss 368310 lo spiega
un paio di miei appunti alla nota:

  1. è necessario estendere sia la struttura RFPOS che RFPOSX con gli stessi campi, o il nome della stessa struttura append
  2. in BTE il function module è da aggiungere agli eventi, però attenzione che non troveri l'inserimento 00001650, quindi lo dovrai aggiungere come nuovo


e ora un po' di codice
ecco il mio, che prende in considerazione anche il consignment stock

FUNCTION zzfi_lineitem_00001650.
*"----------------------------------------------------------------------
*"*"Interfaccia locale:
*"  IMPORTING
*"     VALUE(I_POSTAB) LIKE  RFPOS STRUCTURE  RFPOS
*"  EXPORTING
*"     VALUE(E_POSTAB) LIKE  RFPOS STRUCTURE  RFPOS
*"----------------------------------------------------------------------

*-------------- Initialize Output by using the following line ----------
  e_postab = i_postab.

  CASE i_postab-koart.

    WHEN 'K'.
      READ TABLE t_lfa1 WITH KEY lifnr = i_postab-konto.

      IF sy-subrc = 0.
        e_postab-zzname1 = t_lfa1-name1.
      ELSE.
        SELECT SINGLE name1 INTO e_postab-zzname1 FROM lfa1
                      WHERE lifnr = i_postab-konto.
        t_lfa1-name1 = e_postab-zzname1.
        t_lfa1-lifnr = i_postab-konto.
        APPEND t_lfa1.
        CLEAR t_lfa1.
      ENDIF.


    WHEN 'D'.


      READ TABLE t_kna1 WITH KEY kunnr = i_postab-konto.

      IF sy-subrc = 0.
        e_postab-zzname1 = t_kna1-name1.

      ELSE.

        SELECT SINGLE name1 INTO e_postab-zzname1 FROM kna1
        WHERE kunnr = i_postab-konto.

        t_kna1-name1 = e_postab-zzname1.
        t_kna1-kunnr = i_postab-konto.
        APPEND t_kna1.
        CLEAR t_kna1.

      ENDIF.
    WHEN 'S'.

      READ TABLE t_skat WITH KEY saknr = i_postab-konto.

      IF sy-subrc = 0.
        e_postab-zzname1 = t_skat-txt50.
      ELSE.

        SELECT SINGLE txt20 INTO e_postab-zzname1 FROM skat
        WHERE saknr = i_postab-konto
          AND spras = sy-langu.

        t_skat-txt50 = e_postab-zzname1.
        t_skat-saknr = i_postab-konto.

        APPEND t_skat.
        CLEAR t_skat.

      ENDIF.

*     preparo i conti EM/EF
      IF r_compensazione_em_ef[] IS INITIAL.
        SELECT t030~konth INTO  r_compensazione_em_ef-low
               FROM t030 INNER JOIN t001 ON t030~ktopl = t001~ktopl
                    WHERE t030~ktosl = 'WRX'
                    AND t001~bukrs = i_postab-bukrs.
          r_compensazione_em_ef-sign = 'I'.
          r_compensazione_em_ef-option = 'EQ'.
          APPEND r_compensazione_em_ef.
        ENDSELECT.

      ENDIF.


*     se conto EM/EF estraggo dal documento contabile l'oda e poi ricavo il fornitore
      IF i_postab-konto IN r_compensazione_em_ef.

        SELECT SINGLE lfa1~name1 lfa1~lifnr
                INTO ( e_postab-zznamepartner, e_postab-zzpartner )
             FROM lfa1
            INNER JOIN ekko ON lfa1~lifnr = ekko~lifnr
            INNER JOIN bseg ON ekko~ebeln = bseg~ebeln
                  WHERE bseg~belnr = i_postab-belnr
                    AND bseg~buzei = i_postab-buzei.

        IF e_postab-zzpartner IS INITIAL.
*          Il documento può essere di consignmet stock
*          recupero il fornitore dal movimento magazzino
          DATA: _awtyp TYPE awtyp,
                _awkey TYPE awkey,
                BEGIN OF _doc_mat,
                  mblnr TYPE mblnr,
                  mjahr TYPE mjahr,
                END OF _doc_mat
                .

          SELECT SINGLE awtyp awkey INTO ( _awtyp, _awkey )
              FROM bkpf WHERE bukrs = i_postab-bukrs
              AND belnr = i_postab-belnr
              AND gjahr = i_postab-gjahr.

          IF sy-subrc = 0 AND _awtyp = 'MKPF'.  "movimento magazzino
            _doc_mat = _awkey.

            SELECT SINGLE lfa1~name1 lfa1~lifnr
                INTO ( e_postab-zznamepartner, e_postab-zzpartner )
                FROM lfa1
                  INNER JOIN mseg ON lfa1~lifnr = mseg~lifnr
                        WHERE mseg~mblnr = _doc_mat-mblnr
                          AND mseg~mjahr = _doc_mat-mjahr
                          AND mseg~zeile = '0001'.
          ENDIF.
        ENDIF.
      ENDIF.


    WHEN OTHERS.
  ENDCASE.
ENDFUNCTION. 


** top include del function function group
FUNCTION-POOL zfilineitems.                 "MESSAGE-ID ..
DATA: BEGIN OF t_lfa1 OCCURS 1000,
        lifnr TYPE lifnr,
        name1 TYPE name1,
      END OF t_lfa1.

DATA: BEGIN OF t_kna1 OCCURS 1000,
        kunnr TYPE kunnr,
        name1 TYPE name1,
      END OF t_kna1.

DATA: BEGIN OF t_skat OCCURS 1000,
  saknr TYPE kunnr,
  txt50 TYPE name1,
END OF t_skat.

RANGES r_compensazione_em_ef FOR T030-KONTH.

* INCLUDE LZFILINEITEMSD...                  " Local class definition
FUNCTION-POOL zfilineitems.                 "MESSAGE-ID ..
DATA: BEGIN OF t_lfa1 OCCURS 1000,
        lifnr TYPE lifnr,
        name1 TYPE name1,
      END OF t_lfa1.

DATA: BEGIN OF t_kna1 OCCURS 1000,
        kunnr TYPE kunnr,
        name1 TYPE name1,
      END OF t_kna1.

DATA: BEGIN OF t_skat OCCURS 1000,
  saknr TYPE kunnr,
  txt50 TYPE name1,
END OF t_skat.
RANGES r_compensazione_em_ef FOR T030-KONTH.

* INCLUDE LZFILINEITEMSD...                  " Local class definition

un paio di appunti al codice
estendere la visualizzazione delle partite non è una roba da poco perchè può comportare l'allungamento dell'elaborazione
ma, siccome tu sai che il function group quando viene "istanziato" mantiene i dati delle tabelle interne in memoria se le tabelle sono definite nel top include, puoi usle are questa caratteristica per crearti un buffer momentaneo per evitare delle continue letture in db
infine le join.... usale, usale, usale
sviluppando anche applicazioni web in altri linguaggi, l'sql ormai lo mastico come se fosse un tenero filetto :P. 
le join riducono i tempi di lettura ed elaborazione. lascia fare al db il suo lavoro.











Commenti

Post popolari in questo blog

Caricare le anagrafiche banche

il caricamento delle anagrafiche banche su SAP è relativamente semplice. Esiste una transazione apposita basta caricare il file standard rilasciato dal corporate banking info ecco il link per scaricarlo:  http://www.querciacb.info/it-IT/archivio_abicabit.html aggiornamento ecco un nuovo link per scaricare il file https://tesoreria.unicreditbanca.it/tesoreria/abicab/abicab.html

Programma RFEBIT00 - conversione CBI format italia to Multicash

Il programma converte il CBI format in MULTICASH quindi caricabile su SAP Ogni volta che il file è caricato e convertito, la conversione è registrata in tabella FIPYXXD_INSTMT. Quindi il file non è più caricabile se non si elimina il record in tabella. Ma se non ci sono stati errori non dovrebbe essere necessaria alcuna cancellazione in quanto il programma dovrebbe aver generato due files, estratto e fatturato. Anche avviando automaticamente il caricamento del multicash, non c'è necessità di cancellazione. Con i due files fatturato ed estratto è possibile ripetere più volte il caricamento del multicash. Il programma non è ricompreso all'interno della transazione utente FEBC, ma è inseribile facilmente. Cercare nota OSS Per cancellare il caricamento della conversione file devo leggere nella tabella FIPYXXD_INSTMT i record in base al FILE_ID e chiave banca Il FILE_ID si trova nel record RH in testata del file da convertire Esempio  RHxxxxxBxxxx 020415 yyyyyyy...