一:左侧补零
自己的笨办法
ee = '0000000000000000000' b = strlen(aa). c = 18 - b. dd+0(c) = ee+0(c) . dd+c(b) = aa.
调用系统的,对数字操作
PERFORM alphaformat(sapfs000) USING: A01-IN,A01-OUT.
可以对同一个字段操作
比如 using itab-aa, itab-aa.那么aa就是左侧补零了
FORM ALPHAFORMAT USING A01-IN A01-OUT.
STRING = A01-IN.
SHIFT STRING UP TO ' '.
IF A01-IN CO KON_NUMER
AND STRING EQ SPACE
AND A01-IN NE SPACE.
UNPACK A01-IN TO A01-OUT.
ELSE.
MOVE A01-IN TO A01-OUT.
ENDIF.
ENDFORM.
二:自动刷新的程序
自动刷新的程序REPORT zauto_refresh NO STANDARD PAGE HEADING.
DATA: g_num TYPE i.
START-OF-SELECTION.
CALL FUNCTION 'Z_SLEEP'
STARTING NEW TASK 'WAIT'
PERFORMING when_finished ON END OF TASK.
WRITE:/ sy-uzeit, g_num. "Time
WRITE:/ 'wait for 5 sec....'.
AT USER-COMMAND.
CASE sy-ucomm.
WHEN 'REFRESH'.
DATA l_time TYPE char8.
WRITE sy-uzeit TO l_time.
MODIFY LINE 1 OF CURRENT PAGE FIELD VALUE sy-uzeit FROM l_time
g_num FROM g_num.
g_num = g_num + 1.
CALL FUNCTION 'Z_SLEEP'
STARTING NEW TASK 'WAIT'
PERFORMING when_finished ON END OF TASK.
ENDCASE.
*---------------------------------------------------------------------*
* FORM WHEN_FINISHED *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> TASKNAME *
*---------------------------------------------------------------------*
FORM when_finished USING taskname.
RECEIVE RESULTS FROM FUNCTION 'Z_SLEEP'.
SET USER-COMMAND 'REFRESH'.
ENDFORM. " WHEN_FINISHED
'Z_SLEEP' 里很简单,就写个 wait up to 5 seconds. 就行了。最关键的是要选上 Remote-enable module
可惜的是,我想用这个方法来实现alv的自动刷新的时候就不行了,debug看代码是被执行的,就是没反应,搞不懂了,哪位大侠知道的,还请告知。
三:如何找到长文本的ID等
如何找到长文本的ID,OBJECT, NAME(所有对象适用)长文本创建后会在STXH表中添加一条记录,而STXH表有ID, OBJECT , NAME字段,和READ_TEXT对应
那么哪一条是你刚刚创建的呢,很简单
根据TDFUSER Created by
TDFDATE Date created
TDFTIME Time Created
限制一下STXH的记录就OK了
*****************************
求助,如何用ABAP实现PS模块WBS元素长文本的激活和保存.
我用SAVE_TEXT保存了WBS元素的长文本,用READ_TEXT可以读出来,但是发现没保存进数据库,事务CJ02 ,双击进入WBS元素长文本,没见到保存的文本.代码如下.
Data I_THEAD type Thead occurs 10 with header line.
Data I_TLINE type TLINE occurs 10 with header line.
I_THEAD-TDOBJECT = 'PMS'.
I_THEAD-TDNAME = 'E00009058'.
I_THEAD-TDID = 'LTXT'.
I_THEAD-TDSPRAS = '1'.
* I_THEAD-TDLINESIZE = '40'.
APPEND I_THEAD.
I_TLINE-TDFORMAT = '*'.
I_TLINE-TDLINE = 'aaa'.
Append I_TLINE.
I_TLINE-TDFORMAT = '*'.
I_TLINE-TDLINE = 'FF'.
Append I_TLINE.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
CLIENT = sy-mandt
HEADER = I_THEAD
* INSERT = 'X'
SAVEMODE_DIRECT = 'X'
* IMPORTING FUNCTION = EDITOR_FUNCTION
* NEWHEADER = I_THEAD
TABLES
LINES = I_TLINE.
call function 'COMMIT_TEXT'
exporting
object = 'PMS'.
commit work.
原因感觉是因为WBS长文本的第一行是WBS元素的描述,而默认情况下,长文本没有生成,SAVE_TEXT的时候并没有保存进去.不知道怎么激活长文本,请大家帮帮忙
如果WBS的长文本已经回车到第二行,或者第二行有文字,并保存后,用上面的代码能实现修改.但是没激活的情况下保存后不可见.
答案:
RCWBS-XLGTX字段是控制长文本是否存在的, 把这个字段设置成'X', 应该就可以了.
谢谢版主,可以了,更新了这个字段PRPS-TXTSP就可以了,多谢
********************************
为什么我的save_text不成功阿?代码如下:请高手指点。。。t-code:c201。
data: l_plnnr like mkal-plnnr,
l_alnal like mkal-alnal,
l_ktext like plko-ktext,
LN_PLKO LIKE THEAD-TDNAME.
REFRESH TBL_DESC_TEXT.
CLEAR: TBL_DESC_TEXT,
G_PLKO_TEXT1,
G_PLKO_TEXT2,
G_PLKO_TEXT3,
G_PLKO_TEXT4,
G_PLKO_TEXT5,
G_PLKO_LINE,
LN_PLKO.
select single plnnr alnal into (l_plnnr,l_alnal)
from mkal
where verid = g_verid
and matnr = tbl_operations-matnr
and werks = tbl_operations-werks.
CONCATENATE sy-mandt '2' l_plnnr l_alnal
'00000001'
INTO LN_PLKO.
select single ktext into l_ktext from plko
where plnnr = l_plnnr
and PLNAL = l_alnal
and werks = tbl_operations-werks.
SPLIT tbl_operations-G_plko_LINE001 AT DELIMITER INTO
G_PLKO_TEXT2
G_PLKO_TEXT3
G_PLKO_TEXT4
G_PLKO_TEXT5
G_PLKO_TEXT6.
move l_ktext to G_PLKO_TEXT1.
*>>>fill tdline
PERFORM fill_tdline using G_PLKO_TEXT1.
PERFORM fill_tdline using G_PLKO_TEXT2.
PERFORM fill_tdline using G_PLKO_TEXT3.
PERFORM fill_tdline using G_PLKO_TEXT4.
PERFORM fill_tdline using G_PLKO_TEXT5.
move 'ROUTING' to TBL_THEAD-TDOBJECT.
move LN_PLKO to TBL_THEAD-TDNAME.
move 'PLKO' to TBL_THEAD-TDID.
move '1' to TBL_THEAD-TDSPRAS.
APPEND TBL_THEAD.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
CLIENT = sy-mandt
HEADER = TBL_THEAD
INSERT = ' '
SAVEMODE_DIRECT = 'X'
* OWNER_SPECIFIED = ' '
* LOCAL_CAT = ' '
* IMPORTING
* FUNCTION =
* NEWHEADER =
TABLES
LINES = TBL_DESC_TEXT
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
call function 'COMMIT_TEXT'
exporting
object = 'ROUTING'
NAME = LN_PLKO
ID = 'PLKO'
LANGUAGE = '1'.
commit work.
*&---------------------------------------------------------------------*
*& Form fill_tdline
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_tdline using l_text.
data: l_length(3) TYPE n.
l_length = strlen( l_text ).
if l_length <= 40.
TBL_DESC_TEXT-TDFORMAT = '*'.
TBL_DESC_TEXT-TDLINE = l_text.
append TBL_DESC_TEXT.
elseif l_length > 40.
TBL_DESC_TEXT-TDFORMAT = '*'.
TBL_DESC_TEXT-TDLINE = l_text+0(40).
append TBL_DESC_TEXT.
TBL_DESC_TEXT-TDFORMAT = '='.
TBL_DESC_TEXT-TDLINE = l_text+40(24).
append TBL_DESC_TEXT.
endif.
ENDFORM. " fill_tdline
解决办法
I am facing problem in displaying the Long text in Open Maintenance orders IW31 Sscreen.
i am uploading the long text using SAVE_TEXT function module.
i can see the data in STXL table but i am not able to see the data on the transaction screen display or change mode.
I am using correct object name ,id and etc..in header table objectid: AUFK, TEXTID: AVOT ,tdname:clintid+routingnumber(afvc table aufpl field+ sequence(like 0001.. ), language: EN.
Text line also i am passing and i am enering the direct saving mpde.
i am getting sy-subrc eq = 0.
and i am able to get the data by READ_TEXT table.
my problem is why the Long text data is not diaplying on the scrreen(TEXT editor).
same thing happening in COmponents LONG TEXT in the same TCODE
Please Help me.
Rich Heilman
Posts: 13,460
Questions: 35
Registered: 4/27/04
Forum points: 31,292
Re: problem in SAVE_TEXT usage
Posted: Nov 28, 2005 4:11 PM in response to: ramesh alla Reply E-mail this post
Can you please post the relevant code?
Regards,
Rich Heilman
Nekenti Vera Ve...
Posts: 327
Questions: 0
Registered: 4/26/05
Forum points: 592
Re: problem in SAVE_TEXT usage
Posted: Nov 28, 2005 4:12 PM in response to: ramesh alla Reply E-mail this post
for displaying long text you have to use EDIT_TEXT FM.
Srinivas Adavi
Posts: 4,777
Questions: 7
Registered: 6/3/04
Forum points: 8,322
Re: problem in SAVE_TEXT usage
Posted: Nov 28, 2005 4:13 PM in response to: ramesh alla Reply E-mail this post
This is a known problem with some of the transactions that have long text. In those transactions, an online entry of long text, will not only save the long texts like you did, but also update a specific field on the table that indicates whether long text exists.
In your case, AUFK has a field LTEXT which needs to be set to 'X'. If not, then the long texts will not be shown on the transaction screens, even if they exist in the database.
The only solution for such situations is to directly update the database table and set this field.
Regards,
Srinivas
zhenglin gu
Posts: 534
Questions: 32
Registered: 12/10/04
Forum points: 796
Re: problem in SAVE_TEXT usage
Posted: Nov 28, 2005 4:14 PM in response to: ramesh alla Reply E-mail this post
hi, sorry, I can't login server to test.
But have a suggestion to your problem.
Thinking of it reverse.
If the long text you store through SAVE_TEXT can' display in screen, why not do a change in screen and save a long text.
Then you can try to find out this long text in the related table, then you can make clear why to call SAVE_TEXT correctly.
Hope it will be helpful
thanks
Vijay Babu Dudla
Posts: 9,155
Questions: 14
Registered: 3/29/05
Forum points: 11,350
Re: problem in SAVE_TEXT usage
Posted: Nov 28, 2005 4:14 PM in response to: ramesh alla Reply E-mail this post
Hi Check all the Comunication tables to store texts are filled .
regards
vijay
ramesh alla
Posts: 93
Questions: 50
Registered: 10/18/05
Forum points: 0
Re: problem in SAVE_TEXT usage
Posted: Nov 28, 2005 4:23 PM in response to: Srinivas Adavi Reply E-mail this post
Hi srinvas,
update a specific field on the table that indicates whether long text exists.
first time i am using the long text uploading.
please i am not able to see the long text indiactor field in the transaction screen.
please tell me which field i need to set.
which are the tables i need to do direct update please tell me.
if i update table directly is it required to use SAVE_TEXT?
Please help me
Srinivas Adavi
Posts: 4,777
Questions: 7
Registered: 6/3/04
Forum points: 8,322
Re: problem in SAVE_TEXT usage
Posted: Nov 28, 2005 4:26 PM in response to: ramesh alla Reply E-mail this post
I think in your case it is the AUFK-LTEXT field. Give the same order number that you are creating long texts for, and update this field to 'X'.
To verify, you can manually enter long texts to an order and check this field.
Srinivas
Srinivas Adavi
Posts: 4,777
Questions: 7
Registered: 6/3/04
Forum points: 8,322
Re: problem in SAVE_TEXT usage
Posted: Nov 28, 2005 4:29 PM in response to: Srinivas Adavi Reply E-mail this post
Here are the steps.
First save the long texts using SAVE_TEXT.
If that is successful, then update AUFK and set this field value to 'X' using the following syntax.
UPDATE aufk SET ltext = 'X' WHERE aufnr = <your order number>
Hope this helps,
Srinivas
ramesh alla
Posts: 93
Questions: 50
Registered: 10/18/05
Forum points: 0
这个帖是讲的我碰到的问题。关键我的是T-code:C201的。我找不到那个字段在那个数据库表里。。。还真头疼阿。。。 Re: problem in SAVE_TEXT usage
Posted: Nov 28, 2005 4:39 PM in response to: Srinivas Adavi Reply E-mail this post
thanks srinvias
now i am at home.
i will check tomorrow and get back to you.
问题已经成功解决。需要更新数据库表的一个关键字段。。。
* Set text flag in operation data
lv_plpo-txtsp = sy-langu.
MODIFY plpo FROM TABLE lv_plpo.
看到长文本按照自己的格式传上去,N高兴啊。。。