Текущее время: Вт, июн 24 2025, 14:43

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пт, май 18 2007, 12:45 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 09:59
Сообщения: 1097
Откуда: Moscow
Пол: Мужской
в догонку

есть в сапнете
How To Create Generic DataSources which use the Delta Queue - там правда про то как создавать свой источник с дельтой, но на дельту можешь забить + комменты в самом фм

_________________
In SAP we trust !


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Экстракция через функциональный модуль
СообщениеДобавлено: Чт, ноя 15 2012, 15:41 
Ассистент
Ассистент

Зарегистрирован:
Пн, май 30 2011, 15:32
Сообщения: 47
Уважаемы, извините что беспокою, но я уже сломал голову себе. Я сейчас впервые столкнулся с созданием экстрактора на ФМке. Пересмотрел уже кучу хаутушек и мануалов, но ничего не выходит. Через RSA3 всё работает ок, но в BW фулл и инициализация возвращают нули. Если не затруднит, посмотрите код и прокомментируйте:
Code:
FUNCTION zbwi_z2tzr_get_data.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  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
*"     VALUE(I_REMOTE_CALL) TYPE  SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF
*"  TABLES
*"      I_T_SELECT TYPE  SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL
*"      I_T_FIELDS TYPE  SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL
*"      E_T_DATA STRUCTURE  Z2TZR_TAB OPTIONAL
*"  EXCEPTIONS
*"      NO_MORE_DATA
*"      ERROR_PASSED_TO_MESS_HANDLER
*"----------------------------------------------------------------------
************************************************************************
* Наименование: ZBWI_Z2TZR_GET_DATA
* Описание: ФМ родового экстрактора для загрузки фактических ТЗР Z2TZR
* Приложение: BW
* Дата создания: 12.11.2012
************************************************************************

  TYPE-POOLS: abap.
*Укороченный тип строки таблицы BKPF
  TYPES: BEGIN OF ts_bkpf_short,
    belnr TYPE bkpf-belnr,
    BUKRS TYPE BKPF-BUKRS,
    GJAHR TYPE bkpf-gjahr,
    blart TYPE bkpf-blart,
    budat TYPE bkpf-budat,
END OF ts_bkpf_short.


*Таблицы дополнительных данных
  DATA lt_vbfa           TYPE SORTED TABLE OF vbfa          WITH NON-UNIQUE KEY vbelv posnv.
  DATA lt_vbfa2          TYPE SORTED TABLE OF vbfa          WITH NON-UNIQUE KEY vbelv posnv.
  DATA lt_mseg           TYPE SORTED TABLE OF mseg          WITH NON-UNIQUE KEY mblnr mjahr zeile.
  DATA lt_mseg2          TYPE SORTED TABLE OF mseg          WITH NON-UNIQUE KEY mblnr mjahr zeile.
  DATA lt_bkpf_short     TYPE SORTED TABLE OF ts_bkpf_short WITH NON-UNIQUE KEY belnr bukrs gjahr.
*Настроечная таблица контрагентов для поля флага MIT
  DATA lt_zt3_fi_balance TYPE TABLE OF zt3_fi_balance.
*Таблицы дополнительных данных
  DATA lt_bseg           TYPE TABLE OF bseg.
  DATA lt_mseg_st        TYPE TABLE OF mseg.
*Таблицы основных данных ТЗР
  DATA lt_zttzr          TYPE TABLE OF zttzr.
  DATA lt_zttzr_close    TYPE TABLE OF zttzr_close .
  DATA lt_zttzr_writeoff TYPE TABLE OF zttzr_writeoff.
*Строки таблиц основных данных ТЗР
  DATA ls_zttzr          TYPE zttzr.
  DATA ls_zttzr_close    TYPE zttzr_close.
  DATA ls_zttzr_writeoff TYPE zttzr_writeoff.
*Строки таблиц дополнительных данных
  DATA ls_bkpf_short    TYPE ts_bkpf_short.
  DATA ls_bseg          TYPE bseg.
  DATA ls_mseg_st       TYPE mseg.
  DATA ls_vbfa          TYPE vbfa.
  DATA ls_mseg          TYPE mseg.

