当前位置: 首页 > news >正文

SAP DOI EXCEL应用

【应用场景】采用DOI方式打开填充EXCEL数据

*&---------------------------------------------------------------------*
*&  包含                ZFI1009R_TOP
*&---------------------------------------------------------------------*
TABLES:bkpf,bseg.

DATA: gt_list TYPE TABLE OF zsfi1009_02,
      gs_list TYPE zsfi1009_02.

"===>DOI 相关变量
DATA  gi_spreadsheet    TYPE REF TO i_oi_spreadsheet.
DATA  gi_document       TYPE REF TO i_oi_document_proxy.
DATA  gs_sheet          TYPE ole2_object.
DATA  gs_handle         TYPE cntl_handle.
DATA  gt_ranges         TYPE soi_range_list.
DATA  gt_excel_input    TYPE soi_generic_table.
DATA  gc_container      TYPE REF TO cl_gui_custom_container.
DATA  gi_control        TYPE REF TO i_oi_container_control.
DATA  gt_header         TYPE soi_generic_table.
DATA  gv_menu           TYPE c VALUE 'X'.
DATA  gv_sapye          TYPE p LENGTH 16 DECIMALS 2.
DATA  gv_percentage     TYPE i.
DATA  gt_edit_area      TYPE TABLE OF string.
DATA  gi_error          TYPE REF TO i_oi_error." occurs 0 with header line.
"<===DOI 相关变量


*==============EXCEL 模板变量========================*
DATA gs_temp_name TYPE bds_propva VALUE 'ZFI1009R'. "excel 模板名称
CONSTANTS:
  gs_sheet1 TYPE scrfname VALUE  '凭证'.
*==================================================*

DATA: lt_ztfi0222   TYPE SORTED TABLE OF ztfi0222
                     WITH NON-UNIQUE KEY fzhlx priority
                     WITH HEADER LINE,
      lt_ztfi0222_1 TYPE SORTED TABLE OF ztfi0222
                     WITH NON-UNIQUE KEY sapfzhzd priority
                     WITH HEADER LINE,
      "lt_prhi     TYPE TABLE OF prhi WITH HEADER LINE,
      lt_ztfi0120   TYPE SORTED TABLE OF ztfi0120
                  WITH NON-UNIQUE KEY hslx zzxiangmu
                  WITH HEADER LINE, " 项目分期对应关系[EAS<->SAP]
      lt_ztfi0121   TYPE SORTED TABLE OF ztfi0121
                  WITH NON-UNIQUE KEY hslx zzyeta1 zzxiangmu
                  WITH HEADER LINE, " 产品类型对应关系[EAS<->SAP]
      lt_ztfi0122   TYPE SORTED TABLE OF ztfi0122
                  WITH NON-UNIQUE KEY hslx zzroom
                  WITH HEADER LINE, " 房源类型对应关系[EAS<->SAP]
      lt_ztfi0123   TYPE SORTED TABLE OF ztfi0123
                  WITH NON-UNIQUE KEY zzbeiyong1_1  zzbeiyong1 zzbeiyong2
                  WITH HEADER LINE, " 辅助核算内容对应关系[EAS<->SAP]
      lt_ztfi0124   TYPE SORTED TABLE OF ztfi0124
                  WITH NON-UNIQUE KEY hslx zzhbkid zzhktid
                  WITH HEADER LINE, " 银行帐户对应关系[EAS<->SAP]
      lt_ztfi0161   TYPE SORTED TABLE OF ztfi0161
                  WITH NON-UNIQUE KEY hslx bukrs zzhetong2
                  WITH HEADER LINE, " 合同号新旧代码对应关系[EAS期初凭证]
      lt_ztfi0170   TYPE SORTED TABLE OF ztfi0170
                  WITH NON-UNIQUE KEY hslx lifnr
                  WITH HEADER LINE, " 供应商对应关系[EAS<->SAP]
      lt_ztfi0171   TYPE SORTED TABLE OF ztfi0171
                  WITH NON-UNIQUE KEY hslx kunnr
                  WITH HEADER LINE, " 客户对应关系[EAS<->SAP]
      lt_ztfi0172   TYPE SORTED TABLE OF ztfi0172
                  WITH NON-UNIQUE KEY hslx kostl
                  WITH HEADER LINE, " 成本中心对应关系[EAS<->SAP]
      lt_ztfi0268   TYPE SORTED TABLE OF ztfi0268
                  WITH NON-UNIQUE KEY hslx rassc
                  WITH HEADER LINE, " 贸易伙伴对照表[EAS<->SAP]
      lt_ztfi0360   TYPE SORTED TABLE OF ztfi0360
                  WITH NON-UNIQUE KEY hslx zzmenge
                  WITH HEADER LINE, " 往来类型对照关系表
      lt_ztfi0020   TYPE SORTED TABLE OF ztfi0020
                  WITH NON-UNIQUE KEY jkxzn
                  WITH HEADER LINE,
      lt_t007s      TYPE SORTED TABLE OF t007s
                  WITH NON-UNIQUE KEY mwskz
                  WITH HEADER LINE,

      BEGIN OF lt_t012k OCCURS 0,
        bukrs   TYPE t012k-bukrs,
        hbkid   TYPE t012k-hbkid,
        hktid   TYPE t012k-hktid,
        bankn   TYPE t012k-bankn,
        bnkn2   TYPE t012k-bnkn2,
        zzhktid TYPE zzhktid,
        text1   TYPE fibl_txt50,
      END OF lt_t012k.

