SAP_SD模块-销售订单创建价格扩大10倍问题分析及后续订单价格批量更新问题处理

一、业务背景

        我们公司的销售订单,是通过第三方销售管理平台创建好订单后,把表头和行项目数据,定时推送到SAP;SAP通过自定义表ZZT_ORDER_HEAD存放订单表头数据,通过ZZT_ORDER_DETAIL存放行项目数据;然后再用自定义的后台作业,定时调用创建销售订单的程序,从这两个自定义表中获取对应的数据来创建销售订单。

起因是财务同事发现10月份销售管理平台的订单金额与SAP的订单金额核对不上,经过对比分析发现,SAP有部分订单的单价扩大了10倍~~!!

二、问题分析

        通过把数据复刻到测试环境,多次调试创建销售订单的程序后发现,只要销售订单行项目的货币为空,那么金额就会扩大10倍,如下图所示~~

销售订单创建的BAPI为:BAPI_SALESORDER_CREATEFROMDAT2
- CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'EXPORTINGSALESDOCUMENTIN      =ORDER_HEADER_IN      = LS_ORDER_HEADER_INORDER_HEADER_INX     = LS_ORDER_HEADER_INXSENDER               =BINARY_RELATIONSHIPTYPE       =INT_NUMBER_ASSIGNMENT         =BEHAVE_WHEN_ERROR    =LOGIC_SWITCH         =TESTRUN              =CONVERT              = ' 'IMPORTINGSALESDOCUMENT        = LS_ORDERH_LOG-VBELNTABLESRETURN               = LT_RETURNORDER_ITEMS_IN       = LT_ORDER_ITEMS_INORDER_ITEMS_INX      = LT_ORDER_ITEMS_INXORDER_PARTNERS       = LT_ORDER_PARTNERSORDER_SCHEDULES_IN   = LT_ORDER_SCHEDULES_INORDER_SCHEDULES_INX  = LT_ORDER_SCHEDULES_INXORDER_CONDITIONS_IN  = LT_ORDER_CONDITIONS_INORDER_CONDITIONS_INX = LT_ORDER_CONDITIONS_INX.

三、问题处理

问题源头找到后,剩下的就是如何批量更新这批销售订单的价格了。这里有两个方法,各有优劣;

方法1:通过VK11,维护对应的定价条件;然后使用VA05,批量更新销售订单的价格;

优势:不需要开发,标准功能即可完成销售订单价格更新;

劣势:维护了一批原本不应该维护的价格主数据,后续通过自开发程序,用同样的物料+客户等数据创建销售订单时,会出现两个相同的条件类型(一个是系统自动带出来,一个是程序赋值进去的,也可以理解为就是手工维护的价格);虽然这种销售订单只有自己维护的条件类型生效,但是看上去不太好看,另外,如果创建订单的程序,忘记对价格赋值时,正常应该是有不完整日志,但是现在因为维护了价格主数据,那么就会带出来(实际上每次的价格不一定一样)

方法2:通过LSMW录屏,批量更新销售订单价格(我这里操作失败了,不知道哪里出问题了,也懒得去研究折腾了,所以这里就不记录了)

方法3:通过自开发程序,批量更新销售订单价格主数据;

优势:方便快捷,直接更新

劣势:需要开发,测试,花了不少时间,而且在开发调用订单修改BAPI的过程中,会有几个坑,下面会记录

1、通过系统标准功能处理

(1)VK11:维护对应的价格主数据

(2)修改原来订单的定价定价日期

注意原订单的定价日期,一定要在VK11维护的价格主数据的有效期范围内;

A、VK12修改价格主数据的有效期,把有效期提前

B、批量修改销售订单的定价日期(MASS-BUS2032-修改VBAP字段-MASSSDHEAD_S-PRSDT)

这里为了方便,我把价格主数据的有效期,提前到2024/10/23

(3)VA05:批量更新订单价格

全选后,点击抬头的编辑-批量更改-新定价

PS:附加测试,如果价格主数据的有效期没改(还是2024/10/25),而订单的定价日期是2024/10/23,不在价格有效期范围内;那么执行:B--执行新的定价时,价格会变成0

执行后,含税单价变为0;

(4)本方案的劣势数据记录;

记录VK11维护价格主数据后,重新调用订单创建函数,生成的订单