*Имена входных полей
  CONSTANTS lc_vbeln_name     TYPE rsfieldnm VALUE 'VBELN1'.
  CONSTANTS lc_vbeln_name_sec TYPE rsfieldnm VALUE 'VBELN2'.
  CONSTANTS lc_zzpr_name      TYPE rsfieldnm VALUE 'ZZPR'.
*Параметры таблицы VBFA
  CONSTANTS lc_vbtyp_7    TYPE vbtyp VALUE '7'.
  CONSTANTS lc_vbtyp_r    TYPE vbtyp VALUE 'R'.
  CONSTANTS lc_bwart_101  TYPE vbfa-bwart VALUE '101'.
  CONSTANTS lc_bwart_601  TYPE vbfa-bwart VALUE '601'.

  CONSTANTS lc_usd        TYPE waers VALUE 'USD'.
  CONSTANTS lc_hkont_mit  TYPE z2tzr_tab-hkont VALUE '4150100000'.

* Example: DataSource for table SFLIGHT
  TABLES: sflight.

* Auxiliary Selection criteria structure
  DATA: l_s_select TYPE srsc_s_select.

* Maximum number of lines for DB table
  STATICS: s_s_if TYPE srsc_s_if_simple.
* Select ranges
  RANGES: lr_vbeln    FOR E_T_DATA_COPY-vbeln1,
          lr_vbeln2    FOR E_T_DATA_COPY-vbeln1,
          lr_zzpr        FOR E_T_DATA_COPY-zzpr.

  IF i_initflag = sbiwa_c_flag_on.

    CASE i_dsource.
      WHEN 'Z2TZR'.
      WHEN OTHERS.
        IF 1 = 2. MESSAGE e009(r3). ENDIF.
* this is a typical log call. Please write every error message like this
        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.
        APPEND LINES OF I_T_SELECT TO S_S_IF-T_SELECT.

* Fill parameter buffer for data extraction calls
    S_S_IF-REQUNR    = I_REQUNR.
    S_S_IF-DSOURCE = I_DSOURCE.
    S_S_IF-MAXSIZE   = I_MAXSIZE.

* Fill field list table for an optimized select statement
* (in case that there is no 1:1 relation between InfoSource fields
* and database table fields this may be far from beeing trivial)
    APPEND LINES OF I_T_FIELDS TO S_S_IF-T_FIELDS.

*Выбор контрагентов

  SELECT * FROM zt3_fi_balance INTO TABLE lt_zt3_fi_balance.
*Заполнение Range массивов из входных данных
  LOOP AT s_s_if-t_select INTO l_s_select
                          WHERE fieldnm = lc_vbeln_name
                            OR  fieldnm =  lc_zzpr_name
                            OR fieldnm = lc_vbeln_name.

    IF l_s_select-fieldnm = lc_vbeln_name.
      MOVE-CORRESPONDING l_s_select TO lr_vbeln.
      APPEND lr_vbeln.
    ELSEIF l_s_select-fieldnm = lc_zzpr_name.
      MOVE-CORRESPONDING l_s_select TO lr_zzpr.
      APPEND lr_zzpr.
    ELSE.
      MOVE-CORRESPONDING l_s_select TO lr_vbeln2.
      APPEND lr_vbeln2.
    ENDIF.

  ENDLOOP.

*Если выбран первый тип ТЗР
  IF 1 IN lr_zzpr.
* Выбираем данные из таблицы для ТЗР 1 типа
    SELECT * FROM zttzr INTO TABLE lt_zttzr WHERE vbeln_vl IN lr_vbeln.
    IF sy-subrc = 0.
      SELECT        * FROM  vbfa
    INTO TABLE lt_vbfa
    FOR ALL ENTRIES IN lt_zttzr
         WHERE  vbelv    = lt_zttzr-vbeln_vl
         AND    posnv    = lt_zttzr-posnr_vl
         AND    vbtyp_n  = lc_vbtyp_r
         AND    vbtyp_v  = lc_vbtyp_7
        AND ( bwart  = lc_bwart_101 OR bwart = lc_bwart_601 ).
