从本地文件到内部表和数据库表的数据

2020-08-15 08:59发布

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

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


大家好。 我正在处理此演示报告,其中有一个.txt格式的本地文件,其中包含销售订单标题数据。 我必须获取数据并稍后将其添加到内部表中,该数据应该在已经存在数据的ztable中进行更新。 我将我的代码附加到设法将数据从本地文件移动到内部表的位置。 并且需要帮助将相同的数据更新到ztable中。  ztable中的字段与我在structure中创建的字段相同。请做必要的工作。 谢谢。


 报告ztst1 LINE-SIZE 500。



 类型:ty_headr的开头,
           zzsdoc TYPE CHAR15," zordh_t-zzsdoc,
           zzdcat TYPE CHAR15," zordh_t-zzdcat,
           zzdtyp TYPE CHAR15,"-zzdtyp,
           zzsorg TYPE CHAR15,"-zzsorg,
           zzdist TYPE CHAR15," zordh_t-zzdist,
           zzdivi TYPE CHAR15," zordh_t-zzdivi,
           zzcust TYPE CHAR15," zordh_t-zzcust,
           zzcpur TYPE CHAR15," zordh_t-zzcpur,
           zzdcur TYPE CHAR15," zordh_t-zzdcur,
           zznamt TYPE CHAR15," zordh_t-zznamt,
           zzerdat TYPE CHAR15," zordh_t-zzerdat,
         ty_headr的结尾。

 类型:开始于ty_item,
           zzsdoc TYPE CHAR15," zordi_t-zzsdoc,
           zzsitm TYPE CHAR15," zordi_t-zzsitm,
           zzmatr TYPE CHAR15," zordi_t-zzmatr,
           zzmdes TYPE CHAR15," zordi_t-zzmdes,
           zzoqty TYPE CHAR15," zordi_t-zzoqty",
           zzunit TYPE CHAR15," zordi_t-zzunit,
           zznamt TYPE CHAR15," zordi_t-zznamt",
         ty_item结束。

 数据:ty_headr的gt_headr类型标准表,
        gt_item TYPE标准表ty_item,
        wt_headr TYPE ty_headr,
        wt_item TYPE ty_item,
        gt_file TYPE FILETABLE,
        gs_file TYPE FILE_TABLE,
        gv_rc类型i。


 参数:p_path类型字符串。

 跳过2。

 参数:r1单选按钮组grp1默认'X'用户命令actn,
              r2单选按钮组grp1。



 在p_path值请求的选择屏幕上。



 呼叫方法cl_gui_frontend_services => file_open_dialog
 *出口
 * window_title =
 * default_extension =
 * default_filename =
 * file_filter =
 * with_encoding =
 * initial_directory =
 *多选=
   改变
     file_table = gt_file
     rc = gv_rc
 * user_action =
 * file_encoding =
 *例外情况
 * file_open_dialog_failed = 1
 * cntl_error = 2
 * error_no_gui = 3
 * not_supported_by_gui = 4
 *其他= 5
         。
 如果sy-subrc <> 0。
 *在这里实施适当的错误处理

 其他。

 将表gt_file读入gs_file索引1。
 如果sy-subrc = 0。
 p_path = gs_file-文件名。
 万一。

 万一。


 选择开始。

 案例" X"。
   当r1。

 呼叫方法cl_gui_frontend_services => gui_upload
   出口
      文件名= p_path
      filetype ='DAT'" ASC
 * has_field_separator =空格
 * header_length = 0
 * read_by_line ='X'
 * dat_mode =空格
 *代码页=空格
 * ignore_cerr = ABAP_TRUE
 *替换='#'
 * virus_scan_profile =
 *重要
 *文件长度=
 *标头=
   改变
     data_tab = gt_headr
 * isscanperformed =空格
 *例外情况
 * file_open_error = 1
 * file_read_error = 2
 * no_batch = 3
 * gui_refuse_filetransfer = 4
 * invalid_type = 5
 * no_authority = 6
 *未知错误= 7
 * bad_data_format = 8
 * header_not_allowed = 9
 * spacer_not_allowed = 10
 * header_too_long = 11
 * unknown_dp_error = 12
 * access_denied = 13
 * dp_out_of_memory = 14
 * disk_full = 15
 * dp_timeout = 16
 * not_supported_by_gui = 17
 * error_no_gui = 18
 *其他= 19
         。
 如果sy-subrc <> 0。
 *在这里实施适当的错误处理
 万一。


 将gt_headr循环到wt_headr。

 写:/wt_headr-zzsdoc,wt_headr-zzdcat,wt_headr-zzdtyp,wt_headr-zzsorg,wt_headr-zzdist,wt_headr-zzdivi,wt_headr-zzcust,wt_headr-zzcpur,wt_headr-zzdcur,wt_headr-zznamt,wt。

 结局。

 当r2。
 通话功能'GUI_UPLOAD'
   出口
     文件名= p_path
   FILETYPE ='DAT'
 * HAS_FIELD_SEPARATOR =''
 * HEADER_LENGTH = 0
 * READ_BY_LINE ='X'
 * DAT_MODE =''
 * CODEPAGE =''
 * IGNORE_CERR = ABAP_TRUE
 *替换='#'
 * CHECK_BOM =''
 * VIRUS_SCAN_PROFILE =
 * NO_AUTH_CHECK =''
 *重要
 *文件长度=
 *标题=
   桌子
     data_tab = GT_ITEM
 *变化
 * ISSCANPERFORMED =''
 *例外情况
 * FILE_OPEN_ERROR = 1
 * FILE_READ_ERROR = 2
 * NO_BATCH = 3
 * GUI_REFUSE_FILETRANSFER = 4
 * INVALID_TYPE = 5
 * NO_AUTHORITY = 6
 * UNKNOWN_ERROR = 7
 * BAD_DATA_FORMAT = 8
 * HEADER_NOT_ALLOWED = 9
 * SEPARATOR_NOT_ALLOWED = 10
 * HEADER_TOO_LONG = 11
 * UNKNOWN_DP_ERROR = 12
 * ACCESS_DENIED = 13
 * DP_OUT_OF_MEMORY = 14
 * DISK_FULL = 15
 * DP_TIMEOUT = 16
 *其他= 17
           。
 如果sy-subrc <> 0。
 *在这里实施适当的错误处理
 万一。
 *
 *

 在gt_item INTO wt_item中循环。

 写:/wt_item-zzsdoc,wt_item-zzsitm,wt_item-zzmatr,wt_item-zzmdes,wt_item-zzoqty,wt_item-zzunit,wt_item-zznamt。

 结局。
 端盖。

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

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


大家好。 我正在处理此演示报告,其中有一个.txt格式的本地文件,其中包含销售订单标题数据。 我必须获取数据并稍后将其添加到内部表中,该数据应该在已经存在数据的ztable中进行更新。 我将我的代码附加到设法将数据从本地文件移动到内部表的位置。 并且需要帮助将相同的数据更新到ztable中。  ztable中的字段与我在structure中创建的字段相同。请做必要的工作。 谢谢。


 报告ztst1 LINE-SIZE 500。



 类型:ty_headr的开头,
           zzsdoc TYPE CHAR15," zordh_t-zzsdoc,
           zzdcat TYPE CHAR15," zordh_t-zzdcat,
           zzdtyp TYPE CHAR15,"-zzdtyp,
           zzsorg TYPE CHAR15,"-zzsorg,
           zzdist TYPE CHAR15," zordh_t-zzdist,
           zzdivi TYPE CHAR15," zordh_t-zzdivi,
           zzcust TYPE CHAR15," zordh_t-zzcust,
           zzcpur TYPE CHAR15," zordh_t-zzcpur,
           zzdcur TYPE CHAR15," zordh_t-zzdcur,
           zznamt TYPE CHAR15," zordh_t-zznamt,
           zzerdat TYPE CHAR15," zordh_t-zzerdat,
         ty_headr的结尾。

 类型:开始于ty_item,
           zzsdoc TYPE CHAR15," zordi_t-zzsdoc,
           zzsitm TYPE CHAR15," zordi_t-zzsitm,
           zzmatr TYPE CHAR15," zordi_t-zzmatr,
           zzmdes TYPE CHAR15," zordi_t-zzmdes,
           zzoqty TYPE CHAR15," zordi_t-zzoqty",
           zzunit TYPE CHAR15," zordi_t-zzunit,
           zznamt TYPE CHAR15," zordi_t-zznamt",
         ty_item结束。

 数据:ty_headr的gt_headr类型标准表,
        gt_item TYPE标准表ty_item,
        wt_headr TYPE ty_headr,
        wt_item TYPE ty_item,
        gt_file TYPE FILETABLE,
        gs_file TYPE FILE_TABLE,
        gv_rc类型i。


 参数:p_path类型字符串。

 跳过2。

 参数:r1单选按钮组grp1默认'X'用户命令actn,
              r2单选按钮组grp1。



 在p_path值请求的选择屏幕上。



 呼叫方法cl_gui_frontend_services => file_open_dialog
 *出口
 * window_title =
 * default_extension =
 * default_filename =
 * file_filter =
 * with_encoding =
 * initial_directory =
 *多选=
   改变
     file_table = gt_file
     rc = gv_rc
 * user_action =
 * file_encoding =
 *例外情况
 * file_open_dialog_failed = 1
 * cntl_error = 2
 * error_no_gui = 3
 * not_supported_by_gui = 4
 *其他= 5
         。
 如果sy-subrc <> 0。
 *在这里实施适当的错误处理

 其他。

 将表gt_file读入gs_file索引1。
 如果sy-subrc = 0。
 p_path = gs_file-文件名。
 万一。

 万一。


 选择开始。

 案例" X"。
   当r1。

 呼叫方法cl_gui_frontend_services => gui_upload
   出口
      文件名= p_path
      filetype ='DAT'" ASC
 * has_field_separator =空格
 * header_length = 0
 * read_by_line ='X'
 * dat_mode =空格
 *代码页=空格
 * ignore_cerr = ABAP_TRUE
 *替换='#'
 * virus_scan_profile =
 *重要
 *文件长度=
 *标头=
   改变
     data_tab = gt_headr
 * isscanperformed =空格
 *例外情况
 * file_open_error = 1
 * file_read_error = 2
 * no_batch = 3
 * gui_refuse_filetransfer = 4
 * invalid_type = 5
 * no_authority = 6
 *未知错误= 7
 * bad_data_format = 8
 * header_not_allowed = 9
 * spacer_not_allowed = 10
 * header_too_long = 11
 * unknown_dp_error = 12
 * access_denied = 13
 * dp_out_of_memory = 14
 * disk_full = 15
 * dp_timeout = 16
 * not_supported_by_gui = 17
 * error_no_gui = 18
 *其他= 19
         。
 如果sy-subrc <> 0。
 *在这里实施适当的错误处理
 万一。


 将gt_headr循环到wt_headr。

 写:/wt_headr-zzsdoc,wt_headr-zzdcat,wt_headr-zzdtyp,wt_headr-zzsorg,wt_headr-zzdist,wt_headr-zzdivi,wt_headr-zzcust,wt_headr-zzcpur,wt_headr-zzdcur,wt_headr-zznamt,wt。

 结局。

 当r2。
 通话功能'GUI_UPLOAD'
   出口
     文件名= p_path
   FILETYPE ='DAT'
 * HAS_FIELD_SEPARATOR =''
 * HEADER_LENGTH = 0
 * READ_BY_LINE ='X'
 * DAT_MODE =''
 * CODEPAGE =''
 * IGNORE_CERR = ABAP_TRUE
 *替换='#'
 * CHECK_BOM =''
 * VIRUS_SCAN_PROFILE =
 * NO_AUTH_CHECK =''
 *重要
 *文件长度=
 *标题=
   桌子
     data_tab = GT_ITEM
 *变化
 * ISSCANPERFORMED =''
 *例外情况
 * FILE_OPEN_ERROR = 1
 * FILE_READ_ERROR = 2
 * NO_BATCH = 3
 * GUI_REFUSE_FILETRANSFER = 4
 * INVALID_TYPE = 5
 * NO_AUTHORITY = 6
 * UNKNOWN_ERROR = 7
 * BAD_DATA_FORMAT = 8
 * HEADER_NOT_ALLOWED = 9
 * SEPARATOR_NOT_ALLOWED = 10
 * HEADER_TOO_LONG = 11
 * UNKNOWN_DP_ERROR = 12
 * ACCESS_DENIED = 13
 * DP_OUT_OF_MEMORY = 14
 * DISK_FULL = 15
 * DP_TIMEOUT = 16
 *其他= 17
           。
 如果sy-subrc <> 0。
 *在这里实施适当的错误处理
 万一。
 *
 *

 在gt_item INTO wt_item中循环。

 写:/wt_item-zzsdoc,wt_item-zzsitm,wt_item-zzmatr,wt_item-zzmdes,wt_item-zzoqty,wt_item-zzunit,wt_item-zznamt。

 结局。
 端盖。