2、通过自开发批量更新订单价格的程序

(1)程序操作执行演示

PS:这里需要注意,一定要确认,先把销售订单的发票取消,再去调用程序更改价格,否则就会出现问题,如下图所示:订单价格是459,但是不含税价格竟然是4061.95(未修改前的价格)

(2)程序开发及使用的一些注意事项;

A、该程序除了批量更改订单行项目价格外,还可以批量关闭订单(维护拒绝原因)

B、更新销售订单价格,不需要取消交货过帐,但是需要取消发票(通过前台操作也可以知道,开票情况下是无法修改订单价格的)

C、使用的BAPI为:“BAPI_SALESORDER_CHANGE”

D、只有导入模板同时填写了单价和价格单位,并且销售订单存在条件类型ZC01时,才会执行更新函数(如果单价和价格单位都不维护,那么不更新,也不考虑插入条件类型ZC01)

E、如果lt_conditions_inx-cond_st_no 和lt_conditions_inx-cond_count不赋实际的值,而是赋值‘X’,那么销售订单行项目,是会插入一个ZC01,而不是更新原来的ZC01!!!

四、总结

1、通过BAPI创建销售订单时,如果发现订单价格扩大十倍,可以查看函数赋值时,是否没有把货币码赋值进去;

2、VA05批量更新销售订单价格时,需要注意三个地方;

(1)提前用VK11维护好价格主数据,并且确保销售订单的定价条件在价格主数据的有效期范围内

(2)选择B-执行新的定价;

3、在修改销售订单价格之前,需要确保先用VF11取消了发票;

以上,本次记录完成~~

完整代码如下;