* Если данные по ТЗР найдены
      IF sy-subrc = 0.
* Ищем данные о документах материала поставок
        SELECT        * FROM  mseg
          INTO TABLE lt_mseg
          FOR ALL ENTRIES IN lt_vbfa
               WHERE  mblnr  = lt_vbfa-vbeln
               AND    mjahr  = lt_vbfa-mjahr
               AND    zeile  = lt_vbfa-posnn+2(4)
               AND   ( bwart  = lc_bwart_101 OR bwart = lc_bwart_601 )
               AND    smbln  = space.
*Если данные есть
        IF NOT lt_mseg[] IS INITIAL.
*Ищем документы сторно
          SELECT        * FROM  mseg
            INTO TABLE lt_mseg_st
            FOR ALL ENTRIES IN lt_mseg
                 WHERE  mjahr  = lt_mseg-mjahr
                 AND    smbln  = lt_mseg-mblnr
                 AND    smblp  = lt_mseg-zeile.
* Если найдены сторонированные документы, удаляем их
          IF sy-subrc = 0.
            LOOP AT lt_mseg_st INTO ls_mseg_st.
              DELETE lt_mseg WHERE mjahr = ls_mseg_st-mjahr AND
                                   mblnr = ls_mseg_st-smbln AND
                                   zeile = ls_mseg_st-smblp.
              DELETE lt_vbfa WHERE vbeln = ls_mseg_st-smbln AND
                                   mjahr = ls_mseg_st-mjahr AND
                                   posnn+2(4) = ls_mseg_st-smblp.
            ENDLOOP.
          ENDIF.
        ENDIF.
      ENDIF.
*Заполняем выходную таблицу экстрактора данными
      LOOP AT lt_zttzr INTO ls_zttzr.
        CLEAR E_T_DATA_COPY.
        E_T_DATA_COPY-bukrs  = ls_zttzr-bukrs.
        E_T_DATA_COPY-belnr  = ls_zttzr-belnr.
        E_T_DATA_COPY-gjahr  = ls_zttzr-gjahr.
        E_T_DATA_COPY-blart  = ls_zttzr-blart.
        E_T_DATA_COPY-budat  = ls_zttzr-budat.
        E_T_DATA_COPY-hkont  = ls_zttzr-hkont.
        E_T_DATA_COPY-vbeln1 = ls_zttzr-vbeln_vl.
        E_T_DATA_COPY-posnr1 = ls_zttzr-posnr_vl.
*Данные документа материала
        READ TABLE lt_vbfa INTO ls_vbfa WITH KEY    vbelv = ls_zttzr-vbeln_vl
                                                    posnv = ls_zttzr-posnr_vl BINARY SEARCH.
        IF sy-subrc = 0.
          READ TABLE lt_mseg INTO ls_mseg WITH KEY  mblnr  = ls_vbfa-vbeln
                                                    mjahr  = ls_vbfa-mjahr
                                                    zeile  = ls_vbfa-posnn+2(4) BINARY SEARCH.
          IF sy-subrc = 0.
            E_T_DATA_COPY-mblnr1 = ls_mseg-mblnr.
            E_T_DATA_COPY-mjahr1 = ls_mseg-mjahr.
            E_T_DATA_COPY-zeile1 = ls_mseg-zeile.
          ENDIF.

        ENDIF.
        E_T_DATA_COPY-dmbtr  = ls_zttzr-dmbtr.
        E_T_DATA_COPY-waers  = lc_usd.
        E_T_DATA_COPY-datum  = ls_zttzr-datum.
        E_T_DATA_COPY-uzeit  = ls_zttzr-uzeit.
        E_T_DATA_COPY-deleted  = ls_zttzr-deleted.
        E_T_DATA_COPY-stblg  = ls_zttzr-stblg.
        E_T_DATA_COPY-stjah  = ls_zttzr-stjah.