DATA: BEGIN OF gt_fields OCCURS 0,
        fields TYPE char20,
        desc   TYPE char30,
        field2 TYPE char20,
        field3 TYPE char20,
        table  TYPE char30,
      END OF gt_fields.

SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs,
                s_budat FOR bkpf-budat,
                s_belnr FOR bkpf-belnr,
                s_hd2   FOR bkpf-xref2_hd.
 

START-OF-SELECTION.

  PERFORM frm_check_auth.

  PERFORM frm_get_data.

  PERFORM frm_process_data.

  PERFORM frm_doi_display.

*&---------------------------------------------------------------------*
*&      Form  FRM_DOI_DISPLAY
*&---------------------------------------------------------------------*
FORM frm_doi_display .
  CALL SCREEN 100.
ENDFORM.

SCREEN PBO/PAI

*----------------------------------------------------------------------*
***INCLUDE ZFI1009R_M01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'ST01'.
*  SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  MOD_SET_DOI  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE mod_set_doi OUTPUT.
  PERFORM FRM_SET_DOI.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE SY-UCOMM.
    WHEN 'SAVE'.
      PERFORM FRM_DOI_SAVE.
    WHEN 'EXIT' OR 'STOP' OR 'CANCEL'.
      PERFORM FRM_DOI_RELEASE.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.
 

 DOI处理相关方法

*&---------------------------------------------------------------------*
*&  包含                ZFI1009R_DOI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_DOI_SAVE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_doi_save .
  DATA: lr_error     TYPE REF TO  i_oi_error,
        lv_retcode   TYPE soi_ret_string,
        lv_file_name TYPE c VALUE 'C:\SSS.XLS'.

  IF gi_document IS NOT INITIAL.
    CALL METHOD gi_document->save_as
      EXPORTING
        file_name   = 'X'
        prompt_user = 'X'
      IMPORTING
        error       = lr_error
        retcode     = lv_retcode.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DOI_RELEASE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_doi_release .
  IF gi_spreadsheet IS NOT INITIAL.
    FREE gi_spreadsheet.
  ENDIF.

  IF gi_document IS NOT INITIAL.
    CALL METHOD gi_document->close_document.
  ENDIF.

  IF gc_container IS NOT INITIAL.
    CALL METHOD gc_container->free.
  ENDIF.

  IF gi_control IS NOT INITIAL.
    CALL METHOD gi_control->destroy_control.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_DOI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_set_doi .
  IF gs_handle IS INITIAL.
    PERFORM frm_doi_create USING gs_temp_name.       "创建DOI对象
    PERFORM frm_fill_sheets_data. "填写SHEET数据
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DOI_CREATE
*&---------------------------------------------------------------------*
FORM frm_doi_create  USING  i_temp_name.
  DATA  item_url    TYPE c LENGTH 256.
  DATA  lv_filename TYPE string.
  DATA  lv_rc       TYPE i.
  DATA  has         TYPE i.
  DATA: cl_splitter  TYPE REF TO cl_gui_splitter_container,
        cl_container TYPE REF TO cl_gui_container.


  DATA: iv_percentage TYPE i VALUE '100',
        iv_msg(100)   VALUE '即将显示数据,请等待......'.

  PERFORM frm_display_percent USING 100 '正在打开Excel,请等待......' .

  IF NOT gi_document IS INITIAL.
    CALL METHOD gi_document->close_document.
    FREE gi_document.
  ENDIF.
  IF NOT gi_control IS INITIAL.
    CALL METHOD gi_control->destroy_control.
    FREE gi_control.
  ENDIF.


  "创建DOI Control
  CALL METHOD c_oi_container_control_creator=>get_container_control
    IMPORTING
      control = gi_control.

* 创建CONTIANER
  CREATE OBJECT cl_splitter
    EXPORTING
      parent  = cl_gui_container=>screen0
      rows    = 1
      columns = 1.
