Текущее время: Пн, авг 20 2018, 19:07

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


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Особенности работы с таблицей РА0293
СообщениеДобавлено: Вт, сен 26 2017, 11:43 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 07 2015, 13:36
Сообщения: 93
Коллеги, добрый день.

Код, представленный ниже, осуществляет следующее:
1. Получаем в переменные si_first_year, si_second_year значение двух лет, предшествующих заданному. Например, если задан 2017, то si_first_year = SI16
2. В таблице РА0293 поля от lga01до lga20 могут содержать значение вида переменной si_first_year (si_second_year) и, если содержат, то соответствующие им поля bet01 - bet20 будут содержать сумму, которую потребуется сложить с соответствующей ей из следующей строки таблицы и т.д.
3. По ключу - таб. номеру можно получить нужные строки, но дальше надо анализировать в каком из этих lga лежит значение вида SI14 (например, для заработков за 2014 год)...

Code:
  CALL FUNCTION 'CCM_GO_BACK_MONTHS'
    EXPORTING
      currdate   = current_bollist-begda
      backmonths = 12
    IMPORTING
      newdate    = one_year_before.

  CALL FUNCTION 'CCM_GO_BACK_MONTHS'
    EXPORTING
      currdate   = current_bollist-begda
      backmonths = 24
    IMPORTING
      newdate    = two_years_before.

  si_second_year = |SI{ two_years_before+2(2) }|.
  si_first_year = |SI{ one_year_before+2(2) }|.

  SELECT *
    FROM pa0293
    INTO TABLE lt_pa0293
    WHERE pernr EQ gs_head-pernr.

  LOOP AT lt_pa0293 INTO wa_pa0293.
    DO 20 TIMES.
      IF sy-index LT 10.
        pa0293_bet_condition = |wa_pa0293-bet0{ sy-index }|.
        pa0293_lga_condition = |wa_pa0293-lga0{ sy-index }|.
      ELSE.
        pa0293_bet_condition = |wa_pa0293-bet{ sy-index }|.
        pa0293_lga_condition = |wa_pa0293-lga{ sy-index }|.
      ENDIF.
      CASE ( pa0293_lga_condition ).
        WHEN si_first_year.
          one_year_all = one_year_all + ( pa0293_bet_condition ).
        WHEN si_second_year.
          two_years_all = two_years_all + ( pa0293_bet_condition ).
      ENDCASE.
    ENDDO.
  ENDLOOP.


На строке CASE ( pa0293_lga_condition ). выдаётся ошибка Синтаксис для спецификации метода: "objref->method" или "class=>method".
Вероятно, с кейсом так нельзя делать, но иначе придётся писать слишком уж много кода для такой простой операции.
Подозреваю, что можно как то проще получить информацию о заработках за 2 года, но не знаю как.
Прошу знающих подсказать.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293
СообщениеДобавлено: Вт, сен 26 2017, 11:51 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 330
boreich написал(а):
Коллеги, добрый день.

Код, представленный ниже, осуществляет следующее:
1. Получаем в переменные si_first_year, si_second_year значение двух лет, предшествующих заданному. Например, если задан 2017, то si_first_year = SI16
2. В таблице РА0293 поля от lga01до lga20 могут содержать значение вида переменной si_first_year (si_second_year) и, если содержат, то соответствующие им поля bet01 - bet20 будут содержать сумму, которую потребуется сложить с соответствующей ей из следующей строки таблицы и т.д.
3. По ключу - таб. номеру можно получить нужные строки, но дальше надо анализировать в каком из этих lga лежит значение вида SI14 (например, для заработков за 2014 год)...

