Текущее время: Чт, апр 25 2024, 13:38

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: предыдущий год
СообщениеДобавлено: Пт, фев 27 2015, 08:51 
Специалист
Специалист

Зарегистрирован:
Ср, авг 06 2014, 09:44
Сообщения: 239
Добрый день!
Подскажите пожалуйста как в одном отчете вытащить показатель за 2010 к примеру и за предыдущий 2009. Не разбивая по годам как обычно задав период с 01.209 по 12.2010, а при запуске выбирать только один год, а предыдущий будет рассчитываться из него. В отчете используется признак 0CALMONTH "Календарный год/месяц". На его основе нужно создать переменную, подскажите как будет выглядеть код?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: предыдущий год
СообщениеДобавлено: Пт, фев 27 2015, 10:38 
Начинающий
Начинающий

Зарегистрирован:
Ср, апр 03 2013, 10:20
Сообщения: 8
Попробуйте определить смещение для переменной в BEX которой ограничиваете показатель.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: предыдущий год
СообщениеДобавлено: Пт, фев 27 2015, 11:23 
Специалист
Специалист

Зарегистрирован:
Ср, авг 06 2014, 09:44
Сообщения: 239
Deepoint написал(а):
Попробуйте определить смещение для переменной в BEX которой ограничиваете показатель.


Переменная которую я использую для ограничения признака представляет интервал. Я делаю смещение -12. Запускаю отчет, указываю период с 01.2010 по 12.2010. Для 2009 года значение не вышло, пусто.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: предыдущий год
СообщениеДобавлено: Пт, фев 27 2015, 15:48 
Начинающий
Начинающий

Зарегистрирован:
Ср, апр 03 2013, 10:20
Сообщения: 8
В R/3 есть фм MONTH_PLUS_DETERMINE.
Можно скопировать его в Z в BW.
В CMOD примерно следующее. Писал в блокноте, сильно не ругайтесь на ошибки. Принцип, я думаю, тут понятен.
Code:
DATA: l_s_range type rsr_s_rangesid.
DATA: begdate type d.
DATA: enddate type d.
...
IF i_step = 1.

  CASE i_vnam.
...
WHEN 'ZLAST_YEAR_MOUNTH'. " Ваша переменная
   
   DATA: l_mounth_begin       TYPE d,
        l_mounth_end         TYPE d,
        l_lastmounth_begin    TYPE d,
        l_lastmounth_end      TYPE d,
          lastmth(10)      TYPE c.
       
   READ TABLE    i_t_var_range
       INTO     loc_var_range
       WITH KEY vnam = 'ZINPUT_MOUNTH'. " Введенный месяц
   
   begdate = loc_var_range-high.
   enddate = loc_var_range-low.
   

    CALL FUNCTION 'ZMONTH_PLUS_DETERMINE'
      EXPORTING
        months  = -12
        olddate = begdate
      IMPORTING
        newdate = l_lastmounth_begin.
   
   CALL FUNCTION 'ZMONTH_PLUS_DETERMINE'
      EXPORTING
        months  = -12
        olddate = enddate
      IMPORTING
        newdate = l_lastmounth_end.   
      
     l_s_range-low = l_lastmounth_begin.
     l_s_range-high = l_lastmounth_end.
      l_s_range-sign = 'I'.
      l_s_range-opt = 'EQ'.
      APPEND l_s_range TO e_t_range.
   
      CLEAR l_s_range.
    
    
    
     
      CLEAR: month.
    ENDIF.
...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: предыдущий год
СообщениеДобавлено: Пн, мар 02 2015, 13:26 
Специалист
Специалист

Зарегистрирован:
Ср, авг 06 2014, 09:44
Сообщения: 239
Deepoint написал(а):
В R/3 есть фм MONTH_PLUS_DETERMINE.
Можно скопировать его в Z в BW.
В CMOD примерно следующее. Писал в блокноте, сильно не ругайтесь на ошибки. Принцип, я думаю, тут понятен.
Code:
DATA: l_s_range type rsr_s_rangesid.
DATA: begdate type d.
DATA: enddate type d.
...
IF i_step = 1.

  CASE i_vnam.
