Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Need help with a Function Module

Former Member
0 Likes
393

Hi Experts,

 

I´m very bad with abap programing, and I´m trying to create a function module to read an DSO table and extract the data between D-1 and D-365.

   

But I´m having some problems, can anyone check my code and help me, please???

 

I made a copy of the Function Group using the RSAX.

And my problem is that I can´t extract any data!

Thanks in advance.

FUNCTION ZF_BW_DESEMP_FORNECEDOR.

*"----------------------------------------------------------------------

*"*"Interface local:

*"  IMPORTING

*"     VALUE(I_REQUNR) TYPE  SRSC_S_IF_SIMPLE-REQUNR

*"     VALUE(I_DSOURCE) TYPE  SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL

*"     VALUE(I_MAXSIZE) TYPE  SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL

*"     VALUE(I_INITFLAG) TYPE  SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL

*"     VALUE(I_READ_ONLY) TYPE  SRSC_S_IF_SIMPLE-READONLY OPTIONAL

*"  TABLES

*"      I_T_SELECT TYPE  SRSC_S_IF_SIMPLE-T_SELECT

*"      I_T_FIELDS TYPE  SRSC_S_IF_SIMPLE-T_FIELDS

*"      E_T_DATA STRUCTURE  ZDESEMPFOR

*"  EXCEPTIONS

*"      NO_MORE_DATA

*"      ERROR_PASSED_TO_MESS_HANDLER

*"----------------------------------------------------------------------

DATA: BEGIN OF it_requis OCCURS 0,

   rnr(30)         TYPE c,

   updmode(2)     TYPE c,

   seldate        LIKE sy-datum,

   END OF it_requis.

   DATA: it_opt   TYPE rfc_db_opt OCCURS 0 WITH HEADER LINE,

         it_field TYPE rfc_db_fld OCCURS 0 WITH HEADER LINE,

         v_desti  TYPE rfcdest.

* Estruturas - ( Máximo número de linhas para tabela do DB )   *

   STATICS: s_s_if              TYPE srsc_s_if_simple,

              s_counter_datapakid LIKE sy-tabix.

* Variavel de memoria                                                  *

*----------------------------------------------------------------------*

   DATA: v_lsselect  TYPE srsc_s_select,

         v_max       TYPE i.

   DATA:     cnt  TYPE i,

             pack TYPE i,

             max1 TYPE i,

             max2 TYPE i,

             data TYPE sy-datum,

             v_data1 TYPE sy-datum,

             v_data2 TYPE sy-datum,

             control TYPE c,

             v_index LIKE sy-tabix,

             v_index2 LIKE sy-tabix,

             v_tabix1 LIKE sy-tabix,

             l_s_select2 TYPE srsc_s_select,

             s_cursor TYPE cursor.

*   Incluir linhas de dados da tabela I_T_SELECT para S_S_IF-T_SELECT

     APPEND LINES OF i_t_select TO s_s_if-t_select.

   STATICS: tipocarga TYPE c.

   DATA: BEGIN OF it_vendas OCCURS 0,

     vendor       LIKE /BIC/AULVEFDS100-vendor,

     fiscper      LIKE /BIC/AULVEFDS100-fiscper,

     material     LIKE /BIC/AULVEFDS100-material,

     vendasvar    LIKE /BIC/AULVEFDS100-RTBAINSASV,

     vendasvarimp LIKE /BIC/AULVEFDS100-rtbainsast,

     vendapecas   LIKE /BIC/AULVEFDS100-BASE_QTY,

     tipovenda    LIKE /BIC/AULVEFDS100-/BIC/ULINDTPVN,

     moeda        LIKE /BIC/AULVEFDS100-LOC_CURRCY,

     unidade      LIKE /BIC/AULVEFDS100-BASE_UOM,

     dia          LIKE /BIC/AULVEFDS100-Calday,

   END OF it_vendas.

   STATICS: BEGIN OF it_data OCCURS 0,

     vendor       LIKE /BIC/AULVEFDS200-vendor,

     fiscper      LIKE /BIC/AULVEFDS200-fiscper,

     material     LIKE /BIC/AULVEFDS200-material,

     vendasvar    LIKE /BIC/AULVEFDS200-RTBAINSASV,

     vendasvarimp LIKE /BIC/AULVEFDS200-rtbainsast,

     vendapecas   LIKE /BIC/AULVEFDS200-BASE_QTY,

     tipovenda    LIKE /BIC/AULVEFDS200-/BIC/ULINDTPVN,

     moeda        LIKE /BIC/AULVEFDS200-LOC_CURRCY,

     unidade      LIKE /BIC/AULVEFDS200-BASE_UOM,

     dia          LIKE /BIC/AULVEFDS100-Calday,

END OF it_data.

* Iniciar ( primeira chamada por SAPI ) ou transferência de dados

   IF i_initflag = sbiwa_c_flag_on.

*   Validação do DataSource

     CASE i_dsource.

       WHEN 'ZDS_BW_DESEMP_FORNECEDOR'.

       WHEN OTHERS.

         IF 1 = 2. MESSAGE e009(r3). ENDIF.