Code:
  CALL FUNCTION 'CCM_GO_BACK_MONTHS'
    EXPORTING
      currdate   = current_bollist-begda
      backmonths = 12
    IMPORTING
      newdate    = one_year_before.

  CALL FUNCTION 'CCM_GO_BACK_MONTHS'
    EXPORTING
      currdate   = current_bollist-begda
      backmonths = 24
    IMPORTING
      newdate    = two_years_before.

  si_second_year = |SI{ two_years_before+2(2) }|.
  si_first_year = |SI{ one_year_before+2(2) }|.

  SELECT *
    FROM pa0293
    INTO TABLE lt_pa0293
    WHERE pernr EQ gs_head-pernr.

  LOOP AT lt_pa0293 INTO wa_pa0293.
    DO 20 TIMES.
      IF sy-index LT 10.
        pa0293_bet_condition = |wa_pa0293-bet0{ sy-index }|.
        pa0293_lga_condition = |wa_pa0293-lga0{ sy-index }|.
      ELSE.
        pa0293_bet_condition = |wa_pa0293-bet{ sy-index }|.
        pa0293_lga_condition = |wa_pa0293-lga{ sy-index }|.
      ENDIF.
      CASE ( pa0293_lga_condition ).
        WHEN si_first_year.
          one_year_all = one_year_all + ( pa0293_bet_condition ).
        WHEN si_second_year.
          two_years_all = two_years_all + ( pa0293_bet_condition ).
      ENDCASE.
    ENDDO.
  ENDLOOP.


На строке CASE ( pa0293_lga_condition ). выдаётся ошибка Синтаксис для спецификации метода: "objref->method" или "class=>method".
Вероятно, с кейсом так нельзя делать, но иначе придётся писать слишком уж много кода для такой простой операции.
Подозреваю, что можно как то проще получить информацию о заработках за 2 года, но не знаю как.
Прошу знающих подсказать.

do varing не подходит?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293
СообщениеДобавлено: Вт, сен 26 2017, 11:56 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 07 2015, 13:36
Сообщения: 93
Kuranov.Dmitry написал(а):
do varing не подходит?


Загуглил, выглядит подходящим. Прямо сейчас не проверю, но, думаю, то, что надо. Спасибо!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293
СообщениеДобавлено: Вт, сен 26 2017, 11:59 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 16:38
Сообщения: 1142
Хм? а зачем в CASE в условии скобки? Я вот про это
Code:
CASE ( pa0293_lga_condition )

Я что-то пропустил, и можно обратится таким образом к переменной где-то кроме ASSIGN?

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293  Тема решена
СообщениеДобавлено: Вт, сен 26 2017, 12:05 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 330
boreich написал(а):
Kuranov.Dmitry написал(а):
do varing не подходит?


Загуглил, выглядит подходящим. Прямо сейчас не проверю, но, думаю, то, что надо. Спасибо!

как-то так:
Code:
LOOP AT lt_pa0293 INTO wa_pa0293.
    DO 20 TIMES VARING lga from wa_pa0293-lga01 next wa_pa0293-lga02
                        VARING bet from wa_pa0293-bet01 next wa_pa0293-bet02  .
      CASE  lga .
        WHEN si_first_year.
          one_year_all = one_year_all + ( bet ).
        WHEN si_second_year.
          two_years_all = two_years_all + ( bet ).
      ENDCASE.
    ENDDO.
  ENDLOOP.


p.s.

И я бы все таки читал ИТ через ФМ, а не на прямую.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293
СообщениеДобавлено: Вт, сен 26 2017, 12:38 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 07 2015, 13:36
Сообщения: 93
В итоге остановился на таком варианте:
Code:
LOOP AT lt_pa0293 INTO wa_pa0293.
    DO 20 TIMES VARYING pa0293_lga FROM wa_pa0293-lga01 NEXT wa_pa0293-lga02
                VARYING pa0293_bet FROM wa_pa0293-bet01 NEXT wa_pa0293-bet02.
      BREAK-POINT.
      CASE pa0293_lga.
        WHEN si_first_year.
          one_year_all = one_year_all + pa0293_bet.
        WHEN si_second_year.
          two_years_all = two_years_all + pa0293_bet.
      ENDCASE.
    ENDDO.
  ENDLOOP.

Спасибо за ответы. А про ФМ можно подробней? Какой ФМ, что на вход, что на выходе?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293
СообщениеДобавлено: Вт, сен 26 2017, 12:40 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 07 2015, 13:36
Сообщения: 93
Кодер написал(а):
Хм? а зачем в CASE в условии скобки? Я вот про это
Code:
CASE ( pa0293_lga_condition )

Я что-то пропустил, и можно обратится таким образом к переменной где-то кроме ASSIGN?


В select"ах можно задавать условия таким образом. Я думал, что и в кейсе можно, но ошибся.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293
СообщениеДобавлено: Вт, сен 26 2017, 12:45 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 330
boreich написал(а):
В итоге остановился на таком варианте:
Code:
LOOP AT lt_pa0293 INTO wa_pa0293.
    DO 20 TIMES VARYING pa0293_lga FROM wa_pa0293-lga01 NEXT wa_pa0293-lga02
                VARYING pa0293_bet FROM wa_pa0293-bet01 NEXT wa_pa0293-bet02.
      BREAK-POINT.
      CASE pa0293_lga.
        WHEN si_first_year.
          one_year_all = one_year_all + pa0293_bet.
        WHEN si_second_year.
          two_years_all = two_years_all + pa0293_bet.
      ENDCASE.
    ENDDO.
  ENDLOOP.

Спасибо за ответы. А про ФМ можно подробней? Какой ФМ, что на вход, что на выходе?

Code:
CALL FUNCTION 'HR_READ_INFOTYPE'
  EXPORTING
*   TCLAS                 = 'A'
    pernr                 = табельный номер
    infty                 = номер инфотипа
*   BEGDA                 = '18000101'  начало периода выборки записей
*   ENDDA                 = '99991231' конец периода выборки записей
*   BYPASS_BUFFER         = ' '
*   LEGACY_MODE           = ' '
* IMPORTING
*   SUBRC                 =
  tables
    infty_tab             = куда класть данные
* EXCEPTIONS
*   INFTY_NOT_FOUND       = 1
*   OTHERS                = 2
          .

пример для вашего случая

Code:
DATA lt_p0293 TYPE p0293.

   CALL FUNCTION 'HR_READ_INFOTYPE'
  EXPORTING
    pernr                 = gs_head-pernr
    infty                 = '0293'
*   BEGDA                 = '18000101'
*   ENDDA                 = '99991231'
  tables
    infty_tab             = p0293
EXCEPTIONS
   INFTY_NOT_FOUND       = 1
   OTHERS                = 2
          .


он так же проверит полномочия пользователя на получение данных для ТН


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293
СообщениеДобавлено: Вт, сен 26 2017, 12:45 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 11:50
Сообщения: 193
Думаю как то так ФМ RH_READ_INFTY

Смотрите группу функций RHDB

З.Ы. Этот ФМ больше для орг единиц :roll:

Дмитрий написал нужный ФМ :)


Последний раз редактировалось Bimit Вт, сен 26 2017, 12:53, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293
СообщениеДобавлено: Вт, сен 26 2017, 12:48 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 07 2015, 13:36
Сообщения: 93
Kuranov.Dmitry написал(а):
Code:
DATA lt_p0293 TYPE p0293.

   CALL FUNCTION 'HR_READ_INFOTYPE'
  EXPORTING
    pernr                 = gs_head-pernr
    infty                 = '0293'
*   BEGDA                 = '18000101'
*   ENDDA                 = '99991231'
  tables
    infty_tab             = p0293
EXCEPTIONS
   INFTY_NOT_FOUND       = 1
   OTHERS                = 2
          .


он так же проверит полномочия пользователя на получение данных для ТН


Но в итоге по р0293 нам потом всё равно таким же циклом надо будет идти? Т.е. разница только в проверке полномочий?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293
СообщениеДобавлено: Вт, сен 26 2017, 12:49 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 330
boreich написал(а):

Но в итоге по р0293 нам потом всё равно таким же циклом надо будет идти? Т.е. разница только в проверке полномочий?

да, просто привык работать с PAXXXX таблицами через функциональники, чтение напрямую еще безопасно, но вот обновление чревато обходом проверок на корректность данных


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293
СообщениеДобавлено: Вт, сен 26 2017, 12:51 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 07 2015, 13:36
Сообщения: 93
Ладно, всем большое спасибо за помощь. Тема исчерпана.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности работы с таблицей РА0293
СообщениеДобавлено: Ср, сен 27 2017, 12:10 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Пт, сен 07 2007, 08:53
Сообщения: 1197
boreich написал(а):
Т.е. разница только в проверке полномочий?


ФМ еще умеет буфферизовать чтение данных. То есть, если по этому ТН данный ИТ уже был зачитан, то повторное чтение из ФМ зачитает данные из буффера, а не из БД. Существенно, если код является частью какой-то большой программы, где требуемые данные уже могли быть зачитаны в каком-то другом месте программы.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

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


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

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


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

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