* 全屏显示
  CALL METHOD cl_splitter->set_border
    EXPORTING
      border = cl_gui_cfw=>false.

  cl_container  = cl_splitter->get_container( row = 1 column = 1 ).

  CALL METHOD gi_control->init_control
    EXPORTING
      r3_application_name      = 'RBasis'
      inplace_enabled          = 'X'
      inplace_scroll_documents = 'X'
      parent                   = cl_container "gc_container
      register_on_close_event  = 'X'
      register_on_custom_event = 'X'
      no_flush                 = 'X'.

* 读取服务器上模板文件
  PERFORM frm_doi_oaor_url USING item_url i_temp_name.  "OAOR里的EXCEL模版url 注:大模版打开可能很慢
  "PERFORM download_template CHANGING item_url.
  "PERFORM frm_doi_get_template USING item_url.

  CALL METHOD gi_control->get_document_proxy
    EXPORTING
      document_type  = 'Excel.Sheet'
      no_flush       = 'X'
    IMPORTING
      document_proxy = gi_document
      error          = gi_error.

  "打开excel
  CALL METHOD gi_document->open_document
    EXPORTING
      open_inplace = 'X'
      no_flush     = 'X'
      document_url = item_url
    IMPORTING
      error        = gi_error.

  CALL METHOD gi_document->has_spreadsheet_interface
    EXPORTING
      no_flush     = ''
    IMPORTING
      is_available = has.

  CALL METHOD gi_document->get_spreadsheet_interface
    EXPORTING
      no_flush        = ''
    IMPORTING
      sheet_interface = gi_spreadsheet.

  CALL METHOD gi_document->get_document_handle
    EXPORTING
      no_flush = ''
    IMPORTING
      handle   = gs_handle.

  CALL METHOD gi_error->raise_message
    EXPORTING
      type = 'E'.

  IF gs_handle IS INITIAL.
    MESSAGE '打开EXCEL失败,请删除任务管理器中的Excel进程再执行' TYPE 'S' DISPLAY LIKE 'E'.
    REJECT.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_FILL_SHEETS_DATA
*&---------------------------------------------------------------------*
FORM frm_fill_sheets_data .
  DATA: lt_sheets TYPE soi_sheets_table,
        wa_sheet  TYPE soi_sheets.

  CALL METHOD gi_spreadsheet->get_sheets
    IMPORTING
      sheets = lt_sheets.
  "BREAK tuqd.
  LOOP AT lt_sheets INTO wa_sheet.
    CASE wa_sheet-sheet_name.
      WHEN gs_sheet1.
        PERFORM frm_open_sheet  USING wa_sheet-sheet_name.
        PERFORM frm_fill_header_err_message USING wa_sheet-sheet_name 15 35 .
    ENDCASE.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_PERCENT
*&---------------------------------------------------------------------*
FORM frm_display_percent  USING iv_percentage iv_msg.
  DATA lv_text        TYPE string.


  WHILE gv_percentage < iv_percentage.
    gv_percentage = gv_percentage + 1.

    MESSAGE s001(00) WITH gv_percentage '%:' iv_msg INTO lv_text.

    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        text   = lv_text
      EXCEPTIONS
        OTHERS = 1.

    PERFORM frm_wait_seconds USING '0.01'.
  ENDWHILE.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_WAIT_SECONDS
*&---------------------------------------------------------------------*
FORM frm_wait_seconds USING iv_seconds TYPE p.
  DATA lv_runtime1  TYPE i.
  DATA lv_runtime2  TYPE i.
  DATA lv_seconds   TYPE i.

  lv_seconds = iv_seconds * 1000000.
  GET RUN TIME FIELD lv_runtime1.

  WHILE lv_runtime2 - lv_runtime1  < lv_seconds.
    GET RUN TIME FIELD lv_runtime2.
  ENDWHILE.
ENDFORM.

FORM frm_fill_header_err_message USING  sheet_name left top .
  DATA: lt_list TYPE TABLE OF zsfi1009_01 WITH HEADER LINE.

  LOOP AT gt_list INTO gs_list.
    MOVE-CORRESPONDING gs_list TO lt_list.
    APPEND lt_list.
  ENDLOOP.

  PERFORM frm_fill_sheet_data TABLES lt_list USING  gs_temp_name sheet_name  1 2.

ENDFORM.


FORM frm_fill_sheet_data TABLES pt_excel TYPE STANDARD TABLE
                         USING  pv_template TYPE bds_propva
                                pv_sheet_name TYPE soi_sheets-sheet_name
                           pv_left TYPE i
                           pv_top TYPE i.

  DATA  l_iref_error       TYPE REF TO i_oi_error.
  DATA: lt_fields   TYPE STANDARD TABLE OF rfc_fields,
        lv_last_row TYPE i,
        lv_last_col TYPE i,
        lv_retcode  TYPE soi_ret_string.
  DATA lv_info(80).


