通过SQL ABAP的Decimla值,参数,更新和报告

2020-09-09 11:53发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)由于我无法开始聊天并寻求支持,我...

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

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


由于我无法开始聊天并寻求支持,我将在下面添加所有注释的代码并解释问题:

  picture5.jpg  picture4.jpgpicture3.jpgpicture2.jpgpicture1.jpg"以下所有代码-评论和说明都带有标记"
 ZCL_SHOPPING_CART155全局类代码:
 ZCL_SHOPPING_CART155类的定义
   上市
   最后
   创造公众。
 公共部分。
 类型:y_cart的开始,
   产品类型zproduct_155-产品,
   description TYPE zproduct_text155-description,
   数量类型zcart_155-quantity,
 成本类型zcart_155-cost,
 totalprice类型zcart_155-totalprice,
   y_cart的END,
   yt_cart带密钥产品的yt_cart类型标准表。
 方法:
 构造函数IMPORTING ip_customer TYPE scustom-id,
 add_product导入ip_product TYPE zproduct_155-product
  ip_quantity TYPE zcart_155-quantity可选
   ip_cost TYPE zcart_155-cost可选,
  remove_product导入ip_product
   TYPE zproduct_155-产品,
 clear_cart,
 get_cart返回值(rt_cart)类型yt_cart。
 受保护的部分。
 私人部分。
 DATA d_customer TYPE的客户ID。
 ENDCLASS。
 ZCL_SHOPPING_CART155类实现。

 * <签名> ----------------------------------------------  ----------------------------------------- +
 * | 实例公共方法ZCL_SHOPPING_CART155-> ADD_PRODUCT
 * + ------------------------------------------------  ------------------------------------------------- +
 * |  [--->] IP_PRODUCT TYPE ZPRODUCT_155-PRODUCT
 * |  [--->] IP_QUANTITY TYPE ZCART_155-QUANTITY(可选)
 * |  [--->] IP_COST类型ZCART_155-COST(可选)
 * + ------------------------------------------------  -------------------------------------- 
      方法add_product。
 数据lv_num类型p DECIMALS 2值'0.90'。
 数据:ls_cart类型zcart_155。
       ls_cart-customer = d_customer。
       ls_cart-product = ip_product。
       如果ip_quantity不是初始的。
         ls_cart-quantity = ip_quantity。
         其他。
           ls_cart-quantity = 1。
           万一。
 "在这里,我的想法是还要在表ZCART中填写2个字段:
 总价应填写:
 如果zproduct_155价格> = 100 ls_cart总价格= 0.9 * zproduct_155价格
 其他ls_cart-totalprice = zproduct_155-price
 费用应填写:
 ls_cart-cost = ls_cart-totalprice * ls_cart-quantity
 由于任何尝试而产生的结果均未产生与引用和使用参数有关的错误,或者
 系统未显示错误消息,但字段总价为空。"
 从ls_cart修改zcart_155。
       终结法。

 * <签名> ----------------------------------------------  ----------------------------------------- +
 * | 实例公共方法ZCL_SHOPPING_CART155-> CLEAR_CART
 * + ------------------------------------------------  ------------------------------------------------- +
 * + ------------------------------------------------  -------------------------------------- 
 方法clear_cart。
       从zcart_155处删除,客户= d_customer。
        终结法。

 * <签名> ----------------------------------------------  ----------------------------------------- +
 * | 实例公共方法ZCL_SHOPPING_CART155-> CONSTRUCTOR
 * + ------------------------------------------------  ------------------------------------------------- +
 * |  [--->] IP_CUSTOMER TYPE SCUSTOM-ID
 * + ------------------------------------------------  -------------------------------------- 
   METHOD构造函数。
     d_customer = ip_customer。
     终结法。

 * <签名> ----------------------------------------------  ----------------------------------------- +
 * | 实例公共方法ZCL_SHOPPING_CART155-> GET_CART
 * + ------------------------------------------------  ------------------------------------------------- +
 * |  [<-()] RT_CART类型YT_CART
 * + ------------------------------------------------  -------------------------------------- 
 方法get_cart。
 数据lv_num TYPE p十进制数2。
 lv_num ='0.9'。

   "使用新EWPEN SQL
  SELECT zcart_155〜产品,描述,数量,价格,


 当价格> = 100时,然后强制转换(价格为dec)* @lv_num否则强制强制转换(价格为dec)
 来自zcart_155
 内联接zproduct_155
 开启zcart_155〜product = zproduct_155〜product
          内联接zproduct_text155
          开启zcart_155〜product = zproduct_text155〜product
          在哪里zproduct_text155〜language = @ sy-langu
          AND zcart_155〜customer = @d_customer
          进入表@rt_cart。


 在rt_cart分配字段符号()处循环播放。
   -成本= -数量* -总价格。
 结局。


 "在这里,我们已经以某种方式实现了我们希望在add_product下执行的操作,但这只是显示而没有真正填充表zcart中的数据。
 LOOP有时会提供结果,有时则不会(由于某种延迟),并且get cart不能正确显示数据,如果
 我尝试更改最后2列的顺序。
 如果我们可以通过add_product添加2个字段,我认为我们可以排除循环并使用普通
 在这种情况下,请选择无条件时将适当的值存储在zcart中。"

           方法。



 * <签名> ----------------------------------------------  ----------------------------------------- +
 * | 实例公共方法ZCL_SHOPPING_CART155-> REMOVE_PRODUCT
 * + ------------------------------------------------  ------------------------------------------------- +
 * |  [--->] IP_PRODUCT TYPE ZPRODUCT_155-PRODUCT
 * + ------------------------------------------------  -------------------------------------- 
 方法remove_product。
       数据:ls_cart类型zcart_155。
       ls_cart-customer = d_customer。
       ls_cart-product = ip_product。
       从ls_cart删除zcart_155。
       终结法。
 ENDCLASS。


 ZCart_155代码:
 报告zcart_maint155。
 块车的选择画面开始
   使用FRAME TITLE text-001。
 参数:p_cust TYPE zcart_155-customer OBLIGATORY,
            p_prod TYPE zcart_155-产品,
            p_qty类型zcart_155-quantity。
 选择屏幕结束的购物车。




 选择屏幕开始动作
   带有FRAME TITLE文字002。
 参数:p_view TYPE布尔RADIOBUTTON GROUP行为,
            p_add TYPE布尔型RADIOBUTTON GROUP行为,
            p_rem TYPE布尔RADIOBUTTON GROUP行为,
            p_clear TYPE布尔型RADIOBUTTON GROUP动作。
 选择屏幕结束块动作。


 数据:o_cart类型参考zcl_shopping_cart155。
 创建对象o_cart导出ip_customer = p_cust。
 如果p_view = abap_true。
 数据(t_cart)=
 o_cart-> get_cart()。
 写:'查看'。
   cl_salv_table =>工厂(
   导入r_salv_table = DATA(gr_alv)
     更改t_table = t_cart)。
   gr_alv-> display()。
   elseif p_add = abap_true。
     o_cart-> add_product(ip_product = p_prod ip_quantity = p_qty)。
     写:"产品添加"。
     ELSEIF p_rem = abap_true。
       o_cart-> remove_product(p_prod)。
       写:"产品已删除"。
       ELSEIF p_clear = abap_true。
         o_cart-> clear_cart()。
         写:"清除购物车"。
 万一。
 购物车界面:
 " 图片1
 对于此显示,由于成本=数量*折扣,我希望更改最后2列的顺序。"
 ZProduct_155代码:
 报告ZPRODUCT_MAINT155。




 选择画面开始块产品
   使用FRAME TITLE text-001。
 参数:p_prod TYPE zproduct_155-product,
             p_desc TYPE zproduct_text155-description小写,
             p_price TYPE zproduct_155-price,
             p_curr TYPE zproduct_155-currency,
             p_uom TYPE zproduct_155-uom。


 选择屏幕结束的产品。


 数据:s_product TYPE zproduct_155,
       s_product_text类型为zproduct_text155。
 s_product_text-product = p_prod。
 s_product-price = p_price。
 s_product-currency = p_curr。
 s_product-uom = p_uom。
 s_product_text-language = sy-langu。
 s_product_text-description = p_desc。

 选择屏幕开始动作
   带有FRAME TITLE文字002。
 参数:p_upd TYPE布尔RADIOBUTTON GROUP行为,
             p_rem TYPE布尔RADIOBUTTON GROUP行为,
             p_dis TYPE布尔型RADIOBUTTON GROUP行为。
 选择屏幕结束块动作。
 如果p_upd = abap_true。
 从s_product插入zproduct_155。
 从s_product_text插入zproduct_text155。
 从s_product修改zproduct_155。
  从s_product_text修改zproduct_text155。
   写:'Update Completed'(003)。
   ELSEIF p_rem = abap_true。
     从zproduct_text155删除,其中product = p_prod。
     从s_product删除zproduct_155。
     写:"删除已完成"(004)。
     ELSEIF p_dis = abap_true。
       类型:开始于y_products,
         产品类型zproduct_155-产品,
         description TYPE zproduct_text155-description,
         价格类型zproduct_155-价格,
         货币类型zproduct_155-currency,
         uom TYPE zproduct_155-uom,
         y个产品的结尾。
      数据:y产品的t_products类型标准表。
       SELECT zproduct_155〜产品,说明,价格,货币,单位
         进入表@t_products
         来自zproduct_155
         内联接zproduct_text155
         开启zproduct_155〜product = zproduct_text155〜product
         语言= @ sy-langu。


         cl_salv_Table =>工厂(
 导入r_salv_table = DATA(gr_alv)
 更改t_table = t_products)。
 Gr_alv-> display()。
       万一。
 "产品界面:
  图片2
 zCart_155表格:
  图片3
 在某种程度上,数量是在餐桌产品中引用uom的数量,但找不到从餐桌产品中将总价格引用为价格的方法。
 ZProduct_155表格:
  图片4
 Zproduct_Text155表:
  图片5"

 "下一步是实施一些报告(经典,交互式,ALV)。
 我通过快速查看器做了一些操作,但不确定在哪里实施
 用户界面以及我仅对一张表进行操作,因为在尝试对表zcart进行操作时遇到了很多错误。
 最好的办法是做一些事情(产品,价格,数量,成本,折扣)作为
 已在get_cart中,但是单击产品以显示表中的新列描述时
 picture1.jpgzproduct_text155。"


 
picture1.jpg (26.5 kB)