---
# System prepended metadata

title: E23
tags: [已處理]

---

# E23
###### tags: `已處理`
[toc]
## 問題敘述
有關材料系統中存量管制-基準存量設定作業-5.管線搶修器材數量明細表，想要印111年6月，屏東區管理處的管線搶修器材數量明細表，
但是不知何原因，印不出來，按完列印後，出現"搜尋無資料，請重新輸入條件！！"的文字(如附圖)這隻程式，之前在4/13印111年3月屏東區管理處的資料時是可以印出來的，請協助排除問題，讓使用者可列印出屏東區管理處的管線搶修器材數量明細表，並請盡量於111年7月15日前排除問題完成，
[E23](https://docs.google.com/document/d/1WpEbS4Cv9u3O9a80_s5Li_y9Ojdi7PAJ/edit?usp=sharing&ouid=107825791787894292764&rtpof=true&sd=true)
![](https://i.imgur.com/6Gm7ydL.png)

## 解析
懷疑兩個情況：

* 1.使用者用不同帳號登入，一個可以印一個不行，這樣的話可以印的使用者在資料表會有資料，我去把它查出來再用該使用者登入印看看如果可以就直接回覆。
* 2.資料產生之後又被刪除了，要查哪隻程式刪除的，這個比較麻煩。

情況一:
    各帳號測試:
::: spoiler
jhj00![](https://i.imgur.com/asxy85b.png)
    jhj01![](https://i.imgur.com/esvgB08.png)
    jhj02![](https://i.imgur.com/HbcATy7.png)
    jhj03![](https://i.imgur.com/w1h7mM8.png)
    jhj04 ![](https://i.imgur.com/Tg2QoKS.png)
    ![](https://i.imgur.com/cmpMbcH.png)
    jhj05![](https://i.imgur.com/mzmmvBf.png)
    jhj06![](https://i.imgur.com/5hYRpKz.png)
    jhj07![](https://i.imgur.com/jFIiSP9.png)
    jhj08![](https://i.imgur.com/TKATEjV.png)
    ![](https://i.imgur.com/4yM6jxt.png)
    jhj09![](https://i.imgur.com/cpg5IhO.png)
    jhj10![](https://i.imgur.com/SGbysTa.png)
    jhj11![](https://i.imgur.com/cLAE2Q9.png)
    jhj12![](https://i.imgur.com/atG1GqA.png)
:::

:::warning
全部失敗!    
:::

![](https://i.imgur.com/qn3bGGR.png)
![](https://i.imgur.com/tN7nkAu.png)





兩個情況都是使用者對流程不熟悉產生的問題，排除之後才會進一步去檢查為什麼資料憑空消失。
## 問題單內容
*  原始程式碼位置
*  目的程式碼位置
*  問題解析
*  處理方法
*  變更後測試執行結果

## 備註

ming:
E023 較為緊急 要再 7月15日前排除問題完成，
想詢問，一樣是先看 Xml 跟jsp
然後再檢查PRT的問題嗎~
E023 MR40106全備份代碼 https://github.com/weacloud/QA

Yu:
程式呼叫順序：
 - mr40106_sel.xml 呼叫 mr40106_prt
 - mr40106_prt 呼叫 mr40106 class
 - mr40106 outXLS-> execOut, execOut1, execOut2, execOut3
 - exeOut -> getDataValueByExecOut(line 3816) 呼叫了  P_MR40406_RPT


![](https://i.imgur.com/OcAbQv7.png)
再從 MAST_KEPST3,MAST_KEPST4,MR40106_WRK 拿資料
一行一行的資料再從 MR40406_RPT, MAST_KEPST4 拿金額資料
再產生至 MR40106_RPT2
如果沒有資料就是 P_MR40406_RPT 沒有產生可以列印的資料
![](https://i.imgur.com/QMxe0Ip.png)
根據 log 可以知道      送出之後就沒有下文了，先懷疑是資料庫程序執行錯誤。
檢查方式：打開 dbms (不會的話叫我(今天來不及了，下個駐點日))在 sql developer 執行這一段看錯誤
```sql
CALL P_MR40406_RPT('108451','0','00','0I','0','zzzzzzzzzzzzzzz','A','1110625','N')
```

執行這一段看錯誤:
![](https://i.imgur.com/RJyXOEJ.png)
dbms 是直接打開SQL developer 對嗎?


這是報表不會更動到原始資料，所以可以用 sql 測試
你要爬 java 檔，按照順序去執行 sql
最後再用 java 裡面的邏輯把資料撈出來，看哪裡出錯導致印不出來
dbms 是 程序有錯的時候在做 log 用的，
目前看起來可以執行，你如果懷疑程序有錯再查 sql developer 怎麼用 dbms

ming：
java
![](https://i.imgur.com/JCEGgmR.png)
4480行 我要查找每一個JAVA sqlstr or sqlselect 嗎~
然後斷點 放入正式機 或 在 oracle 執行嗎~


> 他的問題是列印都沒有，但是正常要每個 sheet 都有
> 因此你不需要查找每一段 sql，你找某個 sheet 對應的程式邏輯為什麼不會產生報表資料即可
> 例如說 mr40106 outXLS-> execOut -> getDataValueByExecOut()
> 照理說 getDataValueByExecOut 有東西就會印出來，所以你可以檢查：
> 1. getDataValueByExecOut 裡面的邏輯是否正常執行，是不是有東西出來
> 2. 是不是 getDataValueByExecOut 有東西，卻印不出來。
> getDataValueByExecOut 位於 3816-4422 行，你不需要每一行都仔細看，嘗試了解他要做什麼。

(不之為何 我這邊是從3803開始的)

> 那無所謂，邏輯應該沒有動很多，你先寄線上的 java 給我比較能討論，`tigernaxo@gmail.com`

有辦法看System.err.println嗎~

> 可以，但很多，你可以從 websphere 找下面的 log 資料夾
> 除了 java 檔之外，你要去看 P_MR40406_RPT 產生什麼，檢查一下是不是有正常產生。

P_MR40406_RPT怎麼看~(直接抓檔案~?)
還是可以在 oracle 上ctrl enter

> 你 oracle 打開左邊清單的觸發程式?(trigger)，找 P_MR40406，複製到  你的 IDE 檔案裡面查看，你不要看完全部的 sql，嘗試了解他的行為意圖，他應該是新增資料到 mr40406_rpt，所以你可以下
> ``` sql
> select * from mr40406_rpt where userid='jhj13'
> ```
> 看資料是不是有產生，如果沒有才去查中間的過程。
> ![](https://i.imgur.com/JbzEl2h.png)
> 

有诶 太好ㄌ!
![](https://i.imgur.com/eKwM6d9.png)

> 因為 INSERT 是包在 CRSR 的 LOOP 裡面，想像中會有多筆，但是實際上只有一筆，你要去查 CRSR 的 語法是不是只有一個。
> ![](https://i.imgur.com/sjAp0oc.png)
> ```sql
> -- 把參數替換成你的條件
>        SELECT
>            /*+RULE*/
>            QYMT_ANO,
>            QYMT_MNO,
>            NVL(QYMT_LMQTY,0) QYMT_LMQTY,
>            ROUND(
>            CASE
>                WHEN NVL(QYTMT_LMQTY,0) = 0
>                THEN 0
>                ELSE NVL(QYTMT_LMAMT,0)/NVL(QYTMT_LMQTY,1)
>            END,3) AVG_P,
>            ROUND(NVL(QYMT_LMQTY,0) * ROUND(
>            CASE
>                WHEN NVL(QYTMT_LMQTY,0) = 0
>                THEN 0
>                ELSE NVL(QYTMT_LMAMT,0)/NVL(QYTMT_LMQTY,1)
>            END,3),0)
>            --QYMT_LMAMT
>            S_PRICE,
>            QYMT_SDATE,
>            SUBSTR(QYMT_ANO,1,2)ANO2,
>            SUBSTR(QYMT_MNO,1,5)mno5
>        FROM MAST_QTYMTH,
>            MAST_QTYTMTH
>        WHERE ( SUBSTR(MAST_QTYMTH.QYMT_ANO,1,2) = SUBSTR(MAST_QTYTMTH.QYTMT_ANO,1,2)
>        AND MAST_QTYMTH.QYMT_MNO                 = MAST_QTYTMTH.QYTMT_MNO
>        AND MAST_QTYMTH.QYMT_YM                  = MAST_QTYTMTH.QYTMT_YM
>        AND MAST_QTYMTH.QYMT_SEQ                 = MAST_QTYTMTH.QYTMT_SEQ)
>        AND (QYMT_ANO,QYMT_MNO,QYMT_SDATE)      IN
>            ( SELECT ANO,MNO,SDATE FROM MR40406_DATA WHERE USERID=A_USERID
>            )
>    UNION
>    SELECT ANO AS QYMT_ANO,
>        MNO    AS QYMT_MNO,
>        0      AS QYMT_LMQTY,
>        0      AS AVG_P,
>        0      AS S_PRICE,
>        0      AS QYMT_SDATE,
>        SUBSTR(ANO,1,2)ANO2,
>        SUBSTR(MNO,1,5)mno5
>    FROM MR40406_DATA2
>    WHERE USERID=A_USERID
>    UNION
>    SELECT ANO AS QYMT_ANO,
>        MNO    AS QYMT_MNO,
>        0      AS QYMT_LMQTY,
>        0      AS AVG_P,
>        0      AS S_PRICE,
>        0      AS QYMT_SDATE,
>        SUBSTR(ANO,1,2)ANO2,
>        SUBSTR(MNO,1,5)mno5
>    FROM MR40406_DATA3
>    WHERE USERID=A_USERID
>    ORDER BY QYMT_ANO,
>        QYMT_MNO;
> ```
> 歐 我搞錯 CRSR 了，這樣才對，我整理一下

CRSR?
~~你也看太快了.....~~
QQ....蛤啊.....
是不是解不太出來...
還是我們先印給他資料就好?
好ㄟ 
那 額 我先帶入資料 等等 再問怎麼列印~
![](https://i.imgur.com/OjvQnl1.png)
結果很漂亮~
![](https://i.imgur.com/u6R3z9n.png)

結果超漂亮，只有一筆~
![](https://i.imgur.com/AT2q8Gv.png)

> 釐清為什麼 CRSR 有很多資料，最後 INERT 只有一筆，是有條件判斷才會 INSERT ，或是出錯沒有 INSERT，推測 ln_qtyt_qty 計算出來都 0，因此只有一筆
> ```sql
>         IF ln_qtyt_qty  > 0 THEN
>            INSERT
>            INTO mr40406_rpt
> ```
> 印出來是完全沒資料，空的嗎
> ㄟ 不是，你都先用 jhj13 去做一次操作測試，然後都用 jhj13 去找才對得上，我們今天先不要管那個 108
> 操作印出來有東西嗎？(那一筆)
> 按列印沒有 excel 嗎？


對!
![](https://i.imgur.com/kx4eap0.png)
 那因該是
 jsp 出問題? 或 sel.jsp出問題?
 ![](https://i.imgur.com/jIXwshg.png)
:::spoiler
我看是沒有QAQ
![](https://i.imgur.com/UqNuzuM.png)

~~不能列印感覺超頭大@@.....~~
4480行的java...
這是2021 06 03 修改的

備份? 在哪邊找?
![](https://i.imgur.com/nuEsFW3.png)
找到ㄌ
好，你要哪一份檔案~~
(4/1號的不算備份ㄇ)_

:::

![](https://i.imgur.com/Ved2mni.png)
最後修改的好像是你 (06/30....)....

> 不能列印，跟列印出來沒東西是兩回事了
> 我覺得檔案被改過... 你確認一下上面 MR40406.class 的日期
> 完了 6.3 被改過，應該是 6.3 造成的錯誤，他上面有備份嗎？ MR40406.class.20220603 之類的檔案
> 該死，他沒有備份，我拿 java 跟 github 上的比對一下
> 搞錯，你要看 MR40106.class... 再麻煩更新一下

已更新~
我在local打到 沒有push
印別的區處也都沒有東西....
都~
登陸 jhj00? 還是 jhj13(目前登錄這個)
![](https://i.imgur.com/ctMIJAv.png)
都 沒有，之前就都登錄嘗試過了
- [X] 帳號
- [X] 資料
- [ ] 程式


> 4030 行是原本就這樣還是你打到?
> ```java
> rs.
> ```
> 我看java只有差在新增13區的程式
> 你改登陸 jhj00 分別嘗試印別的區處、屏東管理區看看，看是印屏東會有問題還是都不能印
> 如果 jhj00 可以印 13 區，你再登 jhj13 印看看
> 我們先確定是帳號、資料、程式哪邊的問題

> 其他區處也不行嗎？ class 備份之後重新編譯再試看看，你要注意檔案編碼不能改到


Ming:
11:44更新
1. Mr40106 上次改是2016了.... 
:::spoiler
![](https://i.imgur.com/n33QfOo.png)
:::
> 絕對不要用，因為2016年還沒有屏東管理處，檔案一定是錯的，但你傳給我的 java 有屏東的 code，4030行的程式碼不完全，你有動到嗎？。

(對) 那是我後來打的 沒放上去~
:::danger
我傳給你的 是2016的java....
但正式機的class 是 2022...
:::
> https://github.com/weacloud/fp00-water/blob/main/WEB-INF/javas/MR40106.java 
> 這個比較接近，你測試區翻看看有沒有 MR40106.java 然後檢查一下日期。
我在測試區有找到6/30號的檔案
以郵寄給你~
2. 總區處有產生檔案
:::spoiler
![](https://i.imgur.com/VyUigOY.png)
:::
3. 但單位只有 "單位名稱:全公司彙總"，應該是 屏東印不出來 
:::spoiler
![](https://i.imgur.com/E3K4thq.png)
:::
> 4頁都這樣嗎？
(對! 四頁都是空的)
詢問: 下一步查詢SQL 屏東的資料 還是 直接看java在屏東的邏輯有沒有什麼bug?
備註:jhj13是可以印的，但也只有彙總

> 沒有出錯，可以印，但是是空的這樣嗎？

對~ 如圖 全空 (jhj13全空 但 jhj00 彙總 有檔案)(可以點開詳細資料)_
:::spoiler
![](https://i.imgur.com/McPCV8V.png)
:::
> jhj13 印出來的問題是單位名稱只有匯總，還是連資料都也沒有，還是只有彙總的資料但沒有13區的，你操作的畫面有沒有勾選匯總，有勾選的話是只會有彙總。



**那我知道為什麼了，我6.30用到舊的檔案，舊的檔案沒有屏東區所以出錯，你把這個編譯 java跟 class 都上傳更新到正式/測試機**
https://github.com/weacloud/fp00-water/blob/main/WEB-INF/javas/MR40106.java 
**應該是前一個人沒有更新到正式機，我也是受害者 qq**

等等...所以.....我還要管測試機的java & class嗎?

> 避免下一個人發生類似的事，最好都更新，之前也有發生有些java 只有在測試機有的情況(二代工程介接程式)。

好 那我先把gihub的檔案放過去試試
操作完 有問題再回報

~~話說測試機要備份嗎~~


> 測試機不備分，只把 java 檔更新上去
> 我之前本來想請你把正式機的檔案再備分到 github，如果上次做這件事那 MR40106.java 就會變成舊版的，現在看起來之前有些工程師沒有更新到正式機上，還好沒時間做這件事不然就完ㄌ...
> 是說也沒差，再找之前 commit 的版本就好...

# 重要
因為這個問題是工程師新增13區的時候沒有把 java 更新上去，導致後來維護使用到舊的 java 檔案。
寫問題單的時候隨便寫說我們改了哪個 code 修正這個問題就好。

~~好瞎......屏東之前到底都怎麼過的...~~

> 他可能有寫好，class 有對，但是 java 沒有更新，所以後來接著用就錯了
> 問題單滿足形式主義為主，不用太詳細，要趕下一單..


放上去了，用jhj00登入操作屏東區試試看嗎? (但列印後不是不能再列印?

0323 jhj16可以列印了!
![](https://i.imgur.com/35GRcLq.png)
感覺可以結單了!?

問題單回復:
這個問題是舊有在工程師新增13區時的更新與之前的維護出衝突，導致維護後第13區出問題，在修改了MR40106.java後，解決了問題。
然後是直接跟俊良回報嗎?

寫簡單的維護紀錄，你明後天會到廠嗎？ 
會~