[收藏]解决ALV的负数符号前显的问题

from http://blog.csdn.net/compassbutton/archive/2007/01/31/1499218.aspx

1、建立自定义函数
1.1 整数显示
FUNCTION CONVERSION_EXIT_Z0002_OUTPUT.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
DATA: OUTPUT1(12) TYPE C,
OUTDATUM TYPE INT4.
IF INPUT <> SPACE.
OUTDATUM = INPUT.
if input > 0.
move OUTDATUM TO OUTPUT .
else.
OUTDATUM = OUTDATUM * ( -1 ).
move OUTDATUM TO OUTPUT1 .
CONCATENATE '-' output1 into output.
CONDENSE output NO-GAPS .
endif.
ELSE.
OUTPUT = SPACE.
ENDIF.
ENDFUNCTION.
1.2 浮点数显示
FUNCTION conversion_exit_zsign_output.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------

DATA: output1(19) TYPE c,
output2(19),
outdatum TYPE p DECIMALS 2.
IF not input is initial.
outdatum = input.
IF input > 0.
WRITE outdatum TO output1 ."RIGHT-JUSTIFIED .
CONCATENATE ' ' output1 INTO output1.
ELSE.
outdatum = outdatum * ( -1 ).
WRITE outdatum TO output1 ."RIGHT-JUSTIFIED.
CONCATENATE '-' output1 INTO output1.
ENDIF.
ELSE.
* output = '0.00'.
CLEAR output1.
ENDIF.
CONDENSE output1 NO-GAPS .
WRITE output1 TO output2 RIGHT-JUSTIFIED .
output = output2.
ENDFUNCTION.

2、设置ALV输出格式字段格式
clear ls_fcat.
ls_fcat-fieldname = 'INT4'.
ls_fcat-inttype = 'I'.
ls_fcat-intlen = 10.
ls_fcat-col_pos = l_lin.
ls_fcat-seltext_s = ls_fcat-fieldname.
ls_fcat-seltext_m = ls_fcat-fieldname.
ls_fcat-seltext_l = ls_fcat-fieldname.
ls_fcat-edit_mask = '==Z0002'.
append ls_fcat to ct_fcat.

3、调用函数就可达到负数符号前显的效果。
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = lt_fcat
tables
t_outtab = gt_outtab
exceptions
program_error = 1
others = 2.


(0) 评论    (94) 引用   

用Check Deposit做customer应收账款clear

我们手动的做一下支票存款(Check Deposit)来进行应收账款的Clear操作。

首先TCODE FB70来做一张invoice

其中customer为PAUL POWER,Accounts Receivable帐户为159100. 应收账款11欧元。

此刻我们用TCODE FBL5N - Display/Change Line Items来查看PAUL POWER客户,可以看到这笔未清项。

TCODE FAGLB03 - Display Balances (New) 查看other receivable的balance状况为

之后我们便开始手动操作支票收款,TCODE为FF68 - Manual Entry

其中输入check支票的屏幕需要输入支票金额,支票号码,支付的customer的search item以及Invoice号码。

但输入结束,保存之后,通过菜单,进行POST,我们会看到生成了两个session。

因为check deposite会有两个session操作的过程:

subledger session用来与客户AR帐户做clear

bank session会对bank账户做clear

通过TCODE SM35会发现两个新建立的session,首先选中BANK session,点击process,选择foreground,我们可以看到整个clear的过程,是通过FB01进行的。

之后选中customer session,点击process,可以看到整个clear过程,通过FB05进行。

Bank session跑完之后,我们再次查看159100的balance,可以看到,已经有11欧元的debit

subledger session跑完之后,我们再次查看paul power的open item已经消失了,出现在了cleared item里面

通过FB03可以查看这两个session执行之后产生的document. 整个check deposit过程就结束了。


(0) 评论    (0) 引用   

Bank account, House bank, Bank Account基础

House Bank: A business partner that represents a bank via which you can process your own internal transactions. 也就是说,你的内部业务处理所需要的一个银行。但是并非是只有一个科目或者一个帐户。
House Bank中的每一个帐户,靠Account ID来区别。House Bank和Account ID组合在一起,就唯一确定了一个Bank Account. 每个Bank Account都指定了一个唯一的G/L中的科目。

他们三个之间的关系如下

在IDES系统中,我们演示如下。

首先在找到一个G/L Account主数据,然后看到有House Bank和Account ID两个栏位。

TCODE:FI12进入到后台配置,我们就可以看到一个House Bank体现了一个Bank Key定义的银行主数据,而一个House Bank下会有很多Account ID, House Bank和Account ID确定了唯一的一个Bank Account,每个Bank Account会制定一个G/L Account。


(0) 评论    (0) 引用   

invoice和cash journal做clear

当我们利用TCODE FBCJ来记录cash journal的时候,如果是一笔客户的incoming payment,即时POST了,也无法与相匹配的invoice做clear。我们必须手动clear一次。过程如下。

首先FB70做一张invoice

FBCJ来记录一笔cash journal

最后F-32将Invoice和payment选中,进行clear


(0) 评论    (0) 引用   

ALV GRID中改变的值更新到ALV内表中

首先编辑ALV的CALLER_EXIT事件,在call back的subroutine中做如下处理
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = W_ALV_GRID.

最后调用 W_ALV_GRID->CHECK_CHANGED_DATA( ).

ALV GRID中编辑的值就可以更新到ALV内表中了


(0) 评论    (90) 引用