*  CALL METHOD gi_spreadsheet->select_sheet
*    EXPORTING
*      name  = pv_sheet_name
*    IMPORTING
*      error = l_iref_error.
*
*  CHECK l_iref_error->error_code = c_oi_errors=>ret_ok.
  CLEAR lt_fields.
  CLEAR lt_fields[].

  CHECK pt_excel[] IS NOT INITIAL.
  CALL FUNCTION 'DP_GET_FIELDS_FROM_TABLE'
    TABLES
      data   = pt_excel
      fields = lt_fields.
  lv_last_row = lines( pt_excel ).
  lv_last_col = lines( lt_fields ).

  CALL METHOD gi_spreadsheet->set_selection
    EXPORTING
      left    = pv_left
      top     = pv_top
      rows    = lv_last_row
      columns = lv_last_col.

  CALL METHOD gi_spreadsheet->insert_range
    EXPORTING
      columns = lv_last_col
      rows    = lv_last_row
      name    = pv_template.

  CALL METHOD gi_spreadsheet->insert_one_table
    EXPORTING
      data_table   = pt_excel[]
      fields_table = lt_fields
      rangename    = pv_template
      "no_flush     = 'X'
      wholetable   = 'X'
    IMPORTING
      error        = l_iref_error
      retcode      = lv_retcode.
*==========================================================
  lv_info = '正在填充数据:' && pv_sheet_name.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      text = lv_info.

ENDFORM.


FORM  frm_open_sheet  USING pv_sheet_name TYPE soi_sheets-sheet_name.


  DATA  l_iref_error       TYPE REF TO i_oi_error.
  DATA: lt_fields   TYPE STANDARD TABLE OF rfc_fields,
        lv_last_row TYPE i,
        lv_last_col TYPE i.
  DATA lv_info(80).


  CALL METHOD gi_spreadsheet->select_sheet
    EXPORTING
      name  = pv_sheet_name
    IMPORTING
      error = l_iref_error.

  IF  l_iref_error->error_code <> c_oi_errors=>ret_ok.
    CALL METHOD l_iref_error->raise_message
      EXPORTING
        type = 'E'.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DOI_OAOR_URL
*&---------------------------------------------------------------------*
FORM frm_doi_oaor_url  USING ev_url i_temp_name.
  DATA lv_classname    TYPE sbdst_classname VALUE 'SOFFICEINTEGRATION'.
  DATA lv_classtype    TYPE sbdst_classtype VALUE 'OT'.
  DATA lv_object_key   TYPE sbdst_object_key VALUE 'ZFI'.
  DATA lcl_instance    TYPE REF TO cl_bds_document_set.
  DATA lt_signature    TYPE sbdst_signature.
  DATA ls_signature    LIKE LINE OF lt_signature.
  DATA lt_components   TYPE sbdst_components.
  DATA lt_uris         TYPE sbdst_uri.
  DATA ls_uris         LIKE LINE OF lt_uris.

  "1.DESCRIPTION 根据描述定位模板   2.BDS_KEYWORD 根据关键字定位模板
  ls_signature-prop_name = 'BDS_KEYWORD'.
  ls_signature-prop_value = i_temp_name. "'ZFIR004'. "EXCEL
  APPEND ls_signature TO lt_signature.

  CREATE OBJECT lcl_instance.

  CALL METHOD lcl_instance->get_info
    EXPORTING
      classname       = lv_classname
      classtype       = lv_classtype
      object_key      = lv_object_key
    CHANGING
      components      = lt_components
      signature       = lt_signature
    EXCEPTIONS
      nothing_found   = 1
      error_kpro      = 2
      internal_error  = 3
      parameter_error = 4
      not_authorized  = 5
      not_allowed     = 6.

  CALL METHOD lcl_instance->get_with_url
    EXPORTING
      classname  = lv_classname
      classtype  = lv_classtype
      object_key = lv_object_key
    CHANGING
      uris       = lt_uris
      signature  = lt_signature.


  DATA lt_table TYPE sbdst_content.
  CALL METHOD lcl_instance->get_with_table
    EXPORTING
      classname  = lv_classname
      classtype  = lv_classtype
      object_key = lv_object_key
    CHANGING
      content    = lt_table
      signature  = lt_signature.

  FREE lcl_instance.
  SORT lt_uris BY doc_count DESCENDING.
  READ TABLE lt_uris INTO ls_uris INDEX 1.

  ev_url = ls_uris-uri.
ENDFORM.
 

相关文章:

SAP DOI EXCEL应用

【应用场景】采用DOI方式打开填充EXCEL数据 *&---------------------------------------------------------------------* *& 包含 ZFI1009R_TOP *&---------------------------------------------------------------------* TABLES:bkpf,bseg. D…...

