Текущее время: Ср, окт 18 2017, 11:34

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


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


ВНИМАНИЕ!

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



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

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

Код, представленный ниже, осуществляет следующее:
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 год)...

Код:
  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
Сообщения: 70
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 год)...

Код:
  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
Сообщения: 64
Kuranov.Dmitry писал(а):
do varing не подходит?


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


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

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

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

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


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

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


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

как-то так:
Код:
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
Сообщения: 64
В итоге остановился на таком варианте:
Код:
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
Сообщения: 64
Кодер писал(а):
Хм? а зачем в CASE в условии скобки? Я вот про это
Код:
CASE ( pa0293_lga_condition )

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


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


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

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 70
boreich писал(а):
В итоге остановился на таком варианте:
Код:
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.

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

Код:
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
          .

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

Код:
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
Сообщения: 144
Думаю как то так ФМ RH_READ_INFTY

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

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

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


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

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

Зарегистрирован:
Ср, окт 07 2015, 13:36
Сообщения: 64
Kuranov.Dmitry писал(а):
Код:
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
Сообщения: 70
boreich писал(а):

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

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


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

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


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

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


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


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

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


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

Сейчас этот форум просматривают: melnycky, sonics и гости: 32


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

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