1. ***INCLUDE MV45AFZZ .
  2.  
  3. *---------------------------------------------------------------------*
  4. * FORM ZZEXAMPLE *
  5. *---------------------------------------------------------------------*
  6. * text...................................... *
  7. *---------------------------------------------------------------------*
  8. *FORM ZZEXAMPLE.
  9.  
  10. * ...
  11.  
  12. *ENDFORM.
  13.  
  14. *eject
  15. *---------------------------------------------------------------------*
  16. * FORM USEREXIT_DELETE_DOCUMENT *
  17. *---------------------------------------------------------------------*
  18. * This userexit can be used to delete data in additional tables *
  19. * when a sales document is deleted. *
  20. * *
  21. * This form is called in dialog at the end of form BELEG_LOESCHEN*
  22. * just before form BELEG_SICHERN is performed to delete the *
  23. * datas on the database. *
  24. * *
  25. *---------------------------------------------------------------------*
  26. FORM userexit_delete_document.
  27.  
  28. ENDFORM. "USEREXIT_DELETE_DOCUMENT
  29. *eject
  30.  
  31. *---------------------------------------------------------------------*
  32. * FORM USEREXIT_FIELD_MODIFICATION *
  33. *---------------------------------------------------------------------*
  34. * This userexit can be used to modify the attributes of *
  35. * screen fields. *
  36. * This form is processed for each field in the screen. *
  37. * *
  38. * The use of the fields screen-group1 to screen-group4 is: *
  39. * *
  40. * Screen-group1: Automatic modification contolles by transaction*
  41. * MFAW. *
  42. * Screen-group2: Contents 'LOO' for steploop-fields. *
  43. * Screen-group3: Used for modififaction, which are dependent on *
  44. * control tables or other fix information. *
  45. * Screen-group4: Unused *
  46. * *
  47. * For field mofifications, which are dependent on the document *
  48. * status, you can use the status field in the workareas *
  49. * XVBAP for item status and XVBUK for header status. *
  50. * *
  51. * This form is called from module FELDAUSWAHL. *
  52. * *
  53. *---------------------------------------------------------------------*
  54. FORM userexit_field_modification.
  55.  
  56. * CASE SCREEN-GROUP3.
  57. * WHEN '.
  58. * IF VBAK-VBTYP NE 'A'.
  59. * .
  60. * ENDIF.
  61. * ENDCASE.
  62. * CASE screen-group2.
  63. * WHEN 'LOO'.
  64. * '.
  65. * '.
  66. * ENDIF.
  67. * ENDCASE.
  68. * CASE SCREEN-NAME.
  69. * WHEN 'VBAK-VBELN'.
  70. * .
  71. * ENDCASE.
  72. ** Begin v1.
  73. ** 以下是免费样品订单(ZFD)对售达方的类型判断,限制售达方只能是内部办事处:账户组为: Susan
  74. IF sy-tcode = 'VA01' OR sy-tcode = 'VA02' .
  75. DATA:zktokd LIKE kna1-ktokd,kunnr LIKE vbak-kunnr.
  76. IF xvbak-auart = 'ZFD' AND xvbak-kunnr IS NOT INITIAL.
  77. * zktokd = kna1-ktokd while kunnr = xvbak-annr.
  78. SELECT SINGLE ktokd FROM kna1
  79. INTO zktokd
  80. WHERE kunnr = xvbak-kunnr.
  81. '.
  82. ) WITH '免费样品订单售达方必须是内部销售办事处'.
  83. EXIT.
  84. ENDIF.
  85. ENDIF.
  86. ENDIF.
  87. ** End v1.
  88. IF sy-tcode = 'VA01' .
  89.  
  90. DATA:jhzq LIKE ymara_sd-jhzq,jhzqmax LIKE ymara_sd-jhzq.
  91. DATA:matnr LIKE mara-matnr.
  92. LOOP AT xvbap WHERE matnr IS NOT INITIAL .
  93. CLEAR jhzq.
  94. SELECT SINGLE jhzq FROM ymara_sd
  95. INTO jhzq
  96. WHERE matnr = xvbap-matnr.
  97. IF jhzqmax < jhzq.
  98. jhzqmax = jhzq.
  99. matnr = xvbap-matnr.
  100. ENDIF.
  101.  
  102. ENDLOOP.
  103. DATA:dat LIKE sy-datum.
  104. IF matnr IS NOT INITIAL AND jhzqmax IS NOT INITIAL.
  105. .
  106. dat = sy-datum .
  107. WHILE i <= jhzqmax.
  108. i = i + .
  109. dat = dat + .
  110. *--------------工厂日历的日期---------------------
  111. CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
  112. EXPORTING
  113. date = dat
  114. factory_calendar_id = 'CN'
  115. IMPORTING
  116. date = dat.
  117. ENDWHILE.
  118. *------------------end ----------------------------
  119. vbak-vdatu = dat .
  120. xvbep-edatu = dat .
  121. MODIFY xvbep TRANSPORTING edatu WHERE posnr IS NOT INITIAL .
  122.  
  123. ) WITH '该订单最长交货物料为' matnr '天数为:' jhzqmax.
  124. ENDIF.
  125. ENDIF.
  126. ENDFORM. "USEREXIT_FIELD_MODIFICATION
  127. *eject
  128.  
  129. *---------------------------------------------------------------------*
  130. * FORM USEREXIT_MOVE_FIELD_TO_VBAK *
  131. *---------------------------------------------------------------------*
  132. * This userexit can be used to move some fields into the sales *
  133. * dokument header workaerea VBAK. *
  134. * *
  135. * SVBAK-TABIX = : Create header *
  136. * SVBAK-TABIX > : Change header *
  137. * *
  138. * This form is called at the end of form VBAK_FUELLEN. *
  139. * *
  140. *---------------------------------------------------------------------*
  141. FORM userexit_move_field_to_vbak.
  142. *DATA:jhzq LIKE ymara_sd-jhzq,jhzqmax LIKE ymara_sd-jhzq.
  143. *
  144. * LOOP AT xvbap WHERE matnr IS NOT INITIAL .
  145. * CLEAR jhzq.
  146. * select single jhzq FROM ymara_sd
  147. * INTO jhzq
  148. * where matnr = xvbap-matnr.
  149. * IF jhzqmax < jhzq.
  150. * jhzqmax = jhzq.
  151. * ENDIF.
  152. * xvbep-edatu = sy-datum - jhzq .
  153. * xvbep-bddat = sy-datum - jhzq .
  154. * xvbep-tddat = sy-datum - jhzq .
  155. * xvbep-mbdat = sy-datum - jhzq .
  156. * xvbep-lddat = sy-datum - jhzq .
  157. * xvbep-wadat = sy-datum - jhzq .
  158. * MODIFY xvbep TRANSPORTING
  159. * edatu
  160. * bddat
  161. * tddat
  162. * mbdat
  163. * lddat
  164. * wadat
  165. * WHERE posnr = xvbap-posnr. .
  166. * ENDLOOP.
  167. * vbak-vdatu = sy-datum - jhzqmax .
  168.  
  169. ENDFORM. "USEREXIT_MOVE_FIELD_TO_VBAK
  170. *eject
  171.  
  172. *---------------------------------------------------------------------*
  173. * FORM USEREXIT_MOVE_FIELD_TO_VBAP *
  174. *---------------------------------------------------------------------*
  175. * This userexit can be used to move some fields into the sales *
  176. * dokument item workaerea VBAP *
  177. * *
  178. * SVBAP-TABIX = : Create item *
  179. * SVBAP-TABIX > : Change item *
  180. * *
  181. * This form is called at the end of form VBAP_FUELLEN. *
  182. * *
  183. *---------------------------------------------------------------------*
  184. FORM userexit_move_field_to_vbap.
  185. *
  186. * DATA:jhzq LIKE ymara_sd-jhzq,jhzqmax LIKE ymara_sd-jhzq.
  187. *
  188. * LOOP AT xvbap WHERE matnr IS NOT INITIAL .
  189. * CLEAR jhzq.
  190. * select single jhzq FROM ymara_sd
  191. * INTO jhzq
  192. * where matnr = xvbap-matnr.
  193. * IF jhzqmax < jhzq.
  194. * jhzqmax = jhzq.
  195. * ENDIF.
  196. ** xvbep-edatu = sy-datum - jhzq .
  197. ** xvbep-bddat = sy-datum - jhzq .
  198. ** xvbep-tddat = sy-datum - jhzq .
  199. ** xvbep-mbdat = sy-datum - jhzq .
  200. ** xvbep-lddat = sy-datum - jhzq .
  201. ** xvbep-wadat = sy-datum - jhzq .
  202. ** MODIFY xvbep TRANSPORTING
  203. ** edatu
  204. ** bddat
  205. ** tddat
  206. ** mbdat
  207. ** lddat
  208. ** wadat
  209. ** WHERE posnr = xvbap-posnr. .
  210. * ENDLOOP.
  211. * vbak-vdatu = sy-datum - jhzqmax .
  212. *
  213. ENDFORM. "USEREXIT_MOVE_FIELD_TO_VBAP
  214. *eject
  215.  
  216. *---------------------------------------------------------------------*
  217. * FORM USEREXIT_MOVE_FIELD_TO_VBEP *
  218. *---------------------------------------------------------------------*
  219. * This userexit can be used to move some fields into the sales *
  220. * dokument schedule line workaerea VBEP *
  221. * *
  222. * SVBEP-TABIX = : Create schedule line *
  223. * SVBEP-TABIX > : Change schedule line *
  224. * *
  225. * This form is called at the end of form VBEP_FUELLEN. *
  226. * *
  227. *---------------------------------------------------------------------*
  228. FORM userexit_move_field_to_vbep.
  229. DATA:jhzq LIKE ymara_sd-jhzq,jhzqmax LIKE ymara_sd-jhzq.
  230. CLEAR jhzq.
  231. *
  232. * LOOP AT xvbep .
  233. *
  234. ** CLEAR jhzq.
  235. * READ TABLE xvbap WITH KEY vbeln = xvbep-vbeln posnr = xvbep-posnr.
  236. * SELECT SINGLE jhzq FROM ymara_sd
  237. * INTO jhzq
  238. * WHERE matnr = xvbap-matnr.
  239. * IF jhzqmax < jhzq.
  240. * jhzqmax = jhzq.
  241. * ENDIF.
  242. * xvbep-edatu = sy-datum - jhzq .
  243. * xvbep-bddat = sy-datum - jhzq .
  244. * xvbep-tddat = sy-datum - jhzq .
  245. * xvbep-mbdat = sy-datum - jhzq .
  246. * xvbep-lddat = sy-datum - jhzq .
  247. * xvbep-wadat = sy-datum - jhzq .
  248. * MODIFY xvbep .
  249. * ENDLOOP.
  250. * vbak-vdatu = sy-datum - jhzqmax .
  251. * rv45a-etdat = sy-datum - jhzqmax .
  252. ENDFORM. "USEREXIT_MOVE_FIELD_TO_VBEP
  253. *eject
  254.  
  255. *---------------------------------------------------------------------*
  256. * FORM USEREXIT_MOVE_FIELD_TO_VBKD *
  257. *---------------------------------------------------------------------*
  258. * This userexit can be used to move some fields into the sales *
  259. * dokument business data workaerea VBKD *
  260. * *
  261. * SVBKD-TABIX = : Create data *
  262. * SVBKD-TABIX > : Change data *
  263. * *
  264. * This form is called at the end of form VBKD_FUELLEN. *
  265. * *
  266. *---------------------------------------------------------------------*
  267. FORM userexit_move_field_to_vbkd.
  268.  
  269. *
  270. * VBKD-zzfield = xxxx-zzfield2.
  271.  
  272. ENDFORM. "USEREXIT_MOVE_FIELD_TO_VBKD
  273. *eject
  274.  
  275. *---------------------------------------------------------------------*
  276. * FORM USEREXIT_NUMBER_RANGE *
  277. *---------------------------------------------------------------------*
  278. * This userexit can be used to determine the numberranges for *
  279. * the internal document number. *
  280. * *
  281. * US_RANGE_INTERN - internal number range *
  282. * *
  283. * This form is called from form BELEG_SICHERN *
  284. * *
  285. *---------------------------------------------------------------------*
  286. FORM userexit_number_range USING us_range_intern.
  287.  
  288. * Example: Numer range from TVAK like in standard
  289. * US_RANGE_INTERN = TVAK-NUMKI.
  290. ENDFORM. "USEREXIT_NUMBER_RANGE
  291. *eject
  292.  
  293. *---------------------------------------------------------------------*
  294. * FORM USEREXIT_PRICING_PREPARE_TKOMK *
  295. *---------------------------------------------------------------------*
  296. * This userexit can be used to move additional fields into the *
  297. * communication table which is used for pricing: *
  298. * *
  299. * TKOMK for header fields *
  300. * *
  301. * This form is called from form PREISFINDUNG_VORBEREITEN. *
  302. * *
  303. *---------------------------------------------------------------------*
  304. FORM userexit_pricing_prepare_tkomk.
  305. CLEAR tkomk-vrtnr.
  306. PERFORM xvbpa_lesen(sapfv45k) USING 'VE'
  307. vbap-posnr
  308. sy-tabix.
  309. IF xvbpa-updkz <> 'D'.
  310. tkomk-vrtnr = xvbpa-pernr.
  311. ENDIF.
  312.  
  313. * TKOMK-zzfield = xxxx-zzfield2.
  314.  
  315. ENDFORM. "USEREXIT_PRICING_PREPARE_TKOMK
  316. *eject
  317.  
  318. *---------------------------------------------------------------------*
  319. * FORM USEREXIT_PRICING_PREPARE_TKOMP *
  320. *---------------------------------------------------------------------*
  321. * This userexit can be used to move additional fields into the *
  322. * communication table which is used for pricing: *
  323. * *
  324. * TKOMP for item fields *
  325. * *
  326. * This form is called from form PREISFINDUNG_VORBEREITEN. *
  327. * *
  328. *---------------------------------------------------------------------*
  329. FORM userexit_pricing_prepare_tkomp.
  330.  
  331. * TKOMP-zzfield = xxxx-zzfield2.
  332.  
  333. ENDFORM. "USEREXIT_PRICING_PREPARE_TKOMP
  334. *eject
  335.  
  336. *---------------------------------------------------------------------*
  337. * FORM USEREXIT_READ_DOCUMENT *
  338. *---------------------------------------------------------------------*
  339. * This userexit can be used to read data in additional tables *
  340. * when the program reads a sales document. *
  341. * *
  342. * This form is called at the end of form BELEG_LESEN. *
  343. * *
  344. *---------------------------------------------------------------------*
  345. FORM userexit_read_document.
  346.  
  347. ENDFORM. "USEREXIT_READ_DOCUMENT
  348. *eject
  349.  
  350. *---------------------------------------------------------------------*
  351. * FORM USEREXIT_SAVE_DOCUMENT *
  352. *---------------------------------------------------------------------*
  353. * This userexit can be used to save data in additional tables *
  354. * when a document is saved. *
  355. * *
  356. * If field T180-TRTYP contents 'H', the document will be *
  357. * created, else it will be changed. *
  358. * *
  359. * This form is called at from form BELEG_SICHERN, before COMMIT *
  360. * *
  361. *---------------------------------------------------------------------*
  362. FORM userexit_save_document.
  363.  
  364. * Example:
  365. * CALL FUNCTION 'ZZ_EXAMPLE'
  366. * IN UPDATE TASK
  367. * EXPORTING
  368. * ZZTAB = ZZTAB.
  369. *DATA:jhzq LIKE ymara_sd-jhzq,jhzqmax LIKE ymara_sd-jhzq.
  370. * LOOP AT xvbap WHERE matnr IS NOT INITIAL.
  371. * CLEAR jhzq.
  372. * SELECT SINGLE jhzq FROM ymara_sd
  373. * INTO jhzq
  374. * WHERE matnr = xvbap-matnr.
  375. * IF jhzqmax < jhzq.
  376. * jhzqmax = jhzq.
  377. * ENDIF.
  378. *
  379. *
  380. * ENDLOOP.
  381. * vbak-vdatu = sy-datum - jhzqmax .
  382. * rv45a-etdat = sy-datum - jhzqmax .
  383. ENDFORM. "USEREXIT_SAVE_DOCUMENT
  384. *eject
  385.  
  386. *&---------------------------------------------------------------------*
  387. *& Form zcheck_ggdd
  388. *&---------------------------------------------------------------------*
  389. * text 广告物料订单判断
  390. *----------------------------------------------------------------------*
  391. * -->EXITFLAG text 检验是否通过
  392. *----------------------------------------------------------------------*
  393. FORM zcheck_ggdd USING exitflag.
  394. * RETURN.
  395. exitflag = .
  396. IF sy-tcode <> 'VA01' AND sy-tcode <> 'VA02'.
  397. RETURN.
  398. ENDIF.
  399.  
  400. ** 销售凭证订单原因 306 促销赠品 307 广告物料 V1.0 ZHOUXU
  401. LOOP AT xvbap.
  402. ** 销售凭证类型广告物料凭着
  403. IF xvbak-auart = 'ZGOR'.
  404. IF xvbap-pstyv = 'Z002' ."促销品
  405. * MESSAGE '订单原因促销赠品项目类别只能为促销品' TYPE 'E'.
  406. '.
  407. ** begin V1.1暂时取消促销品的增强
  408. * MESSAGE e005(ymess) WITH '项目类别促销品订单原因只能为促销赠品!' .
  409. * exitflag = .
  410. * RETURN.
  411. ** end V1.
  412. ENDIF.
  413. ENDIF.
  414. IF xvbap-pstyv = 'ZGAN' OR xvbap-pstyv = 'Z001'." ZGAN 宣传品,展示品
  415. '.
  416. * MESSAGE '订单原因为"广告物料"项目类别只能为宣传品或展示品!' TYPE 'E'.
  417. MESSAGE e005(ymess) WITH '项目类别宣传品或展示品订单原因只能为广告物料!'.
  418. exitflag = .
  419. RETURN.
  420. ENDIF.
  421. ENDIF.
  422. ENDIF.
  423. ** Z001 V1. ZHOUXU
  424. IF xvbak-auart = 'Z001'.
  425. IF xvbap-pstyv = 'Z003' OR xvbap-pstyv = 'Z004'.
  426. ) <> '.
  427. * MESSAGE '订单原因为"广告物料"项目类别只能为宣传品或展示品!' TYPE 'E'.
  428. MESSAGE e005(ymess) WITH '项目类型为办公用品或样品领用时不能选此订单原因 '.
  429. exitflag = .
  430. RETURN.
  431. ENDIF.
  432.  
  433. ENDIF.
  434. ENDIF .
  435. ENDLOOP.
  436.  
  437. ENDFORM. "zcheck_ggdd
  438. *---------------------------------------------------------------------*
  439. * FORM USEREXIT_SAVE_DOCUMENT_PREPARE *
  440. *---------------------------------------------------------------------*
  441. * This userexit can be used for changes or checks, before a *
  442. * document is saved. *
  443. * *
  444. * If field T180-TRTYP contents 'H', the document will be *
  445. * created, else it will be changed. *
  446. * *
  447. * This form is called at the beginning of form BELEG_SICHERN *
  448. * *
  449. *---------------------------------------------------------------------*
  450. FORM userexit_save_document_prepare.
  451.  
  452. IF sy-tcode = 'CO06'.
  453. EXIT.
  454. ENDIF.
  455. DATA:exitflag TYPE i.
  456. *-----------------V1. ZHOUXU 广告订单判断---------------------------
  457. PERFORM zcheck_ggdd USING exitflag.
  458. .
  459. EXIT.
  460. ENDIF.
  461. DATA: lx_vbak LIKE vbak.
  462. DATA: zkbetr LIKE xkomv-kbetr.
  463. DECIMALS VALUE '150.00',
  464. zprice2 DECIMALS VALUE '50.00'.
  465. SELECT SINGLE * INTO lx_vbak
  466. FROM vbak WHERE vbeln = xvbak-vbeln.
  467. IF vbak-kvgr1 <> lx_vbak-kvgr1.
  468. AUTHORITY-CHECK OBJECT 'ZHLSDPR'
  469. '.
  470. .
  471. ) WITH '你没有权限审批价格!'.
  472. xvbak-kvgr1 = lx_vbak-kvgr1.
  473. vbak-kvgr1 = lx_vbak-kvgr1.
  474. ENDIF.
  475. ENDIF.
  476. IF vbak-kvgr2 <> lx_vbak-kvgr2.
  477. AUTHORITY-CHECK OBJECT 'ZHLSDPR'
  478. '.
  479. .
  480. ) WITH '你没有权限审批价格!'.
  481. xvbak-kvgr2 = lx_vbak-kvgr2.
  482. vbak-kvgr2 = lx_vbak-kvgr2.
  483. ENDIF.
  484. ENDIF.
  485. IF vbak-kvgr3 <> lx_vbak-kvgr3.
  486. AUTHORITY-CHECK OBJECT 'ZHLSDPR'
  487. '.
  488. .
  489. ) WITH '你没有权限审批价格!'.
  490. xvbak-kvgr3 = lx_vbak-kvgr3.
  491. vbak-kvgr3 = lx_vbak-kvgr3.
  492. ENDIF.
  493. ENDIF.
  494. IF vbak-kvgr4 <> lx_vbak-kvgr4.
  495. AUTHORITY-CHECK OBJECT 'ZHLSDPR'
  496. '.
  497. .
  498. ) WITH '你没有权限审批价格!'.
  499. xvbak-kvgr4 = lx_vbak-kvgr4.
  500. vbak-kvgr4 = lx_vbak-kvgr4.
  501. ENDIF.
  502. ENDIF.
  503. LOOP AT xkomv.
  504. CASE xkomv-kschl.
  505. WHEN 'ZK04'.
  506. IF vbak-kvgr5 IS INITIAL.
  507. CASE xvbak-auart.
  508. WHEN 'OR' OR 'ZTOR' OR 'ZYOR' OR 'ZDOR'.
  509. MESSAGE e005(ymess) WITH '已维护ZK04ZK07的折扣,请选择折扣性质!'.
  510. ENDCASE.
  511. ENDIF.
  512.  
  513. .
  514. zkbetr = ABS( xkomv-kbetr ).
  515. IF zkbetr GT zprice1.
  516. '.
  517. xvbak-kvgr3 = '.
  518. vbak-kvgr3 = '.
  519. ) WITH '订单折扣率高于15%,需要审批 '.
  520. xvbak-lifsk = '.
  521. vbak-lifsk = '.
  522. ENDIF.
  523. '.
  524. xvbak-kvgr2 = '.
  525. vbak-kvgr2 = '.
  526. ) WITH '订单折扣率高于5%,需要审批 '.
  527. xvbak-lifsk = '.
  528. vbak-lifsk = '.
  529. ENDIF.
  530. '.
  531. xvbak-kvgr1 = '.
  532. vbak-kvgr1 = '.
  533. ) WITH '订单折扣,需要审批 '.
  534. xvbak-lifsk = '.
  535. vbak-lifsk = '.
  536. ENDIF.
  537.  
  538. EXIT.
  539. ELSEIF zkbetr GT zprice2.
  540. xvbak-kvgr3 = ' '.
  541. vbak-kvgr3 = ' '.
  542. '.
  543. xvbak-kvgr2 = '.
  544. vbak-kvgr2 = '.
  545. ) WITH '订单折扣率高于5%,需要审批 '.
  546. xvbak-lifsk = '.
  547. vbak-lifsk = '.
  548. ENDIF.
  549. '.
  550. xvbak-kvgr1 = '.
  551. vbak-kvgr1 = '.
  552. ) WITH '订单折扣,需要审批 '.
  553. xvbak-lifsk = '.
  554. vbak-lifsk = '.
  555. ENDIF.
  556. EXIT.
  557.  
  558. ELSE.
  559. xvbak-kvgr3 = ' '.
  560. vbak-kvgr3 = ' '.
  561. xvbak-kvgr2 = ' '.
  562. vbak-kvgr2 = ' '.
  563. '.
  564. xvbak-kvgr1 = '.
  565. vbak-kvgr1 = '.
  566. ) WITH '订单折扣率产生,需要审批 '.
  567. xvbak-lifsk = '.
  568. vbak-lifsk = '.
  569. ENDIF.
  570. EXIT.
  571. ENDIF.
  572. ENDIF.
  573. *----------------------------------------------------20081010ZK07增加
  574. WHEN 'ZK07'.
  575. IF vbak-kvgr5 IS INITIAL.
  576. CASE xvbak-auart.
  577. WHEN 'OR' OR 'ZTOR' OR 'ZYOR' OR 'ZDOR'.
  578. MESSAGE e005(ymess) WITH '已维护ZK04ZK07的折扣!请选择折扣性质!'.
  579. ENDCASE.
  580. ENDIF.
  581.  
  582. .
  583. zkbetr = ABS( xkomv-kbetr ).
  584. IF zkbetr GT zprice1.
  585. '.
  586. xvbak-kvgr3 = '.
  587. vbak-kvgr3 = '.
  588. ) WITH '订单折扣率高于15%,需要审批 '.
  589. xvbak-lifsk = '.
  590. vbak-lifsk = '.
  591. ENDIF.
  592. '.
  593. xvbak-kvgr2 = '.
  594. vbak-kvgr2 = '.
  595. ) WITH '订单折扣率高于5%,需要审批 '.
  596. xvbak-lifsk = '.
  597. vbak-lifsk = '.
  598. ENDIF.
  599. '.
  600. xvbak-kvgr1 = '.
  601. vbak-kvgr1 = '.
  602. ) WITH '订单折扣,需要审批 '.
  603. xvbak-lifsk = '.
  604. vbak-lifsk = '.
  605. ENDIF.
  606.  
  607. EXIT.
  608. ELSEIF zkbetr GT zprice2.
  609. xvbak-kvgr3 = ' '.
  610. vbak-kvgr3 = ' '.
  611. '.
  612. xvbak-kvgr2 = '.
  613. vbak-kvgr2 = '.
  614. ) WITH '订单折扣率高于5%,需要审批 '.
  615. xvbak-lifsk = '.
  616. vbak-lifsk = '.
  617. ENDIF.
  618. '.
  619. xvbak-kvgr1 = '.
  620. vbak-kvgr1 = '.
  621. ) WITH '订单折扣,需要审批 '.
  622. xvbak-lifsk = '.
  623. vbak-lifsk = '.
  624. ENDIF.
  625. EXIT.
  626.  
  627. ELSE.
  628. xvbak-kvgr3 = ' '.
  629. vbak-kvgr3 = ' '.
  630. xvbak-kvgr2 = ' '.
  631. vbak-kvgr2 = ' '.
  632. '.
  633. xvbak-kvgr1 = '.
  634. vbak-kvgr1 = '.
  635. ) WITH '订单折扣率产生,需要审批 '.
  636. xvbak-lifsk = '.
  637. vbak-lifsk = '.
  638. ENDIF.
  639. EXIT.
  640. ENDIF.
  641. ENDIF.
  642.  
  643. ENDCASE.
  644. ENDLOOP.
  645. *----------------------------------------------------20081009增加修改订单冻结判断.
  646. DATA: lx_vbap LIKE vbap.
  647. DATA l_vbap LIKE vbap .
  648. DATA l_vbap2 LIKE vbap .
  649. DATA t_vbap TYPE TABLE OF vbap.
  650. DATA t_vbap2 TYPE TABLE OF vbap.
  651. DATA: lx_vbep LIKE vbep.
  652. DATA: lx_konv LIKE konv.
  653. DATA: lx_konv1 LIKE konv.
  654. DATA: zkbetr1 LIKE xkomv-kbetr.
  655.  
  656. DATA: lx_jsto LIKE jsto.
  657. DATA: lx_tj30 LIKE tj30.
  658. DATA: lx_jest LIKE jest.
  659.  
  660. CLEAR zkbetr1.
  661. IF sy-tcode = 'VA02'.
  662.  
  663. '.
  664. LOOP AT xvbap.
  665. SELECT SINGLE *
  666. INTO lx_vbap
  667. FROM vbap
  668. WHERE vbeln = xvbap-vbeln AND posnr = xvbap-posnr.
  669. .
  670. xvbak-kvgr4 = '.
  671. vbak-kvgr4 = '.
  672. ) WITH '订单折扣率已经审批,修改后需要再次审批 '.
  673. xvbak-lifsk = '.
  674. vbak-lifsk = '.
  675. EXIT.
  676. ENDIF.
  677. SELECT SINGLE *
  678. INTO lx_konv
  679. FROM konv
  680. WHERE knumv = xvbak-knumv AND kposn = xvbap-posnr AND kschl = 'ZK04'.
  681. SELECT SINGLE *
  682. INTO lx_konv1
  683. FROM konv
  684. WHERE knumv = xvbak-knumv AND kposn = xvbap-posnr AND kschl = 'ZK07'.
  685. IF lx_konv-kbetr NE space .
  686. zkbetr1 = ABS( lx_konv-kbetr ).
  687. IF xvbap-matnr NE lx_vbap-matnr OR
  688. xvbap-kwmeng GT lx_vbap-kwmeng OR
  689. zkbetr GT zkbetr1.
  690. xvbak-kvgr4 = '.
  691. vbak-kvgr4 = '.
  692. ) WITH '订单折扣率已经审批,修改后需要再次审批 '.
  693. xvbak-lifsk = '.
  694. vbak-lifsk = '.
  695.  
  696. EXIT.
  697. ENDIF.
  698. ENDIF.
  699. IF lx_konv1-kbetr NE space .
  700. zkbetr1 = ABS( lx_konv1-kbetr ).
  701. IF xvbap-matnr NE lx_vbap-matnr OR
  702. xvbap-kwmeng GT lx_vbap-kwmeng OR
  703. zkbetr GT zkbetr1.
  704. xvbak-kvgr4 = '.
  705. vbak-kvgr4 = '.
  706. ) WITH '订单折扣率已经审批,修改后需要再次审批 '.
  707. xvbak-lifsk = '.
  708. vbak-lifsk = '.
  709.  
  710. EXIT.
  711. ENDIF.
  712. ENDIF.
  713.  
  714. ENDLOOP.
  715. ENDIF.
  716.  
  717. ****增加有条件未审批时,不允许修改订单交货状态 add by LKJ 2009/02/25
  718. ' ).
  719.  
  720. AUTHORITY-CHECK OBJECT 'ZHLSDPR'
  721. '.
  722. .
  723. ) WITH '订单价格、折扣未审批,无权修改状态!'.
  724. xvbak-lifsk = '.
  725. vbak-lifsk = '.
  726. ENDIF.
  727.  
  728. ENDIF.
  729. ***** add end
  730.  
  731. **** 订单的对象状态审核
  732. **** 如果未审核,可以修改数据,如果已审核,不能做任何更改 *****
  733. IF lx_vbak-objnr NE space." AND ( sy-uname = 'E464503' or sy-uname = 'E422038' or sy-uname = 'E422083' or sy-uname = 'E423726').
  734.  
  735. DATA role TYPE c VALUE 'Y'.
  736.  
  737. SELECT SINGLE * INTO lx_jest
  738. FROM jest WHERE objnr EQ lx_vbak-objnr AND inact EQ 'X'.
  739.  
  740. IF lx_jest-stat EQ 'E0001'.
  741. AUTHORITY-CHECK OBJECT 'B_USERSTAT'
  742. ID 'BERSL' FIELD 'ZSDAU001'.
  743.  
  744. ."无审核权限,检查已修改的数据条件(刷可用量)
  745. role = 'N'.
  746. * ) WITH '订单对象状态审批通过,无反审核权限!'.
  747. * LEAVE TO CURRENT TRANSACTION.
  748. ELSE.
  749. role = 'Y'.
  750. ENDIF.
  751. DATA:netwr LIKE vbap-netwr .
  752. DATA:temp TYPE string.
  753. LOOP AT xvbap INTO l_vbap.
  754.  
  755. APPEND l_vbap TO t_vbap2.
  756. SELECT SINGLE *
  757. INTO l_vbap2
  758. FROM vbap
  759. WHERE vbeln = l_vbap-vbeln AND posnr = l_vbap-posnr.
  760.  
  761. * l_vbap2-aedat = sy-datum."del v1.6
  762. l_vbap2-aedat = l_vbap-aedat. "add v1.6
  763. l_vbap2-klmeng = l_vbap-klmeng.
  764. l_vbap2-kbmeng = l_vbap-kbmeng.
  765. l_vbap2-abgru = l_vbap-abgru.
  766. **
  767. CLEAR netwr.
  768. netwr = l_vbap-netwr - l_vbap2-netwr.
  769. netwr = ABS( netwr ).
  770. temp = netwr.
  771. CONDENSE temp.
  772. ' .
  773. l_vbap2-netwr = l_vbap-netwr.
  774. ENDIF.
  775. **end v1.
  776. **begin v1.
  777. CLEAR netwr.
  778. netwr = l_vbap-mwsbp - l_vbap2-mwsbp.
  779. netwr = ABS( netwr ).
  780. temp = netwr.
  781. CONDENSE temp.
  782. ' .
  783. l_vbap2-mwsbp = l_vbap-mwsbp.
  784. ENDIF.
  785.  
  786. **end v1.5
  787. **begin v1..
  788. CLEAR netwr.
  789. netwr = l_vbap-netpr - l_vbap2-netpr.
  790. netwr = ABS( netwr ).
  791. temp = netwr.
  792. CONDENSE temp.
  793. ' .
  794. l_vbap2-netpr = l_vbap-netpr.
  795. ENDIF.
  796. **end v1.
  797. ** Begin v1.
  798. **以下是免费样品订单(ZFD),广告物料订单(ZGOR)审核后不允许修改的字段内容:
  799. **
  800. **,订单抬头:售达方,送达方,成本中心;
  801. **,订单明细:物料编码,数量,增删行项目.
  802. IF xvbak-auart = 'ZGOR' OR xvbak-auart = 'ZFD'.
  803. l_vbap2-netwr = l_vbap-netwr.
  804. l_vbap2-mwsbp = l_vbap-mwsbp.
  805. l_vbap2-netpr = l_vbap-netpr.
  806. ENDIF.
  807.  
  808. ** End v1.8
  809. ** Begin v1.
  810. ** 以下是免费样品订单(ZFD)对售达方的类型判断,限制售达方只能是内部办事处:账户组为: Susan
  811.  
  812. DATA:zktokd LIKE kna1-ktokd,kunnr LIKE vbak-kunnr.
  813. IF xvbak-auart = 'ZFD'.
  814. * zktokd = kna1-ktokd while kunnr = xvbak-annr.
  815. SELECT SINGLE ktokd FROM kna1
  816. INTO zktokd
  817. WHERE kunnr = xvbak-kunnr.
  818. '.
  819. MESSAGE e005(ymess) WITH '免费样品订单售达方必须是内部销售办事处'.
  820. EXIT.
  821. ENDIF.
  822. ENDIF.
  823.  
  824. ** End v1.9
  825. APPEND l_vbap2 TO t_vbap.
  826.  
  827. CLEAR: l_vbap,l_vbap2.
  828.  
  829. ENDLOOP.
  830.  
  831. lx_vbak-faksk = vbak-faksk .
  832. xvbak-faksk = vbak-faksk .
  833.  
  834. **Begin v1.2
  835.  
  836. lx_vbak-kvgr1 = vbak-kvgr1.
  837. lx_vbak-kvgr2 = vbak-kvgr2.
  838. lx_vbak-kvgr3 = vbak-kvgr3.
  839. lx_vbak-kvgr4 = vbak-kvgr4.
  840. lx_vbak-kvgr5 = vbak-kvgr5.
  841. lx_vbak-lifsk = vbak-lifsk.
  842. **End v1.
  843.  
  844. **Begin v1.6
  845. lx_vbak-aedat = vbak-aedat.
  846. **End v1.
  847. **
  848. * DATA:netwr LIKE vbak-netwr .
  849. CLEAR netwr.
  850. netwr = lx_vbak-netwr - vbak-netwr.
  851. netwr = ABS( netwr ).
  852. temp = netwr.
  853. CONDENSE temp.
  854. ' .
  855. lx_vbak-netwr = vbak-netwr.
  856. ENDIF.
  857. **
  858. ** Begin v1.
  859. **以下是免费样品订单(ZFD),广告物料订单(ZGOR)审核后不允许修改的字段内容:
  860. **
  861. **,订单抬头:售达方,送达方,成本中心;
  862. **,订单明细:物料编码,数量,增删行项目.
  863. IF xvbak-auart = 'ZGOR' OR xvbak-auart = 'ZFD'.
  864. lx_vbak-netwr = vbak-netwr.
  865. ENDIF.
  866.  
  867. ** End v1.8
  868. * LOOP AT xvbep.
  869. * SELECT SINGLE *
  870. * INTO lx_vbep
  871. * FROM vbep
  872. * WHERE vbeln = xvbep-vbeln AND posnr = xvbep-posnr AND bmeng = xvbep-bmeng AND edatu = sy-datum.
  873. * ENDLOOP.
  874.  
  875. IF xvbak EQ lx_vbak OR vbak EQ lx_vbak . "如果订单抬头被更改
  876. IF t_vbap2 EQ t_vbap.
  877. * if role = 'N'.
  878. * ) WITH '订单对象状态审批通过,无反审核权限!'.
  879. * LEAVE TO CURRENT TRANSACTION.
  880. * else.
  881. * exit.
  882. * endif.
  883. EXIT.
  884. ELSE.
  885. ) WITH '订单对象状态审批通过,不允许修改订单行项目数据!'.
  886. LEAVE TO CURRENT TRANSACTION.
  887. ENDIF.
  888. EXIT.
  889. ELSE.
  890. ) WITH '订单对象状态审批通过,不允许修改抬头订单数据!'.
  891. LEAVE TO CURRENT TRANSACTION.
  892. ENDIF.
  893. EXIT.
  894. ENDIF.
  895. ENDIF.
  896.  
  897. ENDIF.
  898. ENDFORM. "USEREXIT_SAVE_DOCUMENT_PREPARE *eject

