Текущее время: Вт, окт 28 2025, 17:17

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


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

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


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

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