*Данные контрагента
        IF ls_zttzr-hkont = lc_hkont_mit.
          READ TABLE lt_zt3_fi_balance TRANSPORTING NO FIELDS WITH KEY zzlifnr = ls_zttzr-lifnr.
          IF sy-subrc = 0.
            E_T_DATA_COPY-zzmit  = abap_true.
          ENDIF.
        ENDIF.
        E_T_DATA_COPY-zzpr  = '1'.
        APPEND E_T_DATA_COPY  TO E_T_DATA_COPY.
      ENDLOOP.
    ENDIF.
  ENDIF.

* Выбираем данные из таблицы для ТЗР 2 типа
  IF 2 IN lr_zzpr.
    SELECT * FROM zttzr_close INTO TABLE lt_zttzr_close WHERE vbeln_re IN lr_vbeln
                                                         AND vbeln_ot IN lr_vbeln2.
*Если данные найдены
    IF sy-subrc = 0.
      CLEAR lt_bkpf_short[].
*Выбираем дополнительные данные таблицы BKPF
      SELECT belnr bukrs gjahr blart budat
        FROM bkpf
        INTO TABLE            lt_bkpf_short
        FOR ALL ENTRIES IN    lt_zttzr_close
        WHERE                 belnr =  lt_zttzr_close-belnr
                          AND BUKRS = lt_zttzr_close-bukrs
                          AND GJAHR = lt_zttzr_close-GJAHR.
*Выбираем дополнительные данные таблицы zttzr
      CLEAR lt_zttzr[].
      SELECT * FROM zttzr
        INTO TABLE            lt_zttzr
        FOR ALL ENTRIES IN    lt_zttzr_close
        WHERE belnr =         lt_zttzr_close-belnr_in.
*Если данные найдены ищем дополнительные данные таблицы BSEG
      IF lines( lt_zttzr ) > 0.
        CLEAR lt_bseg[].
        SELECT * FROM bseg
          INTO  TABLE         lt_bseg
          FOR ALL ENTRIES IN  lt_zttzr
          WHERE               hkont = lt_zttzr-hkont
          AND                 belnr = lt_zttzr-belnr
          AND                 shkzg = 'S'
          AND                 BUKRS = lt_zttzr-bukrs
          AND                 GJAHR = lt_zttzr-GJAHR.
      ENDIF.
*Ищем данные о документах материала для поставки вДв 601
      SELECT * FROM  vbfa
          INTO TABLE lt_vbfa
          FOR ALL ENTRIES IN lt_zttzr_close
          WHERE               vbelv = lt_zttzr_close-vbeln_re
          AND                 posnv = lt_zttzr_close-posnr_re
          AND                 bwart  = lc_BWART_601
          AND                 vbtyp_n  = lc_vbtyp_r
          AND                 vbtyp_v  = lc_vbtyp_7.
* Если документы найдены
      IF sy-subrc = 0.
        SELECT        * FROM  mseg
          INTO TABLE lt_mseg
          FOR ALL ENTRIES IN lt_vbfa
               WHERE  mblnr  = lt_vbfa-vbeln
               AND    mjahr  = lt_vbfa-mjahr
               AND    zeile  = lt_vbfa-posnn+2(4)
               AND    bwart  = lc_BWART_601
               AND    smbln  = space.
* Ищем документы сторно
        IF NOT lt_mseg[] IS INITIAL.

          SELECT        * FROM  mseg
            INTO TABLE lt_mseg_st
            FOR ALL ENTRIES IN lt_mseg
                 WHERE  mjahr  = lt_mseg-mjahr
                 AND    smbln  = lt_mseg-mblnr
                 AND    smblp  = lt_mseg-zeile.
* Если найдены сторонированные документы удаляем их
          IF sy-subrc = 0.
            LOOP AT lt_mseg_st INTO ls_mseg_st.
              DELETE lt_mseg WHERE mjahr = ls_mseg_st-mjahr AND
                                   mblnr = ls_mseg_st-smbln AND
                                   zeile = ls_mseg_st-smblp.
              DELETE lt_vbfa WHERE vbeln = ls_mseg_st-smbln AND
                                   mjahr = ls_mseg_st-mjahr AND
                                   posnn+2(4) = ls_mseg_st-smblp.
            ENDLOOP.
          ENDIF.
        ENDIF.
      ENDIF.