RS485电路设计注意事项

&#xff08;一&#xff09;RS485的电平标准&#xff1a; RS485用缆线两端的电压差值来表示传递信号&#xff0c;逻辑“1”以两线间的电压差为2V~6V标识&#xff0c;逻辑“0”以两线间的电压差为-2V~-6V标识。由此可见&#xff0c;接口信号电平较低&#xff0c;不易损坏接口电路…...

Git 回退操作详解:带示例的“小白”指南

前言 在日常开发中&#xff0c;我们难免会遇到&#xff1a; 改错代码&#xff1a;推送之前才发现某些行根本就不该动提交错误&#xff1a;commit 信息打错、提交到错误分支想回到之前版本&#xff1a;测试时发现之前版本是好的&#xff0c;需要回去查看 这就需要用到 Git 的…...

PyQt5库 各种导入项的作用

from PyQt5.QtCore import QIODevice, QSharedMemory, pyqtSignal 这行代码是从 PyQt5 库中导入了几个类和信号&#xff0c;用于开发桌面应用程序。下面是每个导入项的详细解释&#xff1a; QIODevice: QIODevice 是 PyQt5 中的一个类&#xff0c;提供了对输入输出设备的抽象…...

Git下载安装(保姆教程)

目录 1、Git下载 2、Git安装&#xff08;windows版&#xff09; &#xff08;1&#xff09;启动安装程序 &#xff08;2&#xff09;阅读许可协议 &#xff08;3&#xff09;选择安装路径 &#xff08;4&#xff09;选择组件 &#xff08;5&#xff09;选择开始菜单文件夹…...

关系数据库设计理论

目录 一、数据依赖——重点 &#xff08;1&#xff09;平凡依赖/非平凡函数依赖 &#xff08;2&#xff09;完全/部分函数依赖 &#xff08;3&#xff09;传递函数依赖 二、范式&#xff08;NF&#xff09; &#xff08;1&#xff09;第一范式 &#xff08;2&#xff09…...

图解LLM智能体(LLM Agents):构建与运作机制的全面解析

LLM智能体:构建与运作机制 LLM智能体(LLM Agents)正在迅速普及,似乎逐渐取代了我们熟悉的传统对话式LLM。这些令人惊叹的能力并非凭空而来,而是需要多个组件协同工作。 本文包含超过60张定制插图,将深入探讨LLM智能体的领域、其核心组件以及多智能体框架的工作原理。 文…...

Anaconda 入门指南

Anaconda 入门指南 一、下载安装 Anaconda 1、下载地址&#xff1a;Anaconda 推荐下载 python3 版本, 毕竟未来 python2 是要停止维护的。 2、安装 Anaconda 按照安装程序提示一步步安装就好了, 安装完成之后会多几个应用&#xff1a; Anaconda Navigtor &#xff1a;用于管…...

YOLOv11小白的进击之路(九)创新YOLO11损失函数之NWD损失函数源码解读

之前的博客也有对YOLO11的损失函数进行过源码分析&#xff0c;可以参考&#xff1a;YOLOv11小白的进击之路&#xff08;六&#xff09;创新YOLO的iou及损失函数时的源码分析_yolov11的损失函数是什么-CSDN博客最近在做小目标检测的时候注意到了NWD损失函数&#xff0c;这里对其…...

【c++】内存序 和 内存一致性模型

c 11 中为了支持并发&#xff0c;定义了内存序和内存一致性模型。这个概念听起来非常高深&#xff0c;好像是在多线程编程领域浸淫多年之后的神级程序员才能搞明白&#xff0c;并用明白的东西。 本文尝试用最简单的方式说清楚这个概念。因为这个概念真的超级简单&#xff0c;大…...

力扣128. 最长连续序列 || 452. 用最少数量的箭引爆气球

最长连续列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4 解释&…...

从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一点二五 光照贴图(lighting maps)的实现 细嚼慢咽逐条读代码系列

写在篇前的话 作为一个曾经在代码堆里面苦苦挣扎的萌新,困惑的事情在于库,各种依赖,包换文件,链接库,纠结于代码的作用意义。尤其在3D引擎开发的问题上,很多人都被各种困难给阻拦,放弃了在3D渲染,3D游戏引擎上大涨鸿图的机会。 当然关于3D游戏引擎的教程已经汗牛充栋…...

优先级队列(PriorityQueue)_1_模拟实现优先级队列

1、概念 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构 &#xff0c;但有些情况下&#xff0c; 操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可能需要优先级高的元素先出队列 &#xff0c;这时候&#xff0c;使用队列显然不合适了。 在这种…...

java后端怎么写好根据角色控制查询不同数据,