MV45AFZZ 销售订单的增强的更多相关文章

  1. 销售订单增强字段 bapi更新

    如果增强字段在销售订单抬头(vbak)上,则要将增强字段一并append到如下四个表/结构中: VBAKKOZ VBAKKOZX BAPE_VBAK BAPE_VBAKX 在行项目(vbap)上: V ...

  2. 【ABAP系列】SAP 销售订单的行项目里条件的增强

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 销售订单的行项目里条件的 ...

  3. SAP四代增强实现:销售订单复制项目文本时不需要显示文本框和回车

    最近接收到一个业务需求,在SAP依据销售订单复制时,如果订单里面的项目有多个文本,系统就会显示复制的文本框处理,让用户选择是否复制,这个就让销售很不舒服,如果有几十个项目,每个项目有几个文本,那就就要 ...

  4. [SAP ABAP开发技术总结]SD销售订单定价过程

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. 为什么S/4HANA的销售订单创建会触发生产订单的创建

    调用S/4HANA销售订单创建函数SD_SALES_DOCU_MAINTAIN创建一个销售订单时,会触发生产订单的创建. 销售订单的每个行项目对应一个独立的生产订单,SD_SALES_DOCU_MAI ...

  6. 基于SAP Kyma的订单编排增强介绍

    尽管有一万个舍不得,2018年还是无可挽回地离我们远去了. 唯有SAP成都研究院的同事和我去年在网络上留下的这些痕迹,能证明2018年我们曾经很认真地去度过每一天: SAP成都研究院2018年总共87 ...

  7. sap 中怎样把非限制库存转为销售订单库存?

    把非限制库存转为销售订单库存: MB1B 移动类型413 把销售订单库存转为非限制库存: MB1B移动类型411 E 切记!

  8. Netsharp快速入门(之11) 销售管理(开发销售订单工作区)

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 4.3     销售订单开发 4.3.1  部件工作区设置 1.创建部件工作区,建工作区向导中要注意勾选组合并系部分.具体要建立的部 ...

  9. Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)

    作者:秋时 杨昶   转载须说明出处 4.5     单据流转 4.5.1  单据流转的目的 单据流转主要为了实现业务关系的流转,并记录相互之间的关系.例如从销售订单生成销货单,两张单据之间有对应的关 ...

