Posted: Mon Mar 02, 2009 1:47 pm Post subject: Batch-input для listbox
Здравствуйте! Натолкулся на проблему в транзакции cj30.
В поле TimeFrame нужно выбрать год 2009. Но запись сценария в shdb показывает, что нужно выбрать порядковый номер в списке, то есть 1. Порядковый номер не известен, только год.
SAPLKBPP 0320 X
BDC_CURSOR DROPT-PTIME
BDC_OKCODE =DROT
DROPT-PTIME 2009
Так с самого начала пробовал. В этом случае выдает ошибку:
Quote:
Fiscal year variant Z5 is not maintained for calendar year 4017
Message no. FGV 002
Что говорит, что ожидается ввод именно индекса 2008 (0 позиция ) + 2009 = 4017. Без Batch-input ошибки нет.
Возможно это особенность транзакции cj30, в других явное прописывание 2009 года сработает.
Age: 170 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Mon Mar 02, 2009 4:11 pm Post subject:
Похоже это специфичный listbox, когда KEY и TEXT не совпадают.
Наверно Вам придется разбираться с алгоритмом формирования listbox в транзакции cj30 для заданного WBS элемента и воспроизводить его в вашей программе.
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Mon Mar 02, 2009 5:52 pm Post subject:
Сорри, не "Всего", а "Итого"
В списке для периода такая картина:
PTIME PTIMETXT
0000 |Итого
2006 |2006
2007 |2007
2008 |2008
2009 |2009
2010 |2010
2011 |2011
2012 |2012
2013 |2013
2014 |2014
В результате год заводится нормально, а "Итого" выбирается по индексу "0".
См. инклюд LKBPPF02, подпрограмма PROVIDE_LISTBOX, заполнение внутренней таблицы INT_DROP_PTIME (для 4.7).
Там есть фишка: если в профиле бюджета(таблица TBP1C) указан индикатор "Планирование/бюджет-ОбщЗначения", то поле PTIME заполняется индексами:
Code:
REFRESH INT_DROP_PTIME.
IF BPIN-BPGE <> SPACE. <--У меня идет по этому алгоритму
INT_DROP_PTIME-PTIME = 0000.
INT_DROP_PTIME-PTIMETXT = TEXT-041.
APPEND INT_DROP_PTIME.
ENDIF.
IF BPIN-BPJA <> SPACE.
IF BPIN-BPGE <> SPACE. "l_year = 1996 - 2003 (e.g.)
L_YEAR = P_SJAHR.
WHILE L_YEAR LE P_EJAHR.
CLEAR INT_DROP_PTIME.
INT_DROP_PTIME-PTIME = L_YEAR.
INT_DROP_PTIME-PTIMETXT = L_YEAR.
APPEND INT_DROP_PTIME.
ADD 1 TO L_YEAR.
ENDWHILE.
ELSE. "l_year = 0000 - 0005 (e.g.)
L_YEAR = P_SJAHR.
WHILE L_YEAR LE P_EJAHR.
CLEAR INT_DROP_PTIME.
INT_DROP_PTIME-PTIME = L_YEAR - P_SJAHR. <--А здесь - индексы
INT_DROP_PTIME-PTIMETXT = L_YEAR.
APPEND INT_DROP_PTIME.
Для определения индекса алгоритм взял из cj30.
При известной Controlling area и Project Def индекс находится так.
Code:
CONSTANTS: c_cj30 TYPE sy-tcode VALUE 'CJ30',
c_cj40 TYPE sy-tcode VALUE 'CJ40'.
*&---------------------------------------------------------------------*
*& Form get_year_index
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->p_tcode TYPE sy-tcode
* -->P_KOKRS TYPE tka01-kokrs
* -->P_PROJECT TYPE proj-pspid
* -->p_year TYPE bpin-gjahr
* <--P_YEAR_index TYPE dropt-ptime
*----------------------------------------------------------------------*
FORM get_year_index USING p_tcode TYPE sy-tcode
p_kokrs TYPE tka01-kokrs
p_project TYPE proj-pspid
p_year TYPE bpin-gjahr
CHANGING p_year_index TYPE dropt-ptime.
DATA: ls_bpin TYPE bpin,
ls_tbp1c TYPE tbp1c.
DATA: line(72) TYPE c,
list LIKE TABLE OF line(72).
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.