*Ищем данные о документах материала для поставки вДв 101
      SELECT        * FROM  vbfa
          INTO TABLE lt_vbfa2
          FOR ALL ENTRIES IN lt_zttzr_close
          WHERE     vbelv    = lt_zttzr_close-vbeln_ot
          AND    posnv     = lt_zttzr_close-posnr_ot
          AND    bwart     = lc_BWART_101
          AND    vbtyp_n   = lc_vbtyp_r
          AND    vbtyp_v   = lc_vbtyp_7.
* Если документы найдены
      IF sy-subrc = 0.
        SELECT        * FROM  mseg
          INTO TABLE lt_mseg2
          FOR ALL ENTRIES IN lt_vbfa2
               WHERE  mblnr  = lt_vbfa2-vbeln
               AND    mjahr  = lt_vbfa2-mjahr
               AND    zeile  = lt_vbfa2-posnn+2(4)
               AND    bwart  = lc_BWART_101
               AND    smbln  = space.
* Ищем документы сторно
        IF NOT lt_mseg2[] IS INITIAL.

          SELECT        * FROM  mseg
            INTO TABLE lt_mseg_st
            FOR ALL ENTRIES IN lt_mseg2
                 WHERE  mjahr  = lt_mseg2-mjahr
                 AND    smbln  = lt_mseg2-mblnr
                 AND    smblp  = lt_mseg2-zeile.
* Если найдены сторонированные документы удаляем их
          IF sy-subrc = 0.

            LOOP AT lt_mseg_st INTO ls_mseg_st.
              DELETE lt_mseg2 WHERE mjahr = ls_mseg_st-mjahr AND
                                   mblnr = ls_mseg_st-smbln AND
                                   zeile = ls_mseg_st-smblp.
              DELETE lt_vbfa2 WHERE vbeln = ls_mseg_st-smbln AND
                                   mjahr = ls_mseg_st-mjahr AND
                                   posnn+2(4) = ls_mseg_st-smblp.
            ENDLOOP.
          ENDIF.
        ENDIF.
      ENDIF.