z总的思路&#xff0c;先把不带查询条件的包含角色控制场景&#xff08;比如&#xff1a;总公司经理角色可以查看所有数据&#xff0c;但是暂存的话只能查自己暂存的&#xff0c;分公司&#xff0c;只能查自己所属分公司的&#xff0c;&#xff09;的所有数据查出来 例如查询的…...

《量子比特:AI复杂算法破局的关键力量》

在科技飞速发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;与量子计算成为了推动人类进步的两大引擎。而量子比特&#xff0c;作为量子计算的基石&#xff0c;正逐渐展现出其在实现复杂AI算法时相较于传统比特的独特优势&#xff0c;为AI领域带来了前所未有的变革潜…...

MVC_Publish-Subscriber 模式中的事件处理程序

MVC_Publish-Subscriber 模式中的事件处理程序 MVC 中的事件处理&#xff1a;发布者-订阅者模式 程序启动时&#xff0c;controlRecipes将被传入addHandlerRender; addHandlerRender会侦听事件&#xff08;addEventListener&#xff09;,并使用controlRecipes作为回调&#xf…...

RxSwift 学习笔记第四篇之RxSwift在项目中的简单应用

目录 前言 一、RxCocoa在项目中的用法 1.Target Action 2.代理 3.闭包回调 4.通知 二、一个计时器的例子 前言 在上面的两篇文章中,我们了解到了RxSwift中的Observable和Observer,本篇文章我们主要介绍下RxSwift项目中的使用。 一、RxCocoa在项目中的用法 RxCocoa 给 …...

Java面试黄金宝典2

1. 什么是 Concurrent 包 java.util.concurrent&#xff08;简称 Concurrent 包&#xff09;是 Java 5 引入的一个用于并发编程的工具包。它提供了一系列用于处理多线程编程的类和接口&#xff0c;帮助开发者更方便、安全地进行并发编程。 原理 该包基于 Java 的多线程机制和锁…...

【在数轴上找最优位置,使移动距离最短】

L1-4 破碎的心&#xff0c;无法挽回的距离 题目描述: YFffffff 最近在感情上遭受了失败&#xff0c;他的心也破碎成了n块碎片&#xff0c;散落在了数轴上的 n 个位置。 你是一个情感修复师&#xff0c;作为 YFffffff 的好友&#xff0c;你试图将这些破碎的心重新聚集到一个位…...

3D标定中的平面约束-平面方程的几何意义

平面方程的一般形式为 AxByCzD0&#xff0c;其中系数 A、B、C、D共同决定了平面的几何特性。 系数对平面姿态的影响 1. 法向量方向2. 平面位置3. 比例关系4. 姿态变换5.平面空间变换 1. 法向量方向 法向量方向由 A、B、C 决定 核心作用&#xff1a;系数 A、B、C 构成的向量 (…...

singleInstance 和 singleTask的 重要 区别

singleInstance 和 singleTask 是 Android 中 Activity 的两种启动模式&#xff0c;它们主要用于控制 Activity 在任务栈中的行为。以下是两者的区别&#xff1a; 1. singleTask 定义: 每个 singleTask 模式的 Activity 在一个任务栈中只会存在一个实例。行为: 如果该 Activi…...

【如何在OpenWebUI中使用FLUX绘画:基于硅基流动免费API的完整指南】

如何在OpenWebUI中使用FLUX绘画&#xff1a;基于硅基流动免费API的完整指南 注册并获取硅基流动秘钥OpenWebUI中使用函数配置自定义模型-提示词配置效果验证 ) FLUX绘画是一种强大的AI绘图工具&#xff0c;本文将详细介绍如何在OpenWebUI中集成并使用FLUX绘画功能&#xff0c;…...

【Linux】浅谈环境变量和进程地址空间

一、环境变量 基本概念 环境变量&#xff08;Environment Variables&#xff09;是操作系统提供的一种机制&#xff0c;用于存储和传递配置信息、系统参数、用户偏好设置等。 环境变量的作用 配置程序行为&#xff1a; 程序可以通过环境变量获取配置信息&#xff0c;例如日…...

vue数字公式篇(一)

一、使用插件来创造数字公式 因为只是展示和编辑 我看这个公式挺多&#xff0c;也对公式不太了解所以就这样&#xff0c;开始我的代码展示了 1、安装mathlive cnpm install mathlive2、页面 <template><div><label>输入 LaTeX 公式:</label><div …...

基于PMU的14节点、30节点电力系统状态估计MATLAB程序

“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 程序简介&#xff1a; 程序采用三种方法对14节点和30节点电力系统状态进行评估&#xff1a; ①PMU同步向量测量单元结合加权最小二乘法&#xff08;WLS&#xff09;分析电力系统的电压幅值和相角状态&#xff1b; …...