付费偷看设置
发送
6条回答
浮生未央
1楼 · 2020-08-15 09:31.采纳回答

Karon,您的wt_header应该与Z_HEADER_TABLE类型兼容。

请参阅下文。

数据:wt_header1类型z_header_table


 在gt_headr循环到wt_header。

   将对应的wt_header移动到wt_header1。


   将值wt_header1插入z_header_table。
  
   检查sy-subrc是初始的。
  
   在gt_item循环到wt_item,其中zzdoc = wt_header-zzdoc。
      将z_detail_table中的值wt_item插入。
      如果sy-subrc = 0。
         提交工作。
      万一。
   结束循环。
  
 结束循环。
shere_lin
2楼-- · 2020-08-15 09:40

转移到与ZTABLE行兼容的内部表并将此内部表插入数据库表中会发生什么问题?

小熊yu生菜
3楼-- · 2020-08-15 09:42

这些行应该起作用。

将gt_headr中的
循环到wt_header中。
   将z_header_table值wt_header插入。
  
   检查sy-subrc是初始的。
  
   在gt_item循环到wt_item,其中zzdoc = wt_header-zzdoc。
      将z_detail_table中的值wt_item插入。
      如果sy-subrc = 0。
         提交工作。
      万一。
   结束循环。
  
 结束循环。
 
黑丝骑士
4楼-- · 2020-08-15 09:39

您可以为上述要求导出一个简单的示例代码还是请修改我的代码。 因为第一个对话将是内部标签中的标题数据。 我如何将数据移动到ztable。

空代码
5楼-- · 2020-08-15 09:25

您好 Karon Christydoss

"修改"和"插入"两个选项均已 已经提供了,您还有一个选择是update语句,通常这对于自定义表更新不是必需的,插入和修改应该可以工作。

更新ztable
 设置 = <值>其中<条件>。
 
我是小鹏鹏啊
6楼-- · 2020-08-15 09:23

Karon Christydoss ,您可以使用此方法。

第1步:定义一个selection-scree变量,以便在运行时确定文件中是否包含标题。

参数:p_head类型c默认为" X"。

第2步:在循环内添加此代码段,以绕过内部表处理的第一行。

在table_name处循环
    如果p_head = abap_true。
      检查sy-tabix gt 1。
    万一。
 结束循环。

一周热门 更多>