*Заполняем выходную таблицу экстрактора данными
      LOOP AT lt_zttzr_close INTO ls_zttzr_close.
        CLEAR E_T_DATA_COPY.
        E_T_DATA_COPY-bukrs  = ls_zttzr_close-bukrs.
        E_T_DATA_COPY-belnr  = ls_zttzr_close-belnr.
        E_T_DATA_COPY-gjahr  = ls_zttzr_close-gjahr.
        READ TABLE lt_bkpf_short INTO ls_bkpf_short WITH KEY belnr = ls_zttzr_close-belnr
                                                             bukrs = ls_zttzr_close-bukrs
                                                             gjahr = ls_zttzr_close-gjahr BINARY SEARCH.
        IF sy-subrc = 0.
          E_T_DATA_COPY-blart  = ls_bkpf_short-blart.
          E_T_DATA_COPY-budat  = ls_bkpf_short-budat.
        ENDIF.
        READ TABLE lt_zttzr INTO ls_zttzr WITH KEY belnr = ls_zttzr_close-belnr_in.
        IF sy-subrc = 0.
          E_T_DATA_COPY-hkont  = ls_zttzr-hkont.
        ENDIF.

        E_T_DATA_COPY-vbeln1 = ls_zttzr_close-vbeln_re.
        E_T_DATA_COPY-posnr1 = ls_zttzr_close-posnr_re.
        READ TABLE lt_vbfa INTO ls_vbfa WITH KEY vbelv = ls_zttzr_close-vbeln_re
                                                 posnv = ls_zttzr_close-posnr_re BINARY SEARCH.
        IF sy-subrc = 0.
          READ TABLE lt_mseg INTO ls_mseg WITH KEY mblnr  = ls_vbfa-vbeln
                                                   mjahr  = ls_vbfa-mjahr
                                                   zeile  = ls_vbfa-posnn+2(4) BINARY SEARCH.
          IF sy-subrc = 0.
            E_T_DATA_COPY-mblnr1 = ls_mseg-mblnr.
            E_T_DATA_COPY-mjahr1 = ls_mseg-mjahr.
            E_T_DATA_COPY-zeile1 = ls_mseg-zeile.
          ENDIF.
        ENDIF.

        E_T_DATA_COPY-vbeln_kt = ls_zttzr_close-vbeln_ot.
        E_T_DATA_COPY-posnr_kt = ls_zttzr_close-posnr_ot.
        READ TABLE lt_vbfa2 INTO ls_vbfa WITH KEY vbelv = ls_zttzr_close-vbeln_ot
                                                  posnv = ls_zttzr_close-posnr_ot BINARY SEARCH.
        IF sy-subrc = 0.
          READ TABLE lt_mseg2 INTO ls_mseg WITH KEY mblnr  = ls_vbfa-vbeln
                                                    mjahr  = ls_vbfa-mjahr zeile  = ls_vbfa-posnn+2(4) BINARY SEARCH.
          IF sy-subrc = 0.
            E_T_DATA_COPY-mblnr2 = ls_mseg-mblnr.
            E_T_DATA_COPY-mjahr2 = ls_mseg-mjahr.
            E_T_DATA_COPY-zeile2 = ls_mseg-zeile.
          ENDIF.

        ENDIF.
        READ TABLE lt_bseg INTO ls_bseg WITH KEY hkont = E_T_DATA_COPY-hkont
                                                 belnr = E_T_DATA_COPY-belnr
                                                 gjahr = E_T_DATA_COPY-gjahr
                                                 BUKRS = E_T_DATA_COPY-bukrs.
        IF sy-subrc = 0.
          E_T_DATA_COPY-dmbtr  = ls_bseg-dmbtr.
          IF ls_zttzr-hkont = LC_HKONT_MIT.
            READ TABLE lt_zt3_fi_balance TRANSPORTING NO FIELDS WITH KEY zzlifnr = ls_bseg-lifnr.
            IF sy-subrc = 0.
              E_T_DATA_COPY-zzmit  = ABAP_TRUE.
            ENDIF.
          ENDIF.
        ENDIF.
        E_T_DATA_COPY-waers  = LC_USD.
        E_T_DATA_COPY-datum  = ls_zttzr_close-datum.
        E_T_DATA_COPY-uzeit  = ls_zttzr_close-uzeit.
        E_T_DATA_COPY-deleted  = ls_zttzr_close-deleted.
        E_T_DATA_COPY-stblg  = ls_zttzr_close-stblg.
        E_T_DATA_COPY-stjah  = ls_zttzr_close-stjah.

        E_T_DATA_COPY-zzpr  = '2'.
        APPEND E_T_DATA_COPY  TO E_T_DATA_COPY.

      ENDLOOP.
    ENDIF.
  ENDIF.
* Выбираем данные из таблицы для ТЗР 2 типа
  IF 3 IN lr_zzpr.
    SELECT * FROM zttzr_writeoff INTO TABLE lt_zttzr_writeoff WHERE vbeln_vl IN lr_vbeln2.
*Если найдены основные данные по ТЗР 3 типа
    IF sy-subrc = 0.

      CLEAR LT_BKPF_SHORT[].
      SELECT belnr bukrs gjahr blart budat FROM bkpf
        INTO TABLE                  lt_bkpf_short
        FOR ALL ENTRIES IN          lt_zttzr_writeoff
        WHERE                       belnr =  lt_zttzr_writeoff-belnr
                                AND bukrs = lt_zttzr_writeoff-bukrs
                                AND gjahr = lt_zttzr_writeoff-gjahr.

      CLEAR lt_bseg[].
      SELECT * FROM         bseg
        INTO TABLE          lt_bseg
        FOR ALL ENTRIES IN  lt_zttzr_writeoff
        WHERE               hkont = lt_zttzr_writeoff-hkont_k
        AND                 belnr = lt_zttzr_writeoff-belnr
        AND                 bukrs = lt_zttzr_writeoff-bukrs
        AND                 gjahr = lt_zttzr_writeoff-gjahr
        AND                 shkzg = 'S'.