5 分钟用满血 DeepSeek R1 搭建个人 AI 知识库(含本地部署)

最近很多朋友都在问&#xff1a;怎么本地部署 DeepSeek 搭建个人知识库。 老实说&#xff0c;如果你不是为了研究技术&#xff0c;或者确实需要保护涉密数据&#xff0c;我真不建议去折腾本地部署。 为什么呢&#xff1f; 目前 Ollama 从 1.5B 到 70B 都只是把 R1 的推理能力…...

QT QML实现音频波形图进度条,可点击定位或拖动进度

前言 本项目实现了使用QT QML创建一个音频波形图进度条的功能。用户可以在界面上看到音频波形图&#xff0c;并且可以点击进度条上的位置进行定位&#xff0c;也可以拖动进度条来调整播放进度。可以让用户更方便地控制音频的播放进度&#xff0c;并且通过音频波形图可以直观地…...

浅谈StarRocks SQL性能检查与调优

StarRocks性能受数据建模、查询设计及资源配置核心影响。分桶键选择直接决定数据分布与Shuffle效率&#xff0c;物化视图可预计算复杂逻辑。执行计划需关注分区裁剪、谓词下推及Join策略&#xff0c;避免全表扫描或数据倾斜。资源层面&#xff0c;需平衡并行度、内存限制与网络…...

味觉传送器E-Taste:开启虚拟世界的味觉之门

味觉传送器E-Taste&#xff1a;开启虚拟世界的味觉之门 一、发明背景与动机 随着虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;技术的飞速发展&#xff0c;人们在虚拟世界中的沉浸感不断提升&#xff0c;视觉和听觉体验已经取得了显著的突破。然而…...

ISE 14.7 IP核 Block Memory Generator 更换coe

ISE 14.7 IP核 Block Memory Generator 更换coe 打开XCO 后缀&#xff0c;修改下面的coe_file 目录&#xff0c;并且重新regenerate ip 核即可...

【Auto-Scroll-List 组件设计与实现分析】

Auto-Scroll-List 组件设计与实现分析 gitee代码仓库 https://gitee.com/chennaiyuan/dayup-record/tree/master/%E4%B8%80%E4%BA%9B%E7%BB%84%E4%BB%B6/auto-scroll-list 1. 组件概述 我们封装的 AutoScrollList 是一个自动滚动列表组件&#xff0c;主要用于展示需要自动循…...

用hexo初始化博客执行hexo init时碰到的问题

用hexo初始化博客执行hexo init时碰到的问题 $ hexo init myblog INFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git fatal: unable to access https://github.com/hexojs/hexo-starter.git/: SSL certificate problem: unable to get local issuer cer…...

【C++真题】P1739 表达式括号匹配

P1739 表达式括号匹配 题目描述 假设一个表达式有英文字母&#xff08;小写&#xff09;、运算符&#xff08;、-、*、/&#xff09;和左右小&#xff08;圆&#xff09;括号构成&#xff0c;以 作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配&#x…...

Java1.8与testNg兼容问题:bad class file和SocketTimeoutException: Read timed out

背景&#xff1a; 公司 java JDK默认用的是1.8版本&#xff0c;已经在跑的一个项目使用的testng用的是6.14.3&#xff0c;我拿到后通过Test 运行失败&#xff0c;因为这个是一直在用的项目&#xff0c;就没想到是版本兼容问题&#xff0c;折腾了好一阵&#xff08;原开发者是通…...

高项第十二章——项目质量管理

项目质量管理包括把组织的质量政策应用于规划、管理、控制项目和产品质量要求&#xff0c;以满足干系人目标的各个过程。 项目质量管理针对的是项目过程中所涉及的活动 可交付成果质量管理针对的是项目生产的具体可交付成果&#xff0c;与可交付成果的性质和特性紧密相关 12…...

C# WPF编程-Menu

C# WPF编程-Menu 布局&#xff1a;代码&#xff1a;效果 在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;Menu控件用于创建下拉菜单或上下文菜单&#xff0c;它提供了丰富的定制选项来满足不同的应用需求。下面将介绍如何在WPF应用程序中使用Menu…...

python日期