*&---------------------------------------------------------------------*
*& Report ZSDR0012
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsdr0012.
TABLES sscrfields.DATA gv_grid TYPE REF TO cl_gui_alv_grid.DATA: BEGIN OF gs_alv,vbeln  TYPE vbap-vbeln,posnr  TYPE vbap-posnr,abgru  TYPE vbap-abgru,"拒绝原因kbetr  TYPE konv-kbetr,"订单行项目价格kpein  TYPE konv-kpein,"价格单位icon   TYPE icon_d,msg    TYPE string,sel(1),END OF gs_alv,gt_alv LIKE TABLE OF gs_alv.DATA: gs_layout   TYPE lvc_s_layo,gs_fieldcat TYPE lvc_s_fcat,gt_fieldcat TYPE lvc_t_fcat.DATA: gv_error TYPE c.DEFINE set_fieldcat.CLEAR gs_fieldcat.gs_fieldcat-fieldname = &1.gs_fieldcat-scrtext_l = &2.gs_fieldcat-no_zero   = &3.APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.SELECTION-SCREEN FUNCTION KEY 1.
PARAMETERS:p_file TYPE rlgrap-filename.AT SELECTION-SCREEN.CASE sscrfields-ucomm.WHEN 'FC01'.PERFORM frm_down_temp.WHEN OTHERS.IF p_file IS INITIAL.MESSAGE '请输入导入数据文件' TYPE 'E'.ENDIF.ENDCASE.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file .CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGdef_filename     = ''def_path         = ''mask             = ',EXCEL FILES(*.XLS),*.XLS,ALL FILES(*.*),*.*,'mode             = 'O'title            = 'Find the input file'IMPORTINGfilename         = p_fileEXCEPTIONSinv_winsys       = 1no_batch         = 2selection_cancel = 3selection_error  = 4OTHERS           = 5.INITIALIZATION.sscrfields-functxt_01 = '下载模板'.START-OF-SELECTION." # 上传数据PERFORM frm_get_data." # 检查数据PERFORM frm_check_data." # 显示结果PERFORM frm_display_data.
*&---------------------------------------------------------------------*
*& Form frm_down_temp
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_down_temp .DATA:ls_wwwdata_item LIKE wwwdatatab,lv_file         TYPE rlgrap-filename,lv_rc           LIKE sy-subrc.CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGdef_filename     = 'ZSDR004.xls'
*     DEF_PATH         = 'C:\'mask             = ',EXCEL FILES(*.XLS),*.XLS,ALL FILES(*.*),*.*,'mode             = 'S'title            = '选择模板导入文件'IMPORTINGfilename         = lv_fileEXCEPTIONSinv_winsys       = 1no_batch         = 2selection_cancel = 3selection_error  = 4OTHERS           = 5.IF sy-subrc <> 0.EXIT.ENDIF.SELECT SINGLE *INTO CORRESPONDING FIELDS OF ls_wwwdata_itemFROM wwwdataWHERE srtf2 = 0AND relid = 'MI'AND objid = 'ZSDR0010_DOC01'.IF sy-subrc NE 0 OR ls_wwwdata_item-objid EQ space.MESSAGE '模版文件不存在!' TYPE 'E'.EXIT.ENDIF.CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'EXPORTINGkey         = ls_wwwdata_itemdestination = lv_fileIMPORTINGrc          = lv_rc.IF lv_rc = 0.MESSAGE s398(00) DISPLAY LIKE 'S' WITH '模版文件下载成功!'.ELSE.MESSAGE s398(00) DISPLAY LIKE 'E' WITH '模版文件下载失败!'.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .DATA: lt_excel  TYPE TABLE OF zalsmex_tabline2 WITH HEADER LINE.FIELD-SYMBOLS:<field> TYPE any." #  EXCEL导入" HACK" 注意大数据量Excel的性能问题" 此处限制是6W  可能已经有问题了CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGfilename                = p_filei_begin_col             = 1i_begin_row             = 2i_end_col               = 5i_end_row               = 5000sheet_name              = 'Sheet1'TABLESintern                  = lt_excelEXCEPTIONSinconsistent_parameters = 1upload_ole              = 2OTHERS                  = 3.IF sy-subrc <> 0.MESSAGE '文件上传失败' TYPE 'S' DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDIF.SORT lt_excel BY row col.CLEAR: gt_alv,gs_alv.LOOP AT lt_excel.ASSIGN COMPONENT lt_excel-col OF STRUCTURE gs_alv TO <field>.<field> = lt_excel-value.AT END OF row.APPEND gs_alv TO gt_alv.CLEAR: gs_alv.ENDAT.ENDLOOP.IF gt_alv[] IS INITIAL.MESSAGE '上传文件内容为空' TYPE 'S' DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDIF.SORT gt_alv BY vbeln posnr.REFRESH lt_excel.ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_check_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_check_data .CLEAR: gv_error.IF gt_alv IS NOT INITIAL.
***订单前补0LOOP AT gt_alv  ASSIGNING FIELD-SYMBOL(<lfs_alv>).CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = <lfs_alv>-vbelnIMPORTINGoutput = <lfs_alv>-vbeln.ENDLOOP.SELECTvbeln,posnrINTO TABLE @DATA(lt_vbap)FROM vbapFOR ALL ENTRIES IN @gt_alvWHERE vbeln EQ @gt_alv-vbelnAND posnr EQ @gt_alv-posnr.SORT lt_vbap BY vbeln posnr.SELECTabgruINTO TABLE @DATA(lt_tvag)FROM tvag.SORT lt_tvag BY abgru.ENDIF.LOOP AT gt_alv ASSIGNING <lfs_alv>."必填项检查IF <lfs_alv>-vbeln IS INITIAL.<lfs_alv>-msg = '销售订单号必填'.<lfs_alv>-icon = icon_led_red.gv_error = 'X'.ENDIF.IF <lfs_alv>-posnr IS INITIAL.IF <lfs_alv>-msg IS INITIAL.<lfs_alv>-msg = '订单行项目必填'.<lfs_alv>-icon = icon_led_red.gv_error = 'X'.ELSE.<lfs_alv>-msg = <lfs_alv>-msg && '|订单行项目必填'.ENDIF.ENDIF.IF <lfs_alv>-abgru IS NOT INITIAL.READ TABLE lt_tvag TRANSPORTING NO FIELDS WITH KEY abgru = <lfs_alv>-abgru BINARY SEARCH.IF sy-subrc NE 0.IF <lfs_alv>-msg IS INITIAL.<lfs_alv>-msg = '拒绝原因不存在'.<lfs_alv>-icon = icon_led_red.gv_error = 'X'.ELSE.<lfs_alv>-msg = <lfs_alv>-msg && '|拒绝原因不存在'.ENDIF.ENDIF.ENDIF.IF <lfs_alv>-vbeln IS NOT INITIAL AND <lfs_alv>-posnr IS NOT INITIAL.READ TABLE lt_vbap TRANSPORTING NO FIELDS WITH KEY vbeln = <lfs_alv>-vbeln posnr = <lfs_alv>-posnr BINARY SEARCH.IF sy-subrc NE 0.IF <lfs_alv>-msg IS INITIAL.<lfs_alv>-msg = '销售订单不存在'.<lfs_alv>-icon = icon_led_red.gv_error = 'X'.ELSE.<lfs_alv>-msg = <lfs_alv>-msg && '|销售订单不存在'.ENDIF.ENDIF.ENDIF."价格检查IF <lfs_alv>-kbetr IS NOT INITIAL AND <lfs_alv>-kpein IS INITIAL.IF <lfs_alv>-msg IS INITIAL.<lfs_alv>-msg = '价格填写后,价格单位必填'.<lfs_alv>-icon = icon_led_red.gv_error = 'X'.ELSE.<lfs_alv>-msg = <lfs_alv>-msg && '|价格单位必填'.ENDIF.ENDIF.IF <lfs_alv>-kpein IS NOT INITIAL AND <lfs_alv>-kbetr IS INITIAL.IF <lfs_alv>-msg IS INITIAL.<lfs_alv>-msg = '价格单位填写后,含税单价必填'.<lfs_alv>-icon = icon_led_red.gv_error = 'X'.ELSE.<lfs_alv>-msg = <lfs_alv>-msg && '|含税单价必填'.ENDIF.ENDIF.ENDLOOP.ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_data .gs_layout-cwidth_opt = 'X'.gs_layout-zebra      = 'X'.
*  gs_layout-box_fname  = 'SEL'.set_fieldcat:'ICON'     '图标'         '','MSG'      '消息'         ''  ,'VBELN'    '销售订单'    '','POSNR'    '销售订单行项目'    '','ABGRU'    '拒绝原因'    '','KBETR'    '含税单价'    '','KPEIN'    '价格单位'    ''.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program       = sy-repidi_callback_pf_status_set = 'FRM_SET_STATUS'i_callback_user_command  = 'FRM_USER_COMMAND'is_layout_lvc            = gs_layoutit_fieldcat_lvc          = gt_fieldcati_save                   = 'A'TABLESt_outtab                 = gt_alv.ENDFORM.FORM frm_set_status USING exclud TYPE slis_t_extab.SET PF-STATUS 'STATUS' EXCLUDING exclud.
ENDFORM.FORM frm_user_command USING ucomm rs_selfield TYPE slis_selfield.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = gv_grid.CALL METHOD gv_grid->check_changed_data.CASE ucomm.WHEN 'ZCHANGE'.PERFORM frm_change_data.WHEN OTHERS.ENDCASE.rs_selfield-row_stable = 'X'. "保证行、列位置在自动刷新时不变rs_selfield-col_stable = 'X'.rs_selfield-refresh    = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_change_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_change_data .TYPES: BEGIN OF ty_prcd,knumv     TYPE knumv,kposn     TYPE kposn,stunr     TYPE stunr,zaehk     TYPE dzaehk,kbetr     TYPE kbetr,     "条件金额kpein     TYPE kpein,     "价格单位kmein     TYPE kmein,     "条件单位waers     TYPE waers,     "货币END OF ty_prcd.DATA: lv_vbeln  TYPE bapivbeln-vbeln,ls_headrx TYPE bapisdh1x,lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE,lt_item   TYPE TABLE OF bapisditm WITH HEADER LINE,lt_itemx  TYPE TABLE OF bapisditmx WITH HEADER LINE,lt_conditions_in  TYPE TABLE OF bapicond WITH HEADER LINE,lt_conditions_inx TYPE TABLE OF bapicondx WITH HEADER LINE,lt_prcd     TYPE TABLE OF ty_prcd,ls_prcd     TYPE ty_prcd.DATA: lv_message TYPE string."先获取所有需要处理的订单的条件记录SELECT knumv, kposn, stunr, zaehk,kbetr, kpein, kmein, waersFROM prcd_elementsINTO TABLE @lt_prcdFOR ALL ENTRIES IN @gt_alvWHERE knumv IN ( SELECT knumv FROM vbakWHERE vbeln = @gt_alv-vbeln )AND kschl = 'ZC01'AND kappl = 'V'  "销售定价AND kposn <> '000000'.  "非抬头条件IF sy-subrc = 0.SORT lt_prcd  BY knumv kposn.ENDIF.LOOP AT gt_alv INTO DATA(wa) GROUP BY ( vbeln = wa-vbeln ).CLEAR: lv_vbeln,ls_headrx.REFRESH: lt_return,lt_item,lt_itemx, lt_conditions_in, lt_conditions_inx.lv_vbeln = wa-vbeln.ls_headrx-updateflag = 'U'."获取定价过程号SELECT SINGLE knumvFROM vbakINTO @DATA(lv_knumv)WHERE vbeln = @lv_vbeln.LOOP AT GROUP wa INTO gs_alv.CLEAR:lt_item.lt_item-itm_number = gs_alv-posnr.lt_item-reason_rej = gs_alv-abgru.APPEND lt_item.CLEAR:lt_itemx.lt_itemx-itm_number = gs_alv-posnr.lt_itemx-updateflag = 'U'.lt_itemx-reason_rej = 'X'.APPEND lt_itemx."仅当价格和价格单位都有值时才更新价格IF gs_alv-kbetr IS NOT INITIAL ANDgs_alv-kpein IS NOT INITIAL ANDlv_knumv IS NOT INITIAL."查找对应的条件记录READ TABLE lt_prcd INTO ls_prcdWITH KEY knumv = lv_knumvkposn = gs_alv-posnrBINARY SEARCH.IF sy-subrc = 0.  "只有存在原条件记录时才更新CLEAR: lt_conditions_in.lt_conditions_in-itm_number = gs_alv-posnr.lt_conditions_in-cond_type  = 'ZC01'.lt_conditions_in-cond_st_no = ls_prcd-stunr.    "条件步骤号lt_conditions_in-cond_count = ls_prcd-zaehk.    "条件计数器"lt_conditions_in-cond_count = '001'.    "条件计数器:有多个相同的ZC01时,默认更新第一个lt_conditions_in-cond_value = gs_alv-kbetr.     "新价格lt_conditions_in-cond_unit  = gs_alv-kpein.     "价格单位lt_conditions_in-currency   = ls_prcd-waers.    "货币lt_conditions_in-cond_unit = ls_prcd-kmein. "条件单位APPEND lt_conditions_in.CLEAR: lt_conditions_inx.lt_conditions_inx-itm_number = gs_alv-posnr.lt_conditions_inx-cond_type  = 'ZC01'.lt_conditions_inx-updateflag = 'U'.lt_conditions_inx-cond_st_no = ls_prcd-stunr.lt_conditions_inx-cond_count = ls_prcd-zaehk.lt_conditions_inx-cond_value = 'X'.lt_conditions_inx-cond_unit  = 'X'.lt_conditions_inx-currency   = 'X'.lt_conditions_inx-cond_unit = 'X'.APPEND lt_conditions_inx.ENDIF.ENDIF.ENDLOOP.CALL FUNCTION 'BAPI_SALESORDER_CHANGE'EXPORTINGsalesdocument    = lv_vbeln
*       ORDER_HEADER_IN  =order_header_inx = ls_headrx
*       SIMULATION       =
*       BEHAVE_WHEN_ERROR     = ' '
*       INT_NUMBER_ASSIGNMENT = ' '
*       LOGIC_SWITCH     =
*       NO_STATUS_BUF_INIT    = ' 'TABLESreturn           = lt_returnorder_item_in    = lt_itemorder_item_inx   = lt_itemx
*       PARTNERS         =
*       PARTNERCHANGES   =
*       PARTNERADDRESSES =
*       ORDER_CFGS_REF   =
*       ORDER_CFGS_INST  =
*       ORDER_CFGS_PART_OF    =
*       ORDER_CFGS_VALUE =
*       ORDER_CFGS_BLOB  =
*       ORDER_CFGS_VK    =
*       ORDER_CFGS_REFINST    =
*       SCHEDULE_LINES   =
*       SCHEDULE_LINESX  =
*       ORDER_TEXT       =
*       ORDER_KEYS       =conditions_in    = lt_conditions_inconditions_inx   = lt_conditions_inx
*       EXTENSIONIN      =  ..CLEAR: lv_message.LOOP AT lt_return WHERE type = 'E' OR type = 'A'.CONCATENATE lt_return-message ';' lv_message   INTO lv_message.ENDLOOP.IF sy-subrc NE 0.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.CLEAR: gs_alv.gs_alv-icon = icon_led_green.gs_alv-msg = '修改成功'.MODIFY gt_alv FROM gs_alv TRANSPORTING icon msg WHERE vbeln = wa-vbeln.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.CLEAR: gs_alv.gs_alv-icon = icon_led_red.gs_alv-msg = lv_message.MODIFY gt_alv FROM gs_alv TRANSPORTING icon msg WHERE vbeln = wa-vbeln.ENDIF.ENDLOOP.
ENDFORM.

EXCEL上传函数ZALSM_EXCEL_TO_INTERNAL_TABLE懒得上传了,网上随便都能搜到,搜不到的效果吧,需要的可以私聊~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/456665.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git安装-Tortoise git 安装汉化教程

1. 安装git 2. 安装git图形化工具Tortoise git 3. 汉化 Tortoise git 汉化安装包

证件照电子版怎么弄?不花钱制作方法快来学

想要制作免费照证件照&#xff1f;证件照在我们的日常生活中扮演着重要角色&#xff0c;无论是求职、求学还是办理各类证件&#xff0c;都少不了它的身影。 但是&#xff0c;去照相馆拍照不仅耗时&#xff0c;费用也不菲。那么&#xff0c;有没有可能不花一分钱就搞定证件照呢…

互联网系统的微观与宏观架构

互联网系统的架构设计&#xff0c;通常会根据项目的体量、业务场景以及技术需求被划分为微观架构&#xff08;Micro-Architecture&#xff09;和宏观架构&#xff08;Macro-Architecture&#xff09;。这两者的概念与职责既独立又相互关联。本文将通过一些系统案例&#xff0c;…

淘宝API的实战应用:数据驱动增长,实时监控商品信息是关键

数据驱动增长&#xff0c;实时监控商品信息是关键 —— 淘宝API的实战应用 在数字化时代&#xff0c;数据已经成为商业决策的核心。对于电商行业而言&#xff0c;获取准确、实时的数据是保持竞争力的关键。淘宝API接口作为连接淘宝电商平台与外部应用的桥梁&#xff0c;为电商商…

【论文+源码】基于spring boot的垃圾分类网站

创建一个基于Spring Boot的垃圾分类网站涉及多个步骤&#xff0c;包括环境搭建、项目创建、数据库设计、后端服务开发、前端页面设计等。下面我将引导您完成这个过程。 第一步&#xff1a;准备环境 确保您的开发环境中安装了以下工具&#xff1a; Java JDK 8 或更高版本Mav…

uv: 一个统一的Python包管理工具

uv是由Astral公司开发的一个极其快速的Python包管理器,完全用Rust编写。它最初在2月份发布,作为pip工作流的替代品。现在,uv已经扩展成为一个端到端的解决方案,可以管理Python项目、命令行工具、单文件脚本,甚至Python本身。可以说,uv就像是Python界的Cargo:一个快速、可靠、易…

Rust小练习,编写井字棋

画叉画圈的游戏通常指的是 井字棋&#xff08;Tic-Tac-Toe&#xff09;&#xff0c;是一个简单的两人游戏&#xff0c;规则如下&#xff1a; 游戏规则 棋盘&#xff1a;游戏在一个3x3的方格上进行。玩家&#xff1a;有两个玩家&#xff0c;一个用“X”表示&#xff0c;另一个…

Vivado自定义IP修改顶层后Port and Interface不更新解决方案