*Ищем документы материала для поставок
      SELECT * FROM  vbfa
         INTO TABLE         lt_vbfa
         FOR ALL ENTRIES IN lt_zttzr_writeoff
         WHERE  vbelv    = lt_zttzr_writeoff-vbeln_vl
         AND    posnv    = lt_zttzr_writeoff-posnr_vl
         AND    vbtyp_n  = lc_vbtyp_r
         AND    vbtyp_v  = lc_vbtyp_7
         AND    bwart  = lc_BWART_101.
* Если документы найдены ищем среди них сторонированные
      IF sy-subrc = 0.
        SELECT        * FROM  mseg
          INTO TABLE lt_mseg
          FOR ALL ENTRIES IN lt_vbfa
               WHERE  mblnr  = lt_vbfa-vbeln
               AND    mjahr  = lt_vbfa-mjahr
               AND    zeile  = lt_vbfa-posnn+2(4)
               AND    bwart  = lc_BWART_101
               AND    smbln  = space.
*Если найдены сторонированные удаляем их
        IF NOT lt_mseg[] IS INITIAL.

          SELECT        * FROM  mseg
            INTO TABLE lt_mseg_st
            FOR ALL ENTRIES IN lt_mseg
                 WHERE  mjahr  = lt_mseg-mjahr
                 AND    smbln  = lt_mseg-mblnr
                 AND    smblp  = lt_mseg-zeile.
          IF sy-subrc = 0.

            LOOP AT lt_mseg_st INTO ls_mseg_st.
              DELETE lt_mseg WHERE mjahr = ls_mseg_st-mjahr AND
                                   mblnr = ls_mseg_st-smbln AND
                                   zeile = ls_mseg_st-smblp.
              DELETE lt_vbfa WHERE vbeln = ls_mseg_st-smbln AND
                                   mjahr = ls_mseg_st-mjahr AND
                                   posnn+2(4) = ls_mseg_st-smblp.
            ENDLOOP.
          ENDIF.
        ENDIF.
      ENDIF.
*Заполняем выходную таблицу данными ТЗР 3 типа
      LOOP AT lt_zttzr_writeoff INTO ls_zttzr_writeoff.
        CLEAR E_T_DATA_COPY.
        E_T_DATA_COPY-bukrs  = ls_zttzr_writeoff-bukrs.
        E_T_DATA_COPY-belnr  = ls_zttzr_writeoff-belnr_w.
        E_T_DATA_COPY-gjahr  = ls_zttzr_writeoff-gjahr_w.

        READ TABLE lt_bkpf_short INTO ls_bkpf_short WITH KEY belnr = ls_zttzr_writeoff-belnr
                                                             bukrs = ls_zttzr_writeoff-bukrs
                                                             gjahr = ls_zttzr_writeoff-gjahr BINARY SEARCH.
        IF sy-subrc = 0.
          E_T_DATA_COPY-blart  = ls_bkpf_short-blart.
          E_T_DATA_COPY-budat  = ls_bkpf_short-budat.
        ENDIF.

        E_T_DATA_COPY-hkont  = ls_zttzr_writeoff-hkont_k.
        E_T_DATA_COPY-vbeln_kt = ls_zttzr_writeoff-vbeln_vl.
        E_T_DATA_COPY-posnr_kt = ls_zttzr_writeoff-posnr_vl.

        READ TABLE lt_vbfa INTO ls_vbfa WITH KEY vbelv = ls_zttzr_writeoff-vbeln_vl
                                                 posnv = ls_zttzr_writeoff-posnr_vl BINARY SEARCH.
        IF sy-subrc = 0.
          READ TABLE lt_mseg INTO ls_mseg WITH KEY mblnr  = ls_vbfa-vbeln
                                                   mjahr  = ls_vbfa-mjahr zeile  = ls_vbfa-posnn+2(4) BINARY SEARCH.
          IF sy-subrc = 0.
            E_T_DATA_COPY-mblnr2 = ls_mseg-mblnr.
            E_T_DATA_COPY-mjahr2 = ls_mseg-mjahr.
            E_T_DATA_COPY-zeile2 = ls_mseg-zeile.
          ENDIF.

        ENDIF.
        E_T_DATA_COPY-dmbtr  = ls_zttzr_writeoff-wrbtr.
        E_T_DATA_COPY-waers  = LC_USD.
        E_T_DATA_COPY-datum  = ls_zttzr_writeoff-datum.
        E_T_DATA_COPY-uzeit  = ls_zttzr_writeoff-uzeit.
        E_T_DATA_COPY-deleted  = ls_zttzr_writeoff-deleted.
        E_T_DATA_COPY-stblg  = ls_zttzr_writeoff-stblg.
        E_T_DATA_COPY-stjah  = ls_zttzr_writeoff-stjah.
        READ TABLE lt_bseg INTO ls_bseg WITH KEY  hkont = E_T_DATA_COPY-hkont
                                                  belnr = E_T_DATA_COPY-belnr
                                                  bukrs = E_T_DATA_COPY-bukrs
                                                  gjahr = E_T_DATA_COPY-gjahr.
        IF sy-subrc = 0.

          IF ls_zttzr-hkont = LC_HKONT_MIT.
            READ TABLE lt_zt3_fi_balance TRANSPORTING NO FIELDS WITH KEY zzlifnr = ls_bseg-lifnr.
            IF sy-subrc = 0.
              E_T_DATA_COPY-zzmit  = ABAP_TRUE.
            ENDIF.
          ENDIF.
        ENDIF.
        E_T_DATA_COPY-zzpr  = '3'.
        APPEND E_T_DATA_COPY TO E_T_DATA_COPY.
      ENDLOOP.
    ENDIF.
  ENDIF.
  ELSE.
