SAP PP- OPK8生产订单打印 配置Smart form.
OPK8 正常情况下是不可以配置Smart form 的
OPK8进入工单打印配置界面,选择Forms, 你会发现只有Script form 和PDF form(Adobe form)可选的,没有配置smartform的地方

这时候如果想要使用Smart form 可以用以下这种解决方案
通过IMG或OPK8访问的SAP PP车间控制输出文书工作的标准配置并未更改,以受益于Smartforms(ECC6 EHP 0)的引入。这限制了SapScript的使用,尽管SapScript能够提供设计自己的输出的功能,但仍有一些限制。我们遇到的主要限制之一是要求拥有能够打印条形码的打印机,以便将其添加到输出中,而使用Smartforms,您可以在任何以图形形式发送的打印机上打印条形码。除此之外,Smartforms的设计和定制要容易得多,这促使我寻找一种配置SAP以允许Smartforms的方法。
1.OPK8 配置form时,选择一个已经存在的Script form。这个form只是一个傀儡,实际打印不会调用该form.

2. 配置自定义的Print Program.

注意程序结构

两个必须的include
INCLUDE ppcoincl.
INCLUDE lcodrinc.
一个必须的子例程,名字必须为print_sub
完整程序如下
*&--------------------------------------------------------------------*
*& Report ZRMP0698_01
*&--------------------------------------------------------------------*
*&
*&--------------------------------------------------------------------*
REPORT zrmp0698_01 MESSAGE-ID zmp.
TABLES: nast.
INCLUDE znmp0698_revision_log IF FOUND.
INCLUDE ppcoincl.
INCLUDE lcodrinc.
INCLUDE znmp0698_01_top. * entry to print
PERFORM print_sub. *&---------------------------------------------------------------------*
*& Form PRINT_SUB
*&---------------------------------------------------------------------*
* entry to print
*----------------------------------------------------------------------*
FORM print_sub.
CLEAR: gv_fmname,gt_components,gt_operations,gs_header,gs_control,gs_options.
PERFORM sub_get_data.
PERFORM sub_get_fm.
PERFORM sub_set_print_param USING gs_control gs_options.
PERFORM sub_perform_output.
ENDFORM. *&---------------------------------------------------------------------*
*& Form SUB_GET_DATA
*&---------------------------------------------------------------------*
* Get input data
*----------------------------------------------------------------------*
FORM sub_get_data.
DATA:lv_number TYPE bapi_order_key-order_number.
DATA:ls_objects TYPE bapi_pp_order_objects.
DATA:ls_return TYPE bapiret2.
DATA:
lt_header TYPE STANDARD TABLE OF bapi_order_header1, "Header Info
lt_position TYPE STANDARD TABLE OF bapi_order_item, "Position Info
lt_operation TYPE STANDARD TABLE OF bapi_order_operation1, "Operation Info
lt_component TYPE STANDARD TABLE OF bapi_order_component. "Copmonents Info DATA:
lt_vali TYPE STANDARD TABLE OF api_vali. DATA:lv_object TYPE ausp-objek. DATA:lv_t TYPE char8. READ TABLE caufvd_tab INTO DATA(ls_tab) INDEX 1.
lv_number = ls_tab-aufnr. * 1. Issue error message if order doesn’t exist
IF lv_number IS INITIAL. CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = gc_msg_id
msg_nr = gc_msg_nr
msg_ty = gc_msg_e
msg_v1 = 'Order does not exist!'(m01)
msg_v2 = ' '
msg_v3 = ' '
msg_v4 = ' '
EXCEPTIONS
message_type_not_valid = 1
no_sy_message = 2
OTHERS = 3.
IF sy-subrc <> 0.
" UPDATE ERROR LOG, NO NEED CHECK.
ENDIF.
ENDIF. SELECT aufnr,
a~objnr,
stat
INTO TABLE @DATA(lt_jest)
FROM aufk AS a JOIN jest AS b
ON a~objnr = b~objnr
WHERE aufnr = @lv_number
AND stat = @gc_stat
AND inact = ''. IF sy-subrc = 0.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = gc_msg_id
msg_nr = gc_msg_nr
msg_ty = gc_msg_e
msg_v1 = 'Order has been delete!'(m02)
msg_v2 = ' '
msg_v3 = ' '
msg_v4 = ' '
EXCEPTIONS
message_type_not_valid = 1
no_sy_message = 2
OTHERS = 3.
IF sy-subrc <> 0.
" UPDATE ERROR LOG, NO NEED CHECK.
ENDIF.
ENDIF. ls_objects-header = abap_true.
ls_objects-operations = abap_true.
ls_objects-components = abap_true.
ls_objects-positions = abap_true. CALL FUNCTION 'BAPI_PRODORD_GET_DETAIL'
EXPORTING
number = lv_number
order_objects = ls_objects
IMPORTING
return = ls_return
TABLES
header = lt_header
position = lt_position
operation = lt_operation
component = lt_component. IF sy-subrc = 0.
IF lt_header IS NOT INITIAL.
READ TABLE lt_header INTO DATA(ls_header) INDEX 1.
IF sy-subrc = 0.
lv_object = ls_header-material.
PERFORM sub_convert_date USING sy-datum sy-uzeit
CHANGING gs_header-print_date gs_header-print_time.
gs_header-aufart = ls_header-order_type.
"Get special type CALL FUNCTION 'QC01_BATCH_VALUES_READ'
EXPORTING
i_val_matnr = ls_header-material
i_val_werks = ls_header-production_plant
i_val_charge = ls_header-batch
i_language = sy-langu
i_date = sy-datum
TABLES
t_val_tab = lt_vali
EXCEPTIONS
no_class = 1
internal_error = 2
no_values = 3
no_chars = 4
OTHERS = 5.
IF sy-subrc = 0.
SORT lt_vali BY atnam.
READ TABLE lt_vali INTO DATA(ls_vali) WITH KEY atnam = gc_atnam BINARY SEARCH.
IF sy-subrc = 0.
gs_header-special_type = ls_vali-atwtb.
ENDIF.
ELSE.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = sy-msgid
msg_nr = sy-msgno
msg_ty = sy-msgty
msg_v1 = sy-msgv1
msg_v2 = sy-msgv2
msg_v3 = sy-msgv3
msg_v4 = sy-msgv4
EXCEPTIONS
message_type_not_valid = 1
no_sy_message = 2
OTHERS = 3.
IF sy-subrc <> 0.
" UPDATE ERROR LOG, NO NEED CHECK.
ENDIF.
ENDIF. gs_header-batch = ls_header-batch.
*Begin DEL:Joe Wang:23-Apr-2021:ECR202002738
* SELECT SINGLE licha INTO gs_header-licha
* FROM mcha
* WHERE matnr = ls_header-material
* AND werks = ls_header-production_plant
* AND charg = ls_header-batch.
*End DEL:Joe Wang:23-Apr-2021:ECR202002738 *Begin ADD:Joe Wang:23-Apr-2021:ECR202002738
SELECT SINGLE licha INTO gs_header-licha
FROM mch1
WHERE matnr = ls_header-material
AND charg = ls_header-batch
AND lvorm = ''.
*End ADD:Joe Wang:23-Apr-2021:ECR202002738 IF sy-subrc = 0.
IF gs_header-licha IS INITIAL.
gs_header-licha = gs_header-batch.
ENDIF.
ENDIF. gs_header-aufnr = ls_header-order_number.
gs_header-plant = ls_header-production_plant.
gs_header-fevor = ls_header-production_scheduler.
gs_header-co_dispo = ls_header-mrp_controller.
gs_header-matnr = ls_header-material. SELECT pmatn INTO gs_header-pmatn UP TO 1 ROWS
FROM mvke
WHERE matnr = ls_header-material
*Begin ADD:Joe Wang:23-Apr-2021:ECR202002738
and dwerk = ls_header-production_plant.
*End ADD:Joe Wang:23-Apr-2021:ECR202002738
ENDSELECT.
IF sy-subrc NE 0.
"no acctions here , keep gs_header-pmatn
ENDIF.
gs_header-co_matxt = ls_header-material_text.
READ TABLE lt_position INTO DATA(ls_pos) INDEX 1.
IF sy-subrc = 0.
gs_header-verid = ls_pos-production_version. SELECT SINGLE text1 INTO gs_header-vers_text
FROM mkal
WHERE matnr = ls_header-material
AND werks = ls_header-production_plant
AND verid = ls_pos-production_version.
IF sy-subrc NE 0.
"no acctions here , keep gs_header-vers_text
ENDIF.
ENDIF. SELECT a~doknr,
a~dokvr,
c~datuv
INTO TABLE @DATA(lt_draw)
FROM drad AS a
INNER JOIN draw AS b
ON a~dokar = b~dokar AND a~doknr = b~doknr AND a~dokvr = b~dokvr AND a~doktl = b~doktl
LEFT JOIN aenr AS c ON b~aennr = c~aennr
WHERE a~objky = @ls_header-material
AND a~dokar = @gc_dokar
AND b~dokst = @gc_dokst. IF sy-subrc = 0.
SORT lt_draw BY datuv DESCENDING.
READ TABLE lt_draw INTO DATA(ls_draw) INDEX 1.
IF sy-subrc = 0.
gs_header-doknr = ls_draw-doknr.
gs_header-dokvr = ls_draw-dokvr.
ENDIF.
ENDIF.
gs_header-gamng = ls_header-target_quantity.
gs_header-gamng_st = gs_header-gamng.
CONDENSE gs_header-gamng_st NO-GAPS.
SHIFT gs_header-gamng_st RIGHT DELETING TRAILING gc_zero.
SHIFT gs_header-gamng_st RIGHT DELETING TRAILING gc_point.
CONDENSE gs_header-gamng_st NO-GAPS.
gs_header-unit = ls_header-unit. PERFORM sub_convert_date USING ls_header-start_date ls_header-start_time
CHANGING gs_header-start_date lv_t. PERFORM sub_convert_date USING ls_header-finish_date ls_header-finish_time
CHANGING gs_header-finish_date lv_t. SELECT ablad INTO gs_header-ablad UP TO 1 ROWS
FROM afpo
WHERE aufnr = ls_header-order_number.
ENDSELECT.
IF sy-subrc NE 0.
"no acctions here , keep gs_header-ablad
ENDIF.
ENDIF.
ENDIF. IF lt_component IS NOT INITIAL.
SELECT rsnum,
rspos,
schgt
INTO TABLE @DATA(lt_resb)
FROM resb FOR ALL ENTRIES IN @lt_component
WHERE rsnum = @lt_component-reservation_number
AND rspos = @lt_component-reservation_item.
IF sy-subrc = 0.
SORT lt_resb BY rsnum rspos.
ENDIF.
ENDIF. LOOP AT lt_component INTO DATA(ls_cm).
APPEND INITIAL LINE TO gt_components ASSIGNING FIELD-SYMBOL(<fs_cm>). *Begin DEL:Joe Wang:23-Apr-2021:ECR202002738
* <fs_cm>-item = ls_cm-reservation_item.
*End DEL:Joe Wang:23-Apr-2021:ECR202002738 *Begin ADD:Joe Wang:23-Apr-2021:ECR202002738
<fs_cm>-item = ls_cm-item_number.
*End ADD:Joe Wang:23-Apr-2021:ECR202002738 <fs_cm>-matnr = ls_cm-material.
<fs_cm>-maktx = ls_cm-material_description.
<fs_cm>-erfmg = ls_cm-entry_uom.
<fs_cm>-bdmng = ls_cm-req_quan.
<fs_cm>-bdmng_st = ls_cm-req_quan.
CONDENSE <fs_cm>-bdmng_st NO-GAPS.
<fs_cm>-batch = ls_cm-batch.
READ TABLE lt_resb INTO DATA(ls_resb) WITH KEY rsnum = ls_cm-reservation_number
rspos = ls_cm-reservation_item BINARY SEARCH.
IF sy-subrc = 0.
<fs_cm>-schgt = ls_resb-schgt.
ENDIF. UNASSIGN <fs_cm>.
ENDLOOP. SORT gt_components BY item. IF lt_operation IS NOT INITIAL.
SELECT steus,
txt
INTO TABLE @DATA(lt_t430t)
FROM t430t
FOR ALL ENTRIES IN @lt_operation
WHERE steus = @lt_operation-opr_cntrl_key
AND spras = @sy-langu
AND plnaw = @gc_plnaw. IF sy-subrc = 0.
SORT lt_t430t BY steus.
ENDIF. SELECT aufpl,
aplzl,
vgw01,
vge01,
vgw02,
vge02,
vgw03,
vge03
INTO TABLE @DATA(lt_afvv)
FROM afvv
FOR ALL ENTRIES IN @lt_operation
WHERE aufpl = @lt_operation-routing_no
AND aplzl = @lt_operation-counter.
IF sy-subrc = 0.
SORT lt_afvv BY aufpl aplzl.
ENDIF.
ENDIF. LOOP AT lt_operation INTO DATA(ls_op).
APPEND INITIAL LINE TO gt_operations ASSIGNING FIELD-SYMBOL(<fs_op>).
<fs_op>-vornr = ls_op-operation_number.
<fs_op>-ltxa1 = ls_op-description.
<fs_op>-steus = ls_op-opr_cntrl_key.
READ TABLE lt_t430t INTO DATA(ls_430t) WITH KEY steus = ls_op-opr_cntrl_key BINARY SEARCH.
IF sy-subrc = 0.
<fs_op>-steutxt = ls_430t-txt.
ENDIF. <fs_op>-arbpl = ls_op-work_center.
<fs_op>-co_rueck = ls_op-conf_no. READ TABLE lt_afvv INTO DATA(ls_afvv) WITH KEY aufpl = ls_op-routing_no
aplzl = ls_op-counter BINARY SEARCH.
IF sy-subrc = 0.
<fs_op>-setup = |{ ls_afvv-vgw01 } { ls_afvv-vge01 }|.
<fs_op>-machine = |{ ls_afvv-vgw02 } { ls_afvv-vge02 }|.
<fs_op>-labor = |{ ls_afvv-vgw03 } { ls_afvv-vge03 }|.
ENDIF.
UNASSIGN <fs_op>.
ENDLOOP.
SORT gt_operations BY vornr.
ENDIF. ENDFORM. *&---------------------------------------------------------------------*
*& Form SUB_CONVERT_DATE
*&---------------------------------------------------------------------*
* Convert date into local time
*----------------------------------------------------------------------*
FORM sub_convert_date USING i_date TYPE syst_datum
i_time TYPE syst_uzeit
CHANGING
c_date TYPE char10
c_time TYPE char8.
DATA: lv_date TYPE sy-datum,
lv_time TYPE sy-uzeit.
DATA:lv_tzone TYPE timezone.
DATA:lv_timesp TYPE tzonref-tstamps."TIME STAMPS CALL FUNCTION 'GET_SYSTEM_TIMEZONE'
IMPORTING
timezone = lv_tzone
EXCEPTIONS
customizing_missing = 1
OTHERS = 2. IF sy-subrc <> 0.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = sy-msgid
msg_nr = sy-msgno
msg_ty = sy-msgty
msg_v1 = sy-msgv1
msg_v2 = sy-msgv2
msg_v3 = sy-msgv3
msg_v4 = sy-msgv4
EXCEPTIONS
message_type_not_valid = 1
no_sy_message = 2
OTHERS = 3.
IF sy-subrc <> 0.
" UPDATE ERROR LOG, NO NEED CHECK.
ENDIF.
ENDIF. CALL FUNCTION 'IB_CONVERT_INTO_TIMESTAMP'
EXPORTING
i_datlo = i_date
i_timlo = i_time
i_tzone = lv_tzone
IMPORTING
e_timestamp = lv_timesp. IF sy-subrc <> 0.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = sy-msgid
msg_nr = sy-msgno
msg_ty = sy-msgty
msg_v1 = sy-msgv1
msg_v2 = sy-msgv2
msg_v3 = sy-msgv3
msg_v4 = sy-msgv4
EXCEPTIONS
message_type_not_valid = 1
no_sy_message = 2
OTHERS = 3.
IF sy-subrc <> 0.
" UPDATE ERROR LOG, NO NEED CHECK.
ENDIF.
ENDIF. CALL FUNCTION 'IB_CONVERT_FROM_TIMESTAMP'
EXPORTING
i_timestamp = lv_timesp
i_tzone = sy-zonlo
IMPORTING
e_datlo = lv_date
e_timlo = lv_time. IF sy-subrc = 0.
CONCATENATE lv_date+0(4) lv_date+4(2) lv_date+6(2) INTO c_date SEPARATED BY gc_sp_1.
CONCATENATE lv_time+0(2) lv_time+2(2) lv_time+4(2) INTO c_time SEPARATED BY gc_sp_2.
ENDIF.
ENDFORM. *&---------------------------------------------------------------------*
*& Form FRM_SET_PRINT_PARAM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LS_CONTROL_PARAM text
* <--P_LS_COMPOSER_PARAM text
*----------------------------------------------------------------------*
FORM sub_set_print_param CHANGING pv_control_param TYPE ssfctrlop
pv_composer_param TYPE ssfcompop. DATA: ls_itcpo TYPE itcpo.
DATA: lv_repid TYPE sy-repid.
DATA: lv_device TYPE tddevice.
DATA: lv_retcode TYPE sysubrc.
lv_repid = sy-repid. CALL FUNCTION 'WFMC_PREPARE_SMART_FORM'
EXPORTING
pi_nast = nast
pi_repid = lv_repid
IMPORTING
pe_returncode = lv_retcode
pe_itcpo = ls_itcpo
pe_device = lv_device. IF sy-subrc = 0 AND lv_retcode = 0.
MOVE-CORRESPONDING ls_itcpo TO pv_composer_param.
pv_composer_param-tdnewid = abap_true.
pv_control_param-device = lv_device.
pv_control_param-no_dialog = abap_true.
pv_control_param-getotf = ls_itcpo-tdgetotf.
pv_control_param-langu = nast-spras.
ELSE.
* pv_composer_param-tdarmod = abap_true.
pv_composer_param-tdnewid = abap_true.
pv_composer_param-tdimmed = abap_true.
pv_composer_param-tddest = print_co-desti.
* pv_control_param-device = 'LP01'.
pv_control_param-no_dialog = abap_true.
* pv_control_param-getotf = ls_itcpo-tdgetotf.
pv_control_param-langu = print_co-spras.
ENDIF.
ENDFORM. *&---------------------------------------------------------------------*
*& Form SUB_GET_FM
*&---------------------------------------------------------------------*
* This routine dynamically passes the function module name
*----------------------------------------------------------------------*
FORM sub_get_fm .
DATA:lv_name TYPE rvari_vnam. " ABAP: Name of Variant Variable
DATA:l_numb TYPE tvarv_numb . " ABAP: Current selection number
MOVE print_co-drvar TO l_numb .
CONCATENATE gc_sfname print_co-lstid INTO lv_name.
* Fetch the smartform name based on output type and Current selection
* number
SELECT SINGLE low INTO gv_formname FROM tvarv " Table of variables in selection criteria
WHERE name = lv_name
AND type = gc_type_p
AND numb = l_numb. "Print Varient
CLEAR: gv_fmname.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = gv_formname
IMPORTING
fm_name = gv_fmname
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc NE 0.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = sy-msgid
msg_nr = sy-msgno
msg_ty = sy-msgty
msg_v1 = sy-msgv1
msg_v2 = sy-msgv2
msg_v3 = sy-msgv3
msg_v4 = sy-msgv4
EXCEPTIONS
message_type_not_valid = 1
no_sy_message = 2
OTHERS = 3.
IF sy-subrc <> 0.
" UPDATE ERROR LOG, NO NEED CHECK.
ENDIF. ENDIF. ENDFORM. " sub_get_fm *&---------------------------------------------------------------------*
*& Form sub_perform_output
*&---------------------------------------------------------------------*
* This routine populates the final tables and structures being
* passed to the smartforms
*----------------------------------------------------------------------*
FORM sub_perform_output . * The smartform calling function
IF gv_fmname IS NOT INITIAL. CALL FUNCTION gv_fmname
EXPORTING
control_parameters = gs_control
output_options = gs_options
it_components = gt_components
it_operations = gt_operations
is_header = gs_header
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = sy-msgid
msg_nr = sy-msgno
msg_ty = sy-msgty
msg_v1 = sy-msgv1
msg_v2 = sy-msgv2
msg_v3 = sy-msgv3
msg_v4 = sy-msgv4
EXCEPTIONS
message_type_not_valid = 1
no_sy_message = 2
OTHERS = 3.
IF sy-subrc <> 0.
" UPDATE ERROR LOG, NO NEED CHECK.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " sub_perform_output
真正的smartform 配置在表TVARV 里,改信息需要workbance 工作台传输请求。注意请求号0007的配置 和OPK8 的Print variant 有关。

搞定!
SAP PP- OPK8生产订单打印 配置Smart form.的更多相关文章
- SAP S/4HANA生产订单创建时使用的工厂数据是从什么地方带出来的
大家如果使用我github上的这段代码创建S/4HANA的生产订单时,一定会发现,我在代码里并没有硬编码来指定生产订单的ID,然而运行时会发现我在系统里配置的这个2800被自动使用了,这是怎么做到的呢 ...
- SAP S/4HANA生产订单的BAdI增强点之Initialize方法
在S/4HANA里创建生产订单时,有一个增强点WORKORDER_UPDATE: 这个CAUFVDB里存放的是生产订单抬头级别的数据: 我们来观察下运行时这个结构里存放的数据. 请大家用我github ...
- PP读取生产订单状态
转自http://blog.csdn.net/heng0757/article/details/6656089 传递订单号码,可以返回该订单的状态 REPORT ZCMH2.TABLES : JES ...
- PP生产订单成本的计划、控制和结算
SAP系统成本分析功能关注订单的成本,通过对计划成本和实际成本的比较分析,可以发现成本控制上的问题,以便及时解决问题.1.订单成本计划在基础数据齐全的基础上,系统可以自动滚算生产订单的成本.生产订单计 ...
- SAP PP 生产订单变更记录保存
*&---------------------------------------------------------------------* *& 包括 ZXCO1U01 *&am ...
- PP生产订单创建、下达、报工、收货、投料
转自http://blog.sina.com.cn/s/blog_69fb8eb60102vpjd.html SAP 物料订单创建.下达.报工.收货与投料(ABAP代码) (2015-06-03 22 ...
- SAP生产订单状态
SAP系统的常见订单状态如下: · CRTD (创建):标识生产订单刚刚创建,此时禁止做后续发料和报工确认等操作: · PREL (部分下达):当生产订单部分下达时,如仅下 ...
- SAP 生产订单变更管理 OCM Order Changement Management
SAP OCM Order Changement Management 一.目的 订单变更管理系统是当我们的订单(生产订单.计划订单.采购订单)已经存在的时候,其物料主数据或销售数据有变更时,我们可 ...
- PP篇11 增、改生产订单组件BAPI
增.改生产订单组件BAPI BAPI_ALM_ORDER_MAINTAIN USE BAPI_ALM_ORDER_MAINTAIN TO CREATE OR CHANGE PM WORK ORDER ...
随机推荐
- 论文解读(MCGC)《Multi-view Contrastive Graph Clustering》
论文信息 论文标题:Multi-view Contrastive Graph Clustering论文作者:Erlin Pan.Zhao Kang论文来源:2021, NeurIPS论文地址:down ...
- Java语言学习day06-7月05日
今日内容介绍流程控制语句之循环语句循环高级###10for循环_1 * A: for循环_1 * a: 使用格式 for(初始化变量 ; 条件 ; 增量){ 循环体; } * b: 各模块解释 初始化 ...
- IDEA Debug过程中使用Drop Frame或Reset Frame实现操作回退
大家在Debug程序的时候,是否遇到过因为"下一步"按太快,而导致跳过了想要深入分析的那段代码?是不是很想要有"回到上一步"这样的操作呢? 在IDEA中就提供了 ...
- react实战系列 —— 起步(mockjs、第一个模块、docusaurus)
其他章节请看: react实战 系列 起步 本篇我们首先引入 mockjs ,然后进入 spug 系统,接着模仿"任务计划"模块实现一个类似的一级导航页面("My任务计划 ...
- XCTF练习题---WEB---Training-WWW-Robots
XCTF练习题---WEB---Training-WWW-Robots flag:cyberpeace{e37180e3f5ad17b4ac71a131e2de1fcb} 解题步骤: 1.观察题目,打 ...
- Docker极简入门:使用Docker-Compose 搭建redis集群
为了构建一个集群,我们首先要让 redis 启用集群模式 一个简单的配置文件如下redis.conf # redis.conf file port 6379 cluster-enabled yes c ...
- C#关于在返回值为Task方法中使用Thread.Sleep引发的思考
起因 最近有个小伙伴提出了一个问题,就是在使用.net core的BackgroundService的时候,对应的ExecuteAsync方法里面写如下代码,会使程序一直卡在当前方法,不会继续执行,代 ...
- [题解] [LOJ2743]「JOI Open 2016」摩天大楼
题目大意 将 \(N\) 个互不相同的整数 \(A_1 , A_2 , ⋯ , A_N\) 任意排列成 \(B_1 , B_2 , ⋯ , B_N\) . 要求 \(∑^{N−1}_{i=1} |B_ ...
- Django学习——图书相关表关系建立、基于双下划线的跨表查询、聚合查询、分组查询、F查询、Q查询、admin的使用、使用脚本调用Django、Django查看源生sql
0 图书相关表关系建立 1.5个表 2.书籍表,作者表,作者详情表(垂直分表),出版社表,书籍和作者表(多对多关系) 一对一 多对多 本质都是一对多 外键关系 3.一对一的关系,关联字段可以写在任意一 ...
- ThinkPHP信息泄露
昨天遇到了一个ThinkPHP日志泄露,然后我就写了个脚本利用shodan搜索批量的来找一下漏洞,估计已经被人撸完了,不过还有一些网站有着此漏洞.ip收集和漏洞验证脚本工具我会放在最下面,需要的直接复 ...