结算日期和截止日期应与T代码中的开票计划开始日期更新:VA42

2020-09-13 18:43发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我维护了结算计划的开始日期,并在excel文件中进行了联系。 我只能使用此上传文件来更新帐单计划的开始日期,但是在VA42中,结算日期和"截止日期"没有被修改为帐单计划的开始日期。

我使用了许多BAPI,但没有运气:(

文件:

合同否开票计划日期

052 *********** 2018042018

051 *********** 2018062018

源代码:

参数:p_fname1类型的本地文件。
表格:fpla。
数据:lv_posnr类型的vbap-posnr。
数据:ifplt发生的开始10。
包含结构fpltvb。
数据: ifplt的结尾。

**订单项目行的内部表
数据:itab_item_lines的开始OCCURS10。
包含结构av03r。
数据:itab_item_lines的结尾。
数据:alsmex_tabline初始大小为0的it_data类型表,
is_data alsmex_tabline初始类型。

类型:ty_excel的开始,
zzcontract类型zzc4c_contract," SAP-联系电话
afdat类型fkdat 计费索引和打印输出的计费日期
ty_excel的结束日期,
tt_e​​xcel ty_excel的类型表。

DATA:p_ifname TYPE rlgrap-文件名,
lv_count TYPE i,
lv_tabix TYPE sy -index。

"销售文档:抬头数据
类型:ty_vbak的开头,
vbeln TYPE vbeln_va,"销售文档
vbtyp TYPE vbtyp," SD文档类别
结束于 ty_vbak。

TYPES:ty_final的开始,
vbeln TYPE vbeln,"销售文档" ment
afdat类型fkdat,
ty_final结束。

**表和工作区声明
数据:lt_vbak类型ty_vbak类型表,
gs_vbak类型ty_vbak类型,
lt_final类型 ty_final表,
ls_final类型ty_final。

*如果输入文件名不是初始的。
在p_fname1的值请求上选择屏幕。

调用函数'F4_FILENAME '
*导出
*程序名称= SYST-CPROG
* DYNPRO_NUMBER = SYST-DYNNR
* FIELD_NAME =''
导入
文件名= p_fname1。


-OF-SELECTION。
p_ifname = p_fname1。

如果不是p_ifname是INITIAL。
*将EXCEL数据上传到内部表中
CALL FUNCTION'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
文件名 = p_ifname
i_begin_col ='1'
i_begin_row ='1'
i_end_col ='20'
i_end_row ='100000'
表格
实习生= it_data
例外情况
>不一致的参数= 1
upload_ole = 2
其他=3。
如果sy-subrc <>0。
消息ID sy-msgid类型sy-msgty NUMBER sy -msgno
与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
ENDIF。
ENDIF。

*如果没有it_data,则将EXCEL数据附加到内部表
中 INITIAL。
遍历it_data INTO is_data。
如果is_data行NE'0001'。
在新行。
清除ls_final。
ENDAT。
案例is_data-col。< br>何时'001'。
将is_data-value移至ls_final-vbeln。
何时'002'。
MOVE _is_data-value移至ls_final-afdat。
结束。
结束于
APPEND ls_final至lt_final。
ENDAT。
ENDIF。
CLEAR:is_data。
ENDLOOP。
ENDIF。

**检查合同编号是否为
IF lt_final不是INITIAL时。
SORT lt_final BY vbeln。
**选择VBAK
SELECT vbeln"合同编号
vbtyp
从vbak
插入表lt_vbak
中lt_final
中的所有条目vbeln = lt_final-vbeln
并且vbtyp ='G'。
ENDIF。

**排除 如果不存在,则收缩。
在lt_final上循环到ls_final。
lv_tabix = sy -tabix。
调用功能'CONVERSION_EXIT_ALPHA_INPUT'
导出
输入= ls_final-vbeln
导入
输出= ls_final-vbeln。


用键vbeln = ls_final读取表lt_vbak -vbeln
传输任何字段。
如果sy-subrc NE0。
删除lt_final索引lv_tabix。
ENDIF。
ENDLOOP。



**已声明的工作区 帐单计划表
DATA:ls_zfpla_old LIKE fplavb,
ls_zfpla2_new LIKE fplavb,
ls_zfplt_old LIKE fpltvb,
ls_zfplt2_new LIKE fpltvb,
ls_ifpltp 。 lt_zfpla_old fplavb的类型表,
lt_zfpla2_new fplavb的类型表,
lt_zfplt_old fpltvb的类型表,
lt_zfplt2_new fpltvb的类型表,

_b,

> vbeln TYPE vbeln,
posnr TYPE posnr,
fplnr TYPE fplnr,​​
ty_vbkd的结尾,

ty_fpla的开始,
fplnr TYPE fplnr的类型,
bedat TYPE bedat_fp,
endat TYPE endat_fp,
vbeln TYPE vbeln,
ty_fpla的结尾。

DATA:ls_vbkd TYPE ty_vbkd,
ty_vbkd的lt_vbkd类型表,
ty_vbkd的lt_vbkd_item类型表,
ls_fpla ty_fpla类型表,
lt_fpla ty_fpla类型表。

K * D * B *要获得标头级别的计费方案,请按
如果lt_final不是初始的。
从vbkd
中选择vbeln
posnr
fplnr
进入表lt_vbkd
中的所有条目 lt_final
在哪里vbeln均衡器lt_final-vbeln
和posnr均衡器空间。
ENDIF。

***选择FPLA
*要获取基于VBKD
的开票凭证编号 如果lt_vbkd不初始。
从fpla 选择fplnr
bedat
endat
vbeln
到表lt_fpla
lt_vbkd
中的所有条目Vbeln EQ lt_vbkd- vbeln
和fplnr EQ lt_vbkd-fplnr。
ENDIF。

将lt_fpla循环到ls_fpla。
*读取文档,创建X表。
调用功能'SD_SALES_DOCUMENT_READ'
>导出
document_number = ls_fpla-vbeln
例外情况
error_message = 01.
如果sy-subrc NE0。
*执行message_100使用vbeln。
E XIT。
ENDIF。

*获取文档的所有项目行
通话功能'SD_SALES_ITEM_LIST_READ'
表格
eivbap = itab_item_lines
例外情况
其他= 1. < br> IF sy-subrc NE0。
*使用vbeln.PERFORM消息_100。
EXIT。
ENDIF。
*在项目行循环并更改计费计划。
在itab_item_lines处循环。
> *检查itab_item_lines-posnr在posnr中。
*读取实际项目行的开票计划表头
清除:fpla,ifplt。 刷新ifplt。
调用功能'SD_SALES_BILLINGPLAN_READ'
导出
i_vbeln = ls_fpla-vbeln
i_posnr = itab_item_lines-posnr
导入
e_fpla = fpla
表格
ifplt
例外情况
no_billingplan_allowed = 1
no_billingplan_found = 2
其他=3。
IF sy-subrc <> 0.
*在此处实施适当的错误处理
ENDIF。< br> ENDLOOP。
CLEAR:itab_item_lines。
刷新:itab_item_lines。

*如果ls_fpla-fplnr不是初始的,请阅读结算计划

呼叫功能'BILLING_SCHEDULE_READ'
>导出
fplnr = ls_fpla-fplnr
** i_vfkdat = ls_final-afdat" ls_fpla-bedat
** i_bfkdat = ls_fpla-endat
表格
zfpla = lt_zfpla_ing计划"内部
zfplt = lt_zfplt_old。 "来自计费计划的日期的内部表
ENDIF。

将ifplt放入ls_ifplt中。
读取表lt_zfplt_old ASSIGNING FIELD-SYMBOL(
带键taxk9 =''。
IF sy-subrc EQ0。
-fkdat = ls_ifplt-fkdat。""至今date
-nfdat = ls_ifplt-nfdat。"结算日期
taxk9 ='X'。
ENDIF。
ENDLOOP。
UNASSIGN
*将旧的计费方案内部表传递到新的内部表以进行更新。
lt_zfplt2_new [] = lt_zfplt_old []。
lt_zfpla2_new [] = lt_zfpla_old []。

****要从excel文件传递开票日期
读取表lt_final到ls_final
中,带键vbeln = ls_fpla-vbeln
IF sy-subrc EQ0。
用键fplnr = ls_fpla-fplnr读取表lt_zfpla2_new ASSIGNING FIELD-SYMBOL()。
IF sy-subrc EQ 0。 > -bedat = ls_final-afdat。"结算日期
-updkz ='U'。 "->更新
循环到lt_zfplt2_new INTO ls_zfplt2_new哪里fplnr EQ ls_fpla-fplnr。
ls_zfplt2_new-updkz ='U'。"-> UPDATE
如果ls_zfpkz <2> 从ls_zfplt2_new修改lt_zfplt2_new。
清除:ls_zfplt2_new。
ENDIF。
ENDLOOP。
ENDIF。
ENDIF。
UNASSIGN zfpla2_new>。


*如果lt_zfpla2_new不是INITIAL,则更新开票计划明细(开票日期)

呼叫功能'BILLING_SCHEDULE_SAVE'"更新任务
表格
fpla_new = lt_zfpla2_new"->新
fpla_old = lt_zfpla_old
fplt_new = lt_zfplt2_new"-> NEW
fplt_old = lt_zfplt_old。
ENDIF。

IF sy-subrc EQ0。
调用函数'BAPI_TRANSACTION_PORTIT'

wait =''。"'X'。
ENDIF。

CLEAR:ls_vbkd,
ls_fpla。

刷新lt_zfplt2_new []。
刷新lt_zfplt_old [ ]。
刷新lt_zfpla_old []。
刷新lt_zfpla2_new []。
ENDLOOP。

描述表lt_fpla行lv_count。
WRITE:/'成功更新 ed records:',lv_count。

付费偷看设置
发送
1条回答
SAP浪
1楼-- · 2020-09-13 19:18

任何人请对此查询提供帮助。

一周热门 更多>