REFRESH E_T_DATA[].
LOOP AT E_T_DATA_COPY FROM ( GV_COUNTER_DATAPAKID - 1 ) * I_MAXSIZE + 1 TO GV_COUNTER_DATAPAKID * I_MAXSIZE.
  MOVE-CORRESPONDING E_T_DATA_COPY TO E_T_DATA.
  APPEND e_t_data.
  ENDLOOP.

  IF Sy-subrc <> 0.
    RAISE NO_MORE_DATA.
    ENDIF.


  ENDIF.

GV_COUNTER_DATAPAKID = GV_COUNTER_DATAPAKID + 1.

ENDFUNCTION.

Прошу прощения я длинную колбасу. Спасибо!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Экстракция через функциональный модуль
СообщениеДобавлено: Вт, ноя 20 2012, 16:13 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пт, окт 21 2005, 09:24
Сообщения: 832
Откуда: от верблюда...тоже:)
Пол: Мужской
ecnby написал(а):
Уважаемы, извините что беспокою, но я уже сломал голову себе. Я сейчас впервые столкнулся с созданием экстрактора на ФМке. Пересмотрел уже кучу хаутушек и мануалов, но ничего не выходит. Через RSA3 всё работает ок, но в BW фулл и инициализация возвращают нули. Если не затруднит, посмотрите код и прокомментируйте:
...
Прошу прощения я длинную колбасу. Спасибо!

а полномочия есть? можно выставить assert-ы и посмотреть что "выходит" или вставить цикл для отладки.

_________________
а подпись...а подписи не будет :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Экстракция через функциональный модуль
СообщениеДобавлено: Чт, ноя 22 2012, 12:34 
Ассистент
Ассистент

Зарегистрирован:
Пн, май 30 2011, 15:32
Сообщения: 47
Blizzard написал:
ecnby написал(а):
Уважаемы, извините что беспокою, но я уже сломал голову себе. Я сейчас впервые столкнулся с созданием экстрактора на ФМке. Пересмотрел уже кучу хаутушек и мануалов, но ничего не выходит. Через RSA3 всё работает ок, но в BW фулл и инициализация возвращают нули. Если не затруднит, посмотрите код и прокомментируйте:
...
Прошу прощения я длинную колбасу. Спасибо!

а полномочия есть? можно выставить assert-ы и посмотреть что "выходит" или вставить цикл для отладки.

траблу решил. Просто забыл отписать. С кодом проблем нет. Проблема была с IDOCами.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB