Текущее время: Вс, авг 17 2025, 01:31

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




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Корреспонденция счетов.
СообщениеДобавлено: Пт, апр 15 2011, 23:21 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, янв 20 2006, 12:01
Сообщения: 74
И не забывайте тот факт, что иногда кривую корреспонденцию переразбирают.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корреспонденция счетов.
СообщениеДобавлено: Пн, апр 18 2011, 10:02 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 08 2010, 15:57
Сообщения: 259
Откуда: Киев
Пол: Женский
Yanvladimirovich, да если можно поделитесь кодом. А то что то мой экстрактор ... не очень мне нравится, хорошо бы его доработать. Как раз возможно ваш код мне и поможет :D


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корреспонденция счетов.
СообщениеДобавлено: Пн, апр 18 2011, 16:47 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, фев 16 2006, 15:46
Сообщения: 451
Откуда: Россия
Ну вот, только, чур, предоставляется "AS IS". Если найдёте ошибку, пишите (пока, вроде, работает).

Позволяет фильтровать по БЕ и финансовому периоду.

Code:
FUNCTION ZJ3RK_BIW_GET_DATA_SIMPLE.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  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  ZEXTRJ_3RKKRS OPTIONAL
*"  EXCEPTIONS
*"      NO_MORE_DATA
*"      ERROR_PASSED_TO_MESS_HANDLER
*"----------------------------------------------------------------------

  DATA:    L_S_SELECT          TYPE SRSC_S_SELECT.
  STATICS: S_S_IF              TYPE SRSC_S_IF_SIMPLE,
           S_COUNTER_DATAPAKID LIKE SY-TABIX,
           S_CURSOR            TYPE CURSOR.

  RANGES:  L_R_BUKRS    FOR ZEXTRJ_3RKKRS-BUKRS,
           L_R_FISCPER  FOR ZEXTRJ_3RKKRS-FISCPER.

  STATICS  tmstmp_low         TYPE TZNTSTMPS.
  STATICS  tmstmp_high        TYPE TZNTSTMPS.

  STATICS  tz                 TYPE ttzz-tzone.

  STATICS: date_low           TYPE d,
           time_low           TYPE t.

  STATICS: date_high          TYPE d,
           time_high          TYPE t.

  STATICS  datamode           TYPE c.

  STATICS: gjahr_low          TYPE GJAHR,
           monat_low          TYPE MONAT.

  STATICS: gjahr_high         TYPE GJAHR,
           monat_high         TYPE MONAT.

  DATA:    foundflag          TYPE c.

  DATA:    line_beg           TYPE i,
           line_end           TYPE i.

  FIELD-SYMBOLS <fs_data> TYPE ZEXTRJ_3RKKRS.


* Initialization mode (first call by SAPI) or data transfer mode
* (following calls) ?
  IF I_INITFLAG = SBIWA_C_FLAG_ON.

************************************************************************
* Initialization: check input parameters
*                 buffer input parameters
*                 prepare data selection
************************************************************************

* Check DataSource validity
    CASE I_DSOURCE.
      WHEN 'ZJ_3RKKRS2'.
      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.

  ELSE.                 "Initialization mode or data extraction ?

************************************************************************
* Data transfer: First Call      OPEN CURSOR + FETCH
*                Following Calls FETCH only
************************************************************************

* First data package -> OPEN CURSOR
    IF S_COUNTER_DATAPAKID = 0.

* Fill range tables BW will only pass down simple selection criteria
* of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.

      break-point.

      LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'BUKRS'.
        MOVE-CORRESPONDING L_S_SELECT TO L_R_BUKRS .
        APPEND L_R_BUKRS.
      ENDLOOP.

      foundflag   = ''.

      LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'FISCPER'.

        IF L_S_SELECT-SIGN = 'I' AND L_S_SELECT-OPTION = 'BT' AND L_S_SELECT-LOW = ''.
          gjahr_low   = '0000'.
          monat_low   = '00'.
          gjahr_high  = L_S_SELECT-HIGH+0(4).
          monat_high  = L_S_SELECT-HIGH+5(2).
          foundflag   = 'X'.
        ELSEIF L_S_SELECT-SIGN = 'I' AND L_S_SELECT-OPTION = 'EQ' AND L_S_SELECT-LOW = ''.
          gjahr_low   = L_S_SELECT-LOW+0(4).
          monat_low   = L_S_SELECT-LOW+5(2).
          gjahr_high  = '0000'.
          monat_high  = '00'.
          foundflag   = 'X'.
        ELSE.
          gjahr_low   = L_S_SELECT-LOW+0(4).
          monat_low   = L_S_SELECT-LOW+5(2).
          gjahr_high  = L_S_SELECT-HIGH+0(4).
          monat_high  = L_S_SELECT-HIGH+5(2).
          foundflag   = 'X'.
        ENDIF.

      ENDLOOP.

      IF foundflag   = ''.
          gjahr_low   = '0000'.
          monat_low   = '00'.
          gjahr_high  = '9999'.
          monat_high  = '99'.
      ENDIF.

      foundflag   = ''.

      LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'TIMESTAMP'.

        IF L_S_SELECT-SIGN = 'I' AND L_S_SELECT-OPTION = 'BT' AND L_S_SELECT-LOW = ''.
          tmstmp_low  = '000000000000000'.
          tmstmp_high = L_S_SELECT-HIGH.
          datamode    = 'C'.
          foundflag   = 'X'.
        ELSE.
          tmstmp_low  = L_S_SELECT-LOW.
          tmstmp_high = L_S_SELECT-HIGH.
          datamode    = 'D'.
          foundflag   = 'X'.
        ENDIF.

      ENDLOOP.

      IF foundflag  = ''.

        datamode    = 'F'.
        tmstmp_high = '99991231235959'.

        date_high   = '99991231'.
        time_high   = '235959'.

      ELSE.

         CONVERT TIME STAMP tmstmp_high
                 TIME ZONE  sy-zonlo
                 INTO DATE  date_high
                      TIME  time_high.

      ENDIF.

      IF datamode  = 'C' or datamode  = 'F'.

        IF gjahr_high = '0000' AND monat_high = '00'.

          OPEN CURSOR WITH HOLD S_CURSOR FOR
          SELECT * FROM J_3RKKRS
          WHERE   GJAHR = gjahr_low
            AND   MONAT = monat_low
            AND   BUKRS IN L_R_BUKRS
            AND   CPUDT <= date_high
            AND ( CPUDT < date_high OR CPUTM <= time_high ).

         ELSE.

          OPEN CURSOR WITH HOLD S_CURSOR FOR
          SELECT * FROM J_3RKKRS
          WHERE   GJAHR >= gjahr_low
            AND   GJAHR <= gjahr_high
            AND ( GJAHR > gjahr_low  OR MONAT >= monat_low  )
            AND ( GJAHR < gjahr_high OR MONAT <= monat_high )
            AND   BUKRS IN L_R_BUKRS
            AND   CPUDT <= date_high
            AND ( CPUDT <  date_high OR CPUTM <= time_high ).

         ENDIF.

      ELSE.

        CONVERT TIME STAMP tmstmp_low
                 TIME ZONE sy-zonlo
                 INTO DATE date_low
                      TIME time_low.

        IF gjahr_high = '0000' AND monat_high = '00'.

          OPEN CURSOR WITH HOLD S_CURSOR FOR
          SELECT * FROM J_3RKKRS
          WHERE   GJAHR = gjahr_low
            AND   MONAT = monat_low
            AND   BUKRS IN L_R_BUKRS
            AND   CPUDT <= date_high
            AND ( CPUDT < date_high OR CPUTM <= time_high )
            AND   CPUDT >= date_low
            AND ( CPUDT > date_low OR CPUTM >= time_low ).

         ELSE.

          OPEN CURSOR WITH HOLD S_CURSOR FOR
          SELECT * FROM J_3RKKRS
          WHERE   GJAHR >= gjahr_low
            AND   GJAHR <= gjahr_high
            AND ( GJAHR > gjahr_low  OR MONAT >= monat_low  )
            AND ( GJAHR < gjahr_high OR MONAT <= monat_high )
            AND   BUKRS IN L_R_BUKRS
            AND   CPUDT <= date_high
            AND ( CPUDT < date_high OR CPUTM <= time_high )
            AND   CPUDT >= date_low
            AND ( CPUDT > date_low OR CPUTM >= time_low ).

         ENDIF.

      ENDIF.


    ENDIF.                             "First data package ?


    DESCRIBE TABLE E_T_DATA LINES line_beg.
    line_beg = line_beg + 1.

    FETCH NEXT CURSOR S_CURSOR
               APPENDING CORRESPONDING FIELDS
               OF TABLE E_T_DATA
               PACKAGE SIZE S_S_IF-MAXSIZE.

    DESCRIBE TABLE E_T_DATA LINES line_end.

    LOOP AT E_T_DATA FROM line_beg  TO line_end ASSIGNING <fs_data>.

      CONVERT DATE <fs_data>-CPUDT
              TIME <fs_data>-CPUTM
              INTO TIME STAMP <fs_data>-TIMESTAMP
              TIME ZONE sy-zonlo.

      CONCATENATE <fs_data>-GJAHR '0' <fs_data>-MONAT INTO <fs_data>-FISCPER.

    ENDLOOP.

    IF SY-SUBRC <> 0.
      CLOSE CURSOR S_CURSOR.
      RAISE NO_MORE_DATA.
    ENDIF.

    S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.

  ENDIF.              "Initialization mode or data extraction ?

ENDFUNCTION.


У таблицы J_3RKKRS, дополнительно, лучше создать индекс по полям

CPUDT
CPUTM
BUKRS
GJAHR
MONAT

(в таком порядке) После чего выбор дельты будет работать быстрее.

_________________
Ян Владимирович,
http://www.vladimirovich.net


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корреспонденция счетов.
СообщениеДобавлено: Вт, апр 19 2011, 08:43 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 08 2010, 15:57
Сообщения: 259
Откуда: Киев
Пол: Женский
Спасибо огромное, Yanvladimirovich :D !


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корреспонденция счетов.
СообщениеДобавлено: Чт, май 12 2011, 09:22 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Пн, мар 14 2011, 14:48
Сообщения: 5
Пол: Мужской
Здравствуйте!
Объясните пожалуйста что из себя представляет структура ZEXTRJ_3RKKRS и источник ZJ_3RKKRS2?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Корреспонденция счетов.
СообщениеДобавлено: Вт, окт 04 2011, 12:53 
Начинающий
Начинающий

Зарегистрирован:
Пн, дек 24 2007, 16:43
Сообщения: 16
А как боретесь с ручным перераспределением? когда было 4 записи, а после ручного перераспределения стало две, к примеру. На стороне BW или в экстракторе обработку делать?
В коде от Yanvladimirovich'а я не заметил никаких обработок подобного рода. он тащит все.
И какой ключ для DSO подобрать?
По идее должен быть следующий ключ:

Балансовая единица
Номер бухгалтерского документа
Финансовый год
Номер отдельной позиции (дебет)
Номер отдельной позиции (кредит)

Но после ручного перераспределения номера отдельных поз-й по дебету и кредету изменятся.


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

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


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

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


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

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