Текущее время: Чт, июн 26 2025, 04:32

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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