问题描述 在整个项目工程中&#xff0c;对自定义IP进行一个比较大的改动&#xff0c;新增了不少端口(这里具体的就是bram的读写端口)&#xff0c;修改是在block design中右击IP编辑在IP编辑工程中进行的。 在修改完所有代码后&#xff08;顶层新增了需要新加的输入输出端口&…

算法的学习笔记—平衡二叉树(牛客JZ79)

&#x1f600;前言 在数据结构中&#xff0c;二叉树是一种重要的树形结构。平衡二叉树是一种特殊的二叉树&#xff0c;其特性是任何节点的左右子树高度差的绝对值不超过1。本文将介绍如何判断一棵给定的二叉树是否为平衡二叉树&#xff0c;重点关注算法的时间复杂度和空间复杂度…

未来汽车驾驶还会有趣吗?车辆动力学系统简史

未来汽车驾驶还会有趣吗&#xff1f;车辆动力学系统简史 本篇文章来源&#xff1a;Schmidt, F., Knig, L. (2020). Will driving still be fun in the future? Vehicle dynamics systems through the ages. In: Pfeffer, P. (eds) 10th International Munich Chassis Symposiu…

sql-labs靶场第二十关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库&#xff0c;查看数据库名称 ③爆表&#xff0c;查看security库的所有表 ④爆列&#xff0c;查看users表的所有列 ⑤成功获取用户名…