随机推荐

  1. 团队作业8——第二次项目冲刺(Beta阶段)5.22

    1.当天站立式会议照片 会议内容: ①:检查总结上次任务完成情况 ②:安排本次任务的分工 ③:反思前三次自己的不足 ④:协商解决代码进度.成员投入时间等问题 2.每个人的工作 工作中遇到的困难: 代码 ...

  2. 201521123091 《Java程序设计》第1周学习总结

    Java 第一周总结 第一周的作业. 1.本章学习总结 [x] 初识Java语言:Java的历史,三大平台,了解JVM/JRE/JDK [x] Java开发环境的配置 [x] 用记事本编写Java程序 ...

  3. 201521123082 《Java程序设计》第1周学习总结

    201521123082 <Java程序设计>第1周学习总结 标签(空格分隔): Java 1. 本周学习总结 0.初步了解Java语言及其发展历史和过程,同时也初步了解了Java具有跨平 ...

  4. 201521123002 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 2. 书面作业 作业参考文件下载 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能 ...

  5. 201521123065 《Java程序设计》第3周学习总结

    1. 本周学习总结 2. 书面作业 Q1:代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  6. Java第十三周总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  7. 201521123056 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...

  8. 201521123054 《Java程序设计》第14周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 1.1建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 1.2在自己建立的数据库上执行常见SQL语句 ...

  9. 详解go语言的array和slice 【一】

    本篇会详细讲解go语言中的array和slice,和平时开发中使用他样时需要注意的地方,以免入坑. Go语言中array是一组定长的同类型数据集合,并且是连续分配内存空间的. 声明一个数组 var a ...

  10. Mybatis第九篇【基于Maven在Idea下Mybatis逆向工程】

    前言 在Intellij idea下,没有学习Maven的情况下使用Mybatis的逆向工程好像有点复杂,资料太少了-找到的资料好像也行不通- 于是学完Maven之后,我就再来更新Idea下使用Myb ...