每个客户号能否仅使一行交易数据成为可能

2020-09-14 06:42发布

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

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


如何仅对每个客户进行一次交易? 例如,我的内部表需要显示客户的第一笔订单和第二笔订单的日期。 所以我的内部表详细信息是这样的:

但是我的动态Alv的结果是这样的:

例如在客户编号中 " 0001011111"行。 是否可以像这样将其排成一行:

客户编号 1stOrder LITERS1 2ndOrder LITERS2
 0001011111 20180811 11 20180814 6 

我的代码是这样的:

  DATA:new_table TYPE REF TO数据,
           new_line TYPE REF TO数据,
           alv_layout TYPE lvc_s_layo,
           alv类型参考cl_gui_alv_grid。
     FIELD-SYMBOLS: TYPE表,
                     TYPE任意,
                     TYPE任意。
     调用方法cl_alv_table_create => create_dynamic_table
       出口
         it_fieldcatalog = it_fieldcat
       输入
         ep_table = new_table。
     ASSIGN new_table-> * TO 。
     创建数据new_line像的行。
     ASSIGN new_line-> * TO 。
     对it_main2进行排序(按kunnr)。
     DATA(cpy_it_main)= it_main2。
     DATA(replicate_it_main)= it_main2。
     通过kunnr erdat1 vbeln排序SORTplicate_it_main。
     从copy_it_main COMPARING kunnr中删除相邻的重复项。
     SORT cpy_it_main由kunnr vbeln提供。
     从cpy_it_main比较vbeln中删除相邻的重复项。
     循环AT copy_it_main INTO DATA(wa_replicate)。
       dateflag = wa_replicate-erdat1。
       DATA(cust)= wa_replicate-kunnr。
       DATA(x)= 0。
       DATA(y)= 0。
       在it_main2处进入wa_main2,在其中kunnr = cust。
         做2次。
           dateflag2 = wa_main2-erdat1。
         ENDDO。
         将结构的组件" KUNNR"分配给 = wa_main2-kunnr。
         将结构的组件'NAME1'分配到 = wa_main2-name1。
         将结构的组件"文本"分配给 = wa_main2-ktext。
         将结构的组件"月"分配给 = wa_main2个月。
         将结构的组件'CGRP2'分配到 = wa_main2-cgrp2。
         如果dateflag = dateflag2。
           将结构的组件'ERDAT1'分配到 = wa_main2-erdat1。
           将结构的组件"品牌1"分配给 = wa_main2-brand1。
           将结构的组件" LITER1"分配给 = wa_main2-liter1。
           将结构的组件'VOLUM1A'分配给 = wa_main2-volum1a。
           将结构的组件'VOLUM2A'分配给 = wa_main2-volum2a。
           将结构的组件'VOLUM3A'分配到 = wa_main2-volum3a。
           x = 1。
         其他。
           将结构的组件'ERDAT2'分配到 = wa_main2-erdat1。
           将结构的组件"品牌2"分配给 = wa_main2-brand1。
           将结构的组件" LITER2"分配给 = wa_main2-liter1。
           将结构的组件'VOLUM1B'分配到 = wa_main2-volum1a。
           将结构的组件'VOLUM2B'分配到 = wa_main2-volum2a。
           将结构的组件'VOLUM3B'分配到 = wa_main2-volum3a。
           y = 1。
         万一。
         dateflag3 = wa_main2-erdat。
           插入到表中。
           清除:,wa_main2。
       ENDLOOP。

1st.jpg (133.4 kB)

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

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


如何仅对每个客户进行一次交易? 例如,我的内部表需要显示客户的第一笔订单和第二笔订单的日期。 所以我的内部表详细信息是这样的:

但是我的动态Alv的结果是这样的:

例如在客户编号中 " 0001011111"行。 是否可以像这样将其排成一行:

客户编号 1stOrder LITERS1 2ndOrder LITERS2
 0001011111 20180811 11 20180814 6 

我的代码是这样的:

  DATA:new_table TYPE REF TO数据,
           new_line TYPE REF TO数据,
           alv_layout TYPE lvc_s_layo,
           alv类型参考cl_gui_alv_grid。
     FIELD-SYMBOLS: TYPE表,
                     TYPE任意,
                     TYPE任意。
     调用方法cl_alv_table_create => create_dynamic_table
       出口
         it_fieldcatalog = it_fieldcat
       输入
         ep_table = new_table。
     ASSIGN new_table-> * TO 。
     创建数据new_line像的行。
     ASSIGN new_line-> * TO 。
     对it_main2进行排序(按kunnr)。
     DATA(cpy_it_main)= it_main2。
     DATA(replicate_it_main)= it_main2。
     通过kunnr erdat1 vbeln排序SORTplicate_it_main。
     从copy_it_main COMPARING kunnr中删除相邻的重复项。
     SORT cpy_it_main由kunnr vbeln提供。
     从cpy_it_main比较vbeln中删除相邻的重复项。
     循环AT copy_it_main INTO DATA(wa_replicate)。
       dateflag = wa_replicate-erdat1。
       DATA(cust)= wa_replicate-kunnr。
       DATA(x)= 0。
       DATA(y)= 0。
       在it_main2处进入wa_main2,在其中kunnr = cust。
         做2次。
           dateflag2 = wa_main2-erdat1。
         ENDDO。
         将结构的组件" KUNNR"分配给 = wa_main2-kunnr。
         将结构的组件'NAME1'分配到 = wa_main2-name1。
         将结构的组件"文本"分配给 = wa_main2-ktext。
         将结构的组件"月"分配给 = wa_main2个月。
         将结构的组件'CGRP2'分配到 = wa_main2-cgrp2。
         如果dateflag = dateflag2。
           将结构的组件'ERDAT1'分配到 = wa_main2-erdat1。
           将结构的组件"品牌1"分配给 = wa_main2-brand1。
           将结构的组件" LITER1"分配给 = wa_main2-liter1。
           将结构的组件'VOLUM1A'分配给 = wa_main2-volum1a。
           将结构的组件'VOLUM2A'分配给 = wa_main2-volum2a。
           将结构的组件'VOLUM3A'分配到 = wa_main2-volum3a。
           x = 1。
         其他。
           将结构的组件'ERDAT2'分配到 = wa_main2-erdat1。
           将结构的组件"品牌2"分配给 = wa_main2-brand1。
           将结构的组件" LITER2"分配给 = wa_main2-liter1。
           将结构的组件'VOLUM1B'分配到 = wa_main2-volum1a。
           将结构的组件'VOLUM2B'分配到 = wa_main2-volum2a。
           将结构的组件'VOLUM3B'分配到 = wa_main2-volum3a。
           y = 1。
         万一。
         dateflag3 = wa_main2-erdat。
           插入到表中。
           清除:,wa_main2。
       ENDLOOP。

1st.jpg (133.4 kB)
付费偷看设置
发送
4条回答
haha101010
1楼-- · 2020-09-14 07:23

简短的回答是"您需要相应地编写程序"。

例如,屏幕截图显示了针对客户.... 11的2条记录(顶部2行)。 一个具有"第一订单日期" = 20180811,第二个具有空白日期。 然后,您说"哦,我只想要一行",并向我们显示"第一订单日期" = 20180811的一行。那么,您是如何决定的呢? 您有2条不同的记录,并根据某些原则(未与我们共享)决定了如何将它们组合为一条记录。

在LITER1字段中,事情变得更加有趣。 屏幕截图的顶部显示11和6。然后6消失了,"所需行"显示11。您是如何得出这个结果的?

因此,您要做的就是使用您刚刚应用的任何逻辑编写程序。

当学会了学习
2楼-- · 2020-09-14 07:27

从OP对问题的第二次尝试中删除了数据,现在已将其删除:

详细表

 客户订单日期价格matGrp
   1 01/01/18 100 001
   1 01/01/18 50 002
   18年2月2日50 003
   2 01/11/18 25 002
   2 02/22/18 500 002
 

输出表应该是这样的。

 客户一阶价格matGrp二阶价格matGrp
    1 01/01/18 100 001 02/02/18 25 003
    1 01/01/18 50 002
    2 01/11/18 25 002 02/22/18 50 002
 

例如,详细表中的1号客户有3笔交易。 在输出表的第一行中是客户1,然后第一行的第二列是明细表中客户的第一笔订单日期,即" 01/01/18",以及该日期的价格和价格。 并且在第二订单日期列中是明细表中客户的第二订单日期,即" 02/02/18",第二订单的价格和价格也如下。 下一行将仍然是客户1,因为他还有另一笔交易发生在第一个订单日期,因此价格和matGrp如下。 但是由于她已经没有第二阶了,所以它只能是空白。 第三行是客户编号。 2,其第一笔订单将成为明细表中交易的第一笔订单,然后第二笔订单也将是明细表中客户2的第二笔订单。

关于如何从明细表中获取输出表,您有任何示例逻辑吗?

wang628962
3楼-- · 2020-09-14 07:26

嗨,

尝试这种逻辑。

类型:ty_tab的开始,
kunnr TYPE kna1-kunnr,
date1 TYPE sy-datum,
date2 TYPE sy-datum,
ty_tab的结尾。
数据:itab TYPE ty_Tab表,
类似于itab的行,
lv_cycle类型i。

字段符号: itab的行,
itab的行。 br>
选择开始。
做2次。
wa-kunnr ='1'。

如果sy-index ='2'。
wa-date2 = sy-datum。
ELSE。
wa-date1 = sy-datum。
ENDIF。
将wa附加到itab。
CLEAR wa。
ENDDO。


>在itab分配上循环
在NEW KUNNR。
清除lv_cycle。
ENDAT。
如果lv_cycle ='1',则将1加到lv_cycle。

> ASSIGN
ELSE。
-date2 = -date2。
UNASSIGN
删除itab索引sy-tabix。
ENDIF。

ENDLOOP。

希望对您有所帮助,

此致

Venkat。

半个程序猿
4楼-- · 2020-09-14 07:28

我的答案不解释如何做吗? 是否有不清楚的特定项目? 还是只希望有人为您编写整个代码? 我很困惑...

一周热门 更多>