文本预处理——构建词云

Python 词云或标签云是一种可视化技术&#xff0c;通常用于显示网站的标签或关键字。这些单个单词反映了网页的上下文&#xff0c;并聚集在词云中。云中的单词字体大小和颜色各不相同&#xff0c;表明其突出性。字体大小越大&#xff0c;相对于其他单词的重要性就越高。词云可以…

VUE中文本域默认展示最底部内容

文本域内容 <textarea ref"textareaRef" style"width: 100%; resize: none;" readonly v-model"errorLog" rows"15"></textarea> 样式展示 this.$nextTick(() > { // 使用$refs获取文本域的DOM元素 const textareaInfo…

【ArcGIS Pro实操第8期】绘制WRF三层嵌套区域

【ArcGIS Pro实操第8期】绘制WRF三层嵌套区域 数据准备ArcGIS Pro绘制WRF三层嵌套区域Map-绘制三层嵌套区域更改ArcMap地图的默认显示方向指定数据框范围 Map绘制研究区Layout-布局出图 参考 本博客基于ArcGIS Pro绘制WRF三层嵌套区域&#xff0c;具体实现图形参考下图&#xf…

C++游戏开发教程:从入门到进阶

C游戏开发教程&#xff1a;从入门到进阶 前言 在游戏开发的世界里&#xff0c;C以其高效的性能和灵活的特性&#xff0c;成为了众多游戏开发者的首选语言。在本教程中&#xff0c;我们将带您从基础知识入手&#xff0c;逐步深入到实际的游戏开发项目中。无论您是初学者还是有…

算法的学习笔记—数组中只出现一次的数字(牛客JZ56)

&#x1f600;前言 在数组中寻找只出现一次的两个数字是一道经典的问题&#xff0c;通常可以通过位运算来有效解决。本文将详细介绍这一问题的解法&#xff0c;深入解析其背后的思路。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f970;数组中只出现一次的数字…

基于Netty构建WebSocket服务并实现项目群组聊天和实时消息通知推送

文章目录 前言需求分析技术预研Web端方案服务端技术 技术方案设计思路功能实现添加依赖自定义NettyServer自定义webSocketHandler使用NettyServer向在线用户发送消息 需要完善的地方 前言 我们的项目有个基于项目的在线文档编制模块&#xff0c;可以邀请多人项目组成员在线协同…

日常记录,使用springboot,vue2,easyexcel使实现字段的匹配导入

目前的需求是数据库字段固定&#xff0c;而excel的字段不固定&#xff0c;需要实现excel导入到一个数据库内。 首先是前端的字段匹配&#xff0c;显示数据库字段和表头字段 读取表头字段&#xff1a; 我这里实现的是监听器导入&#xff0c;需要新建一个listen类。 读Excel …

BiGRU实现中文关系抽取算法

获取更多完整项目代码数据集&#xff0c;点此加入免费社区群 &#xff1a; 首页-置顶必看 1. 项目简介 本项目旨在实现并训练一个深度学习模型&#xff0c;应用于时间序列数据处理或自然语言处理任务中。项目采用了门控循环单元&#xff08;GRU&#xff0c;Gated Recurrent U…

Python爬虫进阶(实战篇一)

接&#xff0c;基础篇&#xff0c;链接&#xff1a;python爬虫入门&#xff08;所有演示代码&#xff0c;均有逐行分析&#xff01;&#xff09;-CSDN博客 目录 1.爬取博客网站全部文章列表 ps:补充&#xff08;正则表达式&#xff09; 爬虫实现 爬虫代码&#xff1a; 2.爬…