*       Mensagem de erro

         log_write 'E'         "message type

                   'R3'        "message class

                   '009'       "message number

                   i_dsource   "message variable 1

                   ' '.        "message variable 2

         RAISE error_passed_to_mess_handler.

     ENDCASE.

*   Incluir linhas de dados da tabela I_T_SELECT para S_S_IF-T_SELECT

     APPEND LINES OF i_t_select TO s_s_if-t_select.

*   Mover dados p/ estrutura S_S_IF (parâmetro de extração de dados)

     s_s_if-requnr  = i_requnr.

     s_s_if-dsource = i_dsource.

     s_s_if-maxsize = i_maxsize.

*   Incluir linhas de dados da tabela I_T_FIELDS para S_S_IF-T_FIELDS

     APPEND LINES OF i_t_fields TO s_s_if-t_fields.

   ELSE.                 "Initialization mode or data extraction ?

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

* Data transfer: First Call      OPEN CURSOR + FETCH

*                Following Calls FETCH only

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

     IF s_counter_datapakid EQ 0.

       v_data1 = sy-datum - 1.

       v_data2 = sy-datum - 365.

* VENDAS

       SELECT vendor fiscper material RTBAINSASV rtbainsast BASE_QTY /BIC/ULINDTPVN LOC_CURRCY BASE_UOM Calday

         FROM /BIC/AULVEFDS100

         INTO TABLE it_vendas

         WHERE Calday BETWEEN v_data1 and v_data2.

       SORT it_vendas BY vendor fiscper.

        LOOP AT it_vendas.

         READ TABLE it_vendas WITH KEY vendor = it_vendas-vendor

                                     fiscper = it_vendas-fiscper

                                            BINARY SEARCH.

          IF sy-subrc EQ 0.

     it_data-vendor          = it_vendas-vendor.

     it_data-fiscper         = it_vendas-vendor.

     it_data-material        = it_vendas-material.

     it_data-vendasvar       = it_vendas-vendasvar.

     it_data-vendasvarimp    = it_vendas-vendasvarimp.

     it_data-vendapecas      = it_vendas-vendapecas.

     it_data-tipovenda       = it_vendas-tipovenda.

     it_data-moeda           = it_vendas-moeda.

     it_data-unidade         = it_vendas-unidade.

     it_data-dia             = it_vendas-dia.

         ENDIF.

         APPEND it_data.

       ENDLOOP.

     ENDIF.

     IF it_data[] IS INITIAL.

       RAISE no_more_data.

     ENDIF.

     CLEAR: max1, max2.

     max2 = s_s_if-maxsize.

     LOOP AT it_data.

       DELETE it_data.

     e_t_data-vendor         = it_data-vendor.

     e_t_data-fiscper        = it_data-fiscper.

     e_t_data-material       = it_data-material.

     e_t_data-vendasvar      = it_data-vendasvar.

     e_t_data-vendasvarimp   = it_data-vendasvarimp.

     e_t_data-vendapecas     = it_data-vendapecas.

     e_t_data-tipovenda      = it_data-tipovenda.

     e_t_data-moeda          = it_data-moeda.

     e_t_data-unidade        = it_data-unidade.

     e_t_data-dia            = it_data-dia.

       APPEND e_t_data.

       ADD 1 TO max1.

       IF max1 >= max2.

         EXIT.

       ENDIF.

     ENDLOOP.

     ADD 1 TO s_counter_datapakid.

   ENDIF.

ENDFUNCTION.

1 ACCEPTED SOLUTION
Read only

RaymondGiuseppi
Active Contributor
0 Likes
359

Did you try to debug the execution via RSA3 ?

Also read again your code for unusual code like

LOOP AT it_vendas.

         READ TABLE it_vendas WITH KEY vendor = it_vendas-vendor

                                     fiscper = it_vendas-fiscper

                                            BINARY SEARCH.

IF sy-subrc EQ 0.

Check its own existence ?

And what will happen at second extraction (datapakid = 1) as you loaded the data in a non-statics internal table. (In fact here you should have open a cursor with hold at first datapakidn and then fetch data by package.)

Debug via RSA3, you should understand.

Regards,

Raymond

2 REPLIES 2
Read only

RaymondGiuseppi
Active Contributor
0 Likes
360

Did you try to debug the execution via RSA3 ?

Also read again your code for unusual code like

LOOP AT it_vendas.

         READ TABLE it_vendas WITH KEY vendor = it_vendas-vendor

                                     fiscper = it_vendas-fiscper

                                            BINARY SEARCH.

IF sy-subrc EQ 0.

Check its own existence ?

And what will happen at second extraction (datapakid = 1) as you loaded the data in a non-statics internal table. (In fact here you should have open a cursor with hold at first datapakidn and then fetch data by package.)

Debug via RSA3, you should understand.

Regards,

Raymond

Read only

Former Member
0 Likes
359

Hello,

There is a mistake in the code. You are looping the table and checking the same table.

LOOP AT it_vendas

        READ TABLE it_vendas WITH KEY vendor = it_vendas-vendor

                                     fiscper = it_vendas-fiscper

                                            BINARY SEARCH.

Check that..I think it should fix your issue.