导入包 from datetime import datetime现在时间 now datetime.now() print("当前时间:", now)当前时间: 2025-03-18 23:51:08.418953 格式化 formatted_now datetime.now().strftime("%Y-%m-%d %H:%M:%S") print("格式化后的时间:", forma…...

flutter 专题 一百零三

前不久&#xff0c;谷歌官方正式发布了Flutter的首个发布预览版&#xff08;Release Preview 1&#xff09;&#xff0c;这标志着谷歌进入了Flutter正式版&#xff08;1.0&#xff09;发布前的最后阶段&#xff0c;同时作为Google的重量级跨平台开发方案&#xff0c;此次更新也…...

【conda activate无效】 conda: error: argument COMMAND: invalid choice: ‘activate‘

conda activate失效了 在使用conda activate时出现报错&#xff1a; usage: conda [-h] [-v] [--no-plugins] [-V] COMMAND ... conda: error: argument COMMAND: invalid choice: activate (choose from clean, compare, config, create, info, init, install, list, notice…...

Chainlit 自定义元素开发指南:使用 JSX 和受限导入实现交互式界面

自定义元素 Custom Element 类允许你渲染一个自定义的 .jsx 代码片段。.jsx 文件应当放置在 public/elements/ELEMEN_NAME.jsx 目录下。 属性 name 字符串 自定义元素的名称。它应该与你的JSX文件名相匹配(不包括 .jsx扩展名)。 props 字典 传递给 JSX 的属性。 display El…...

CEF 控制台添加一函数,枚举 注册的供前端使用的CPP交互函数有哪些

一、前序知识 1、设置单进程模式,方便调试 void ClientApp::OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr<CefCommandLine> command_line) {if (process_type.empty()){//cef 在debug模式下有问题#ifdef _DEBUGcommand_line->Appe…...

C++之list类及模拟实现

目录 list的介绍 list的模拟实现 定义节点 有关遍历的重载运算符 list的操作实现 &#xff08;1&#xff09;构造函数 (2)拷贝构造函数 &#xff08;3&#xff09;赋值运算符重载函数 &#xff08;4&#xff09;析构函数和clear成员函数 &#xff08;5&#xff09;尾…...

C++八大常见的设计模式的实现与实践指南

目录 创建型模式 单例模式工厂方法模式抽象工厂模式 结构型模式 适配器模式装饰者模式代理模式 行为型模式 观察者模式策略模式命令模式 高级主题 现代C特性影响模式性能对比典型应用案例 设计模式分类 一、创建型模式 1. 单例模式&#xff08;Singleton&#xff09; 现代…...

02 windows qt配置ffmpeg开发环境搭建

版本说明 首先我使用ffmpeg版本是4.2.1QT使用版本5.14.2我选择是c编译...

什么是状态管理?有何种方式可以实现?它们之间有什么区别?

目录 一、状态管理的核心概念 二、常见状态管理方案及对比 1. 基础方案:setState 2. 官方推荐:Provider 3. 事件驱动:Bloc (Business Logic Component) 4. 响应式增强:Riverpod 5. 轻量级全能库:GetX 三、方案对比与选型指南 四、实战建议 在 Flutter 中,状态管…...

tf1.x和tf2.x在使用上的区别和联系是什么

tf1.x和tf2.x在使用上的区别和联系是什么 TensorFlow 1.x 和 2.x 在使用上有显著差异&#xff0c;主要体现在编程范式、API 设计和易用性上&#xff0c;但二者仍共享相同的核心目标&#xff08;深度学习框架&#xff09;和底层计算引擎。以下是主要区别和联系&#xff1a; 主要…...

Elasticsearch使用记录

一、配环境 1.docker版本部署es 8.x系列可以关掉ssl&#xff08;本地测试时&#xff09;&#xff0c;去docker的/usr/share/elasticsearch/config/elasticsearch.yml里面的“xpack.security.enabled:”设置成true就可以 2.window docker部署推荐教程&#xff1a;基于Docker安…...

【python web】一文掌握 Flask 的基础用法

文章目录 一、 Flask 介绍1.1 安装 Flask二、Flask的基本使用2.1 创建第一个 Flask 应用2.2 路由与视图函数2.3 请求与响应2.4 响应对象2.5 模板渲染2.6 模板继承2.7 静态文件管理2.8 Blueprint 蓝图2.9 错误处理三、Flask扩展与插件四、部署 Flask 应用五、总结Flask 是一个轻…...

第十六届蓝桥杯单片机组4T模拟赛二

难点&#xff1a; PCF8591同时测量两条通道数据 避免重复触发 采集触发时的时间数据存放 未采集的数据显示 清空数据 本题建议了解怎么去触发采集&#xff0c;怎么显示最近三次触发采集的时间即可。由于4T模拟赛的尿性有很多评测点是题目中没有要求的&#xff0c;另外测评的时候…...

《解锁华为黑科技:MindSpore+鸿蒙深度集成奥秘》

在数字化浪潮汹涌澎湃的当下&#xff0c;人工智能与操作系统的融合已成为推动科技发展的核心驱动力。华为作为科技领域的先锋&#xff0c;其AI开发框架MindSpore与鸿蒙系统的深度集成备受瞩目&#xff0c;开启了智能生态的新篇章。 华为MindSpore&#xff1a;AI框架的创新先锋…...