2026-09-02

[心情日記]在可以控制的風險下,讓小孩探索世界

冒險是孩子認識世界最本能的方式。當我們因為害怕危險而處處限制,往往也無意間剝奪了孩子培養自信、解決問題與適應環境的能力。真正的安全教育,不是把孩子關在溫室裡,而是在可控的風險(Controlled Risk)下,放手讓他們大膽探索。


以下分享幾個核心思維與實踐方法,陪伴你在保護與放手之間找到完美平衡:

一、 區分「危險」與「風險」必須先釐清這兩者的不同:

危險(Hazard): 孩子無法預測或控制的隱患,例如路上的破璃碎片、盲彎處的來車、故障的遊具。這需要父母直接介入排除,這些事件發生了可能會造成無法改變或遺憾終生的後果。

風險(Risk): 孩子可以透過評估與嘗試來掌握的挑戰,例如攀爬高處、拿剪刀手作、踩水坑、走平衡木。這需要父母引導他們面對。

讓孩子探索,並不是置之不理,而是排除「危險」,留下「風險」,並且是在可以控制或可以接受的範圍內。


二、 打造「可控風險」的 3 個實踐步驟

1. 善用「觀察」代替「不可以」,當看到孩子爬高或做危險動作時,父母的本能反應往往是喊出:「太高了!不可以!」或「快下來,會摔倒!」,這類警告除了傳遞恐懼,並不能提供實質協助。

試著換成引導式提問:「你覺得腳踏的地方穩嗎?」、「下一步你想抓哪裡?」、「你有注意到左邊那個坑洞嗎?」,這能幫助孩子從「被動聽話」轉為「主動評估風險」。


2. 提供安全演練的「實驗場」在完全可控的環境中,讓孩子體驗後果,能建立他們對身體能力的認知:想學拿刀? 從塑膠餐刀切香蕉開始,再渡過到兒童安全包丁切豆腐。喜歡攀爬? 帶他們到設有沙坑或軟墊的公園,讓他們嘗試爬到極限,就算不小心滑落,也在安全緩衝範圍內。


3. 容許「微小傷害」的發生,擦傷、小瘀青、挫折感,都是成長不可或缺的教材。輕微的疼痛能讓孩子建立真實的世界感知,明白「跌倒會痛,所以我下次要更小心」,這比父母講一百遍大道理都管用。


三、 給父母的心態轉變:學會「忍住」

放手最難的部分,其實在於父母自己的焦慮。下一次當你想衝過去幫忙或阻止時,不妨在心裡倒數 5 秒:

評估致命性: 如果跌下來會受重傷嗎?(如果不會,請忍住)

觀察孩子的反應: 他是在專注挑戰,還是在求救?

退後一步: 站在可以及時救援的距離,靜靜當他的安全後盾。

最好的保護,不是替孩子擋掉所有風雨,而是教他如何帶傘;最好的安全感,不是永遠不讓他摔倒,而是讓他知道「就算摔倒了,我也能自己站起來,而且爸爸媽媽一直在這裡支持我」。

2026-06-11

[PS]因為某些失誤不小心把系統環境變數Path全部刪除刪除

環境變數分為使用者變數與系統變數,以下為新增系統變數Path,並且可以放到GPO的版本
  • 因為放到GPO當重覆不能重覆新增
  • 原本有的Path內容,不會被覆蓋
  • 如果Path內容,有參數問題,也不會造成判斷錯誤,例如%Windows%
  • 大小寫不會判斷錯誤
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

# 1. 讀取目前「活著」的原始 PATH(如果完全沒有,則給予空字串,防止 Null 崩潰)
$currentPath = ""
if (Get-ItemProperty -Path $regPath -Name PATH -ErrorAction SilentlyContinue) {
    $currentPath = (Get-ItemProperty -Path $regPath -Name PATH).PATH
}

# 2. 定義系統核心路徑與應用程式路徑
$essentialPaths = @(
    "%SystemRoot%\system32",
    "%SystemRoot%",
    "%SystemRoot%\System32\Wbem",
    "%SystemRoot%\System32\WindowsPowerShell\v1.0\",
    "%SystemRoot%\System32\OpenSSH\",
    "C:\Program Files (x86)\Microsoft\Edge\Application",
    "C:\Program Files (x86)\Common Files\Oracle\Java\java8path",
    "C:\Program Files (x86)\Common Files\Oracle\Java\javapath"
)