...
WHEN 'ZLAST_YEAR_MOUNTH'. " Ваша переменная
   
   DATA: l_mounth_begin       TYPE d,
        l_mounth_end         TYPE d,
        l_lastmounth_begin    TYPE d,
        l_lastmounth_end      TYPE d,
          lastmth(10)      TYPE c.
       
   READ TABLE    i_t_var_range
       INTO     loc_var_range
       WITH KEY vnam = 'ZINPUT_MOUNTH'. " Введенный месяц
   
   begdate = loc_var_range-high.
   enddate = loc_var_range-low.
   

    CALL FUNCTION 'ZMONTH_PLUS_DETERMINE'
      EXPORTING
        months  = -12
        olddate = begdate
      IMPORTING
        newdate = l_lastmounth_begin.
   
   CALL FUNCTION 'ZMONTH_PLUS_DETERMINE'
      EXPORTING
        months  = -12
        olddate = enddate
      IMPORTING
        newdate = l_lastmounth_end.   
      
     l_s_range-low = l_lastmounth_begin.
     l_s_range-high = l_lastmounth_end.
      l_s_range-sign = 'I'.
      l_s_range-opt = 'EQ'.
      APPEND l_s_range TO e_t_range.
   
      CLEAR l_s_range.
    
    
    
     
      CLEAR: month.
    ENDIF.
...


Спасибо большое за код. Но вот мне нужно немного иначе. Смотрите как я писала ранее, мне нужно создать переменную для стандартного признака 0CALMONTH "Календарный день/месяц". Но сама переменная должна определяться из другой переменной. И такая переменная есть, "Интервал месяцев". Т.е. пользователь вводит период с 01.2010 по 12.2010 - значения для переменной "Интервал месяцев", моя переменная вычисляется из этого периода 01.2010-12=01.2009 и 12.2010-12=12.2009. Я попробовала сделать свою переменную на основе не 0CALMONTH, а на основе 0CALYEAR "Календарный год" (код ниже). Но вот ничего не сработало. Не пойму, может код не верный. Получается моя переменная "Предыдущий год" и переменная из которой он рассчитывается "Интервал месяцев" основаны на разных признаках. Это имеет значение? Если правило что переменная которая рассчитывается из другой переменной и та переменная из которой рассчитывается должны быть основаны на одном и том же признаке?
*** Предыдущий год (из переменной "Интервал месяцев")
when 'ZVPYEAR'.
if i_step = 2.
loop at I_T_VAR_RANGE into zv_var.
if ( zv_var-vnam = 'ZVMONTHS' ).
zv_month = zv_var-low.

zv_year = zv_month(4).
zv_year = zv_year - 1.
L_S_RANGE-LOW = zv_year.
L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'EQ'.
append L_S_RANGE to E_T_RANGE.

exit.
endif.
endloop.
endif.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: предыдущий год
СообщениеДобавлено: Вт, мар 03 2015, 08:39 
Начинающий
Начинающий

Зарегистрирован:
Ср, апр 03 2013, 10:20
Сообщения: 8
Проверил на своей системе. Переменные на основе 0calmounth.
ZM_IN - интервал месяцев, который вводит пользователь.
ZM_CL - расчетный интервал.
Данный код исправно сдвигает границы интервала на год назад.
Или я не понимаю что надо сделать или одно из двух)
Code:
when 'ZM_CL'.

      DATA: l_mounth_begin        TYPE d,
            l_mounth_end          TYPE d,
            l_lastmounth_begin    TYPE d,
            l_lastmounth_end      TYPE d.

      clear L_S_RANGE.
     
      " Считываем введенный пользователем интервал
      READ TABLE    i_t_var_range
      INTO     loc_var_range
      WITH KEY vnam = 'ZM_IN'. " Введенный месяц

      begdate = loc_var_range-low.
      enddate = loc_var_range-high.

      " вычитаем 12 месяцев из верхней и нижней границы интервала
      " ZMONTH_PLUS_DETERMINE скопированный в Z фм из R/3.

      CALL FUNCTION 'ZMONTH_PLUS_DETERMINE'
      EXPORTING
        months  = -12
        olddate = begdate
      IMPORTING
        newdate = l_lastmounth_begin.

      CALL FUNCTION 'ZMONTH_PLUS_DETERMINE'
      EXPORTING
        months  = -12
        olddate = enddate
      IMPORTING
        newdate = l_lastmounth_end.
       
       " присваиваем полученные значения расчетному интервалу
       l_s_range-sign = 'I'.
       l_s_range-opt  = 'EQ'.
       l_s_range-low  = l_lastmounth_begin.
       l_s_range-high = l_lastmounth_end.
       append l_s_range to e_t_range.


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

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


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

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


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

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