# 3. 將目前現有的 PATH 切開成陣列,統一轉小寫並剔除結尾斜線
$currentPathArray = $currentPath -split ';' | ForEach-Object { $_.Trim().ToLower().TrimEnd('\') }

# 3.5 額外產生一個「已經把 %SystemRoot% 換成 C:\Windows」的現有路徑陣列,用來雙重防禦
$expandedCurrentPathArray = $currentPathArray | ForEach-Object { 
    [Environment]::ExpandEnvironmentVariables($_).ToLower().TrimEnd('\') 
}

# 4. 用來累積存放「目前漏掉、需要補上去」的路徑購物車
$pathsToAppend = @()

foreach ($path in $essentialPaths) {
    # 將我們要檢查的路徑,分別製作「未展開小寫」與「已展開小寫」兩種版本
    $cleanPath = $path.ToLower().TrimEnd('\')
    $expandedPath = [Environment]::ExpandEnvironmentVariables($path).ToLower().TrimEnd('\')
    
    # 【核心修正】:如果現有的 PATH 裡面,既沒有原始變數格式,也沒有展開後的 C:\ 格式,才允許加入!
    if ($currentPathArray -notcontains $cleanPath -and $expandedCurrentPathArray -notcontains $expandedPath) {
        $pathsToAppend += $path
    }
}

# 5. 如果有發現缺少的路徑,才進行更新
if ($pathsToAppend.Count -gt 0) {
    
    # 判斷原本的 PATH 是不是空的
    if ([string]::IsNullOrWhiteSpace($currentPath)) {
        $newPath = $pathsToAppend -join ";"
    } else {
        # 確保原本使用者自己裝的軟體路徑完全不會被動到
        $newPath = $currentPath.Trim(';') + ";" + ($pathsToAppend -join ";")
    }
    
    # 6. 強制指定以 ExpandString (REG_EXPAND_SZ) 寫入,保護 %SystemRoot% 變數不變死字串
    Set-ItemProperty -Path $regPath -Name PATH -Value $newPath -Type ExpandString
    
    Write-Host "成功!已保留原本的所有路徑,並補上缺少的:($($pathsToAppend -join ', '))" -ForegroundColor Green
    
    # 7. 通知 Windows 系統更新環境變數(免重開機立即生效)
    $signature = '[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam, uint fuFlags, uint uTimeout, out UIntPtr lpdwResult);'
    $win32 = Add-Type -MemberDefinition $signature -Name "Win32" -Namespace "Env" -PassThru
    $result = [UIntPtr]::Zero
    $win32::SendMessageTimeout([IntPtr]0xffff, 0x001A, [UIntPtr]::Zero, "Environment", 2, 5000, [ref]$result) | Out-Null

} else {
    Write-Host "檢查完畢:所有核心路徑與指定路徑已存在(包含變數展開檢查),未重複新增。" -ForegroundColor Yellow
}
補充其他系統變數的Path
npm 與node 無法執行要加入C:\Program Files\nodejs
choco無法執行要加入C:\ProgramData\chocolatey\bin

2026-05-25

[Oracle]R12: APP-FND-01702 Document is not assignment

要先選付款文件後帶出文件編號,如先選付款處理設定檔後面會出錯



[Oracle]AP Payment 建立會計失敗

 

Data Fix方法,騙系統已經建立會計,再於總帳手動補入對應分錄

!!!!!重要提醒,進行任何資料修改記得備份,並且知道自己在做什麼!!!!!
SELECT AIP.ACCOUNTING_EVENT_ID, AIP.INVOICE_ID, AIP.AMOUNT, AIP.ORG_ID
  FROM AP_INVOICE_PAYMENTS_ALL AIP
 WHERE 1 = 1
   AND AIP.CHECK_ID = 371500
 ORDER BY AIP.INVOICE_PAYMENT_ID;

SELECT EVENT_ID,EVENT_STATUS_CODE,PROCESS_STATUS_CODE FROM XLA_EVENTS WHERE EVENT_ID IN (808092,18237498);

UPDATE XLA_EVENTS
   SET EVENT_STATUS_CODE = 'P', PROCESS_STATUS_CODE = 'P'
 WHERE EVENT_ID IN (18237498); --REFUND CANCELLED 的 ACCOUNTING_EVENT_ID

SELECT AIP.ACCOUNTING_EVENT_ID,AIP.ACCRUAL_POSTED_FLAG,AIP.CASH_POSTED_FLAG,AIP.POSTED_FLAG FROM AP.AP_INVOICE_PAYMENTS_ALL AIP WHERE AIP.ACCOUNTING_EVENT_ID IN (808092,18237498);

UPDATE AP.AP_INVOICE_PAYMENTS_ALL AIP
   SET AIP.ACCRUAL_POSTED_FLAG = 'Y',
       AIP.CASH_POSTED_FLAG    = 'Y',
       AIP.POSTED_FLAG         = 'Y'
 WHERE AIP.ACCOUNTING_EVENT_ID = 18237498; --Refund Cancelled 的 ACCOUNTING_EVENT_ID

SELECT APH.ACCOUNTING_EVENT_ID,APH.POSTED_FLAG FROM AP.AP_PAYMENT_HISTORY_ALL APH WHERE APH.ACCOUNTING_EVENT_ID IN (808092,18237498);

UPDATE AP.AP_PAYMENT_HISTORY_ALL APH
   SET APH.POSTED_FLAG = 'Y'
 WHERE APH.ACCOUNTING_EVENT_ID = 18237498; --Refund Cancelled 的 ACCOUNTING_EVENT_ID

執行Subledger Period Close Exceptions Report確認是否月底可以關帳

[Oracle]結帳後AP沒有關閉,造成帳務拋錯錯誤

l   說明目前時間12月份,AP模組1112月份期間開啟,GL模組11月份期間關閉、12月份期間開啟,取消11月份AP商業發票,拋轉到11月份,正確資料應拋到12月份

l   解決方案重新開一張一樣的AP商業發票,並將新舊AP商業發票拋到總帳,關閉AP模組與GL模組11月份期間,再將新的AP商業發票取消,即可取消在12月份

科目餘額不會影響,但借貸都會增加數字

2026-05-22

[Oracle]供應商建立於多組織

l   建立供應商,Organization NameSupplier Number

l   Supplier Sites建立不同OU

備註如遇到已經建立可以先更換名稱並失效,再進行新增 

[Oracle]How to disable Suppiler

 只能設定失效時間,資料表的Flag找不到位置