2020年12月1日 星期二

Oracle EBS: 已有執行ad_ctx_ddl.sync_index('APPLSYS.FND_LOBS_CTX'), 但修改org item時, 存檔仍需數分鐘才完成

問題: 已有執行ad_ctx_ddl.sync_index('APPLSYS.FND_LOBS_CTX'), 但修改org item時, 存檔仍需數分鐘才完成


狀況:

1.CTXSYS.CTX_PENDING只有數百筆, select速度極快

2.CTXSYS.DR$WAITING有3萬多筆, 但select耗時近30秒, 即使table沒資料時也是同樣狀況


解決方案: 要執行alter table ctxsys.DR$WAITING move


--steps A

begin

      ad_ctx_ddl.sync_index('APPLSYS.FND_LOBS_CTX');

 end;

--steps B

alter table ctxsys.DR$WAITING move


ALTER TABLE CTXSYS.DR$WAITING SHRINK SPACE


減少CTXSYS.DR$WAITING,CTXSYS.DR$PENDING table中筆數的方法:


connect as ctxsys:


 select u.username, i.idx_name

 from dr$index i, dba_users u

 where u.user_id=i.idx_owner#

 and idx_id in (select pnd_cid from ctxsys.dr$pending);


exec ctx_ddl.sync_index('USERNAME.INDEX');



Ref:

1.请教:在新建物料和修改物料时非常慢是什么原因

http://www.itpub.net/thread-1440660-1-1.html


2.Can Users Manually Shrink DR$WAITING And DR$PENDING in the CTXSYS schema? (Doc ID 2447229.1)


3.E-Business Suite Applications Technology Stack Database Contains Millions Of Records In CTXSYS.DR$PENDING And CTXSYS.DR$WAITING Tables (Doc ID 382809.1)


2020年11月30日 星期一

Oracle EBS: Script To Split An Order Line

set serveroutput on

DECLARE

 l_header_rec OE_ORDER_PUB.Header_Rec_Type;

 l_line_tbl OE_ORDER_PUB.Line_Tbl_Type;

 l_action_request_tbl OE_ORDER_PUB.Request_Tbl_Type;

 l_header_adj_tbl OE_ORDER_PUB.Header_Adj_Tbl_Type;

 l_line_adj_tbl OE_ORDER_PUB.line_adj_tbl_Type;

 l_header_scr_tbl OE_ORDER_PUB.Header_Scredit_Tbl_Type;

 l_line_scredit_tbl OE_ORDER_PUB.Line_Scredit_Tbl_Type;

 l_request_rec OE_ORDER_PUB.Request_Rec_Type ;

 l_return_status VARCHAR2(1000);

2020年11月27日 星期五

Oracle EBS: ICX_CAT_ITEMS_CTX_DTLS_TLP table資料量大的處理方法

問題: 在查看org item存檔速度問題時, 發現ICX_CAT_ITEMS_CTX_DTLS_TLP的資料有2G, 超過1700萬筆, 因此找了purge的方法(雖然事後證實這與現有存檔速度問題無關)



作法: 


1. Go into the responsibility: Purchasing.


2. Navigate to Reports / Run / Single Request


3. Execute Purge Catalog Intermedia Index (ICXPCIIP)


4. Create Index on ICX_CAT_ITEMS_CTX_DTLS_TLP 


a) Creating index


create index ICX.XX_ICX_CAT_ITEMS_CTX_TLP_99 on ICX.ICX_CAT_ITEMS_CTX_DTLS_TLP (INVENTORY_ITEM_ID,ORG_ID,LANGUAGE,SEQUENCE) online compute statistics parallel 8;


b) Disabling parallel on an index (example):


ALTER INDEX ICX.XX_ICX_CAT_ITEMS_CTX_TLP_99 NOPARALLEL;


c) Gathering stats on a table (example):


Exec fnd_stats.gather_table_stats('ICX','ICX_CAT_ITEMS_CTX_DTLS_TLP',100);



Ref:

1.Performance Issue with INVIDITM.fmb or INCOIN Involving ICX_CAT_ITEMS_CTX_DTLS_TLP (Doc ID 1925118.1)



2020年10月31日 星期六

修正ra_interface_lines_all中資料以重新作autoinvoice

修正ra_interface_lines_all中資料以重新作autoinvoice

1.確認Auto Invoice程式未在執行中

2.清除ra_inteface_lines_all中的flag並commit

UPDATE ra_interface_lines_all
    SET interface_line_id = NULL,
        customer_trx_id = NULL,
        request_id = NULL,
        link_to_line_id = NULL,
        interface_status  = null
  WHERE NVL (interface_status, 'x') != 'P';

 3.重新執行AutoInvoice

 

Ref:

1.AutoInvoice: "Stuck in the Interface" issue

http://oraclapps.blogspot.com/2019/07/autoinvoice-stuck-in-interface-issue.html

 

2.Troubleshooting AutoInvoice: "Stuck in the Interface" issues: Interface line not created in AR and no error is showing in the interface (Doc ID 1146573.1)

 

Oracle EBS: 批次將concurrent產出之output更名為所需之PO PDF

 針對以程式批次產出之PO PDF output, 整批進行更名並下載.


1.找出request_id與其中PO之關聯, 取得PO number

2.組出如下內容, 存檔為cp_po.sh

cp -p o172681076.out /tmp/pdf_file/3200244536.pdf

cp -p o172681077.out /tmp/pdf_file/3200244557.pdf

cp -p o172681078.out /tmp/pdf_file/3200244558.pdf

cp -p o172681079.out /tmp/pdf_file/3200244559.pdf

cp -p o172681080.out /tmp/pdf_file/3200244564.pdf

cp -p o172681081.out /tmp/pdf_file/3200244566.pdf

3.執行cp_po.sh

4.下載/tmp/pdf_file中的PDF檔案


 

2020年8月28日 星期五

Oracle EBS: "You cannot reverse frozen subledger journal sources" error

問題: 在GL要作reverse時, 出現"You cannot reverse frozen subledger journal sources"訊息
原因: The journal source for the subledger journal is frozen.

解法: To reverse the journal you need to unfreeze the subledger journal source:
1. Navigate to: Setup>Journal>Sources
2. Query for the source of your journal
3. Select the pretended option from the 'Freeze journals' list of values:
• Yes: Journals from this source cannot be changed in the Enter Journals form nor the Journal Correction form. In addition, you cannot reverse journals with Subledger Accounting journal sources that are frozen.   
• No: Journals from this source can be changed in both the Enter Journals form and the Journal Correction form. In addition, you can reverse journals with unfrozen Subledger Accounting journal sources.  
• Journal Entry Page Only: Journals from this source cannot be changed in the Enter Journals form but can be changed in the Journal Correction form. In addition, you cannot reverse journals with Subledger Accounting journal sources that have this option.
NOTE: It is strongly advised that you freeze the subledger source back after you reverse the journal; unfreezing subledger journal sources will allow users to reverse subledger sourced journals at will, causing reconciliation problems between General Ledger and subledgers.


Ref:
1.GLXJEENT: Journal Reversal Throws Error: You Cannot Reverse Frozen Subledger Journal Sources (Doc ID 454472.1)

2020年7月3日 星期五

Python: 以openpyxl寫入大量資料至xlsx, 出現MemoryError

問題: 以openpyxl寫入大量資料至xlsx, 出現MemoryError, 但若筆數少就正常

原因: 原先只指定 wb=workbook() , 找到資料是要加註 write_only=True , 改為

  wb-workbook(write_only=True)

但仍有問題, 出現:

  I/O operation on closed file error

解法: 要再安裝lxml

Here again, the regular openpyxl.worksheet.worksheet.Worksheet has been replaced by a faster alternative, the openpyxl.writer.write_only.WriteOnlyWorksheet. When you want to dump large amounts of data make sure you have lxml installed.

果然, 裝好就能正常運作了.


Ref:
1.Write-only mode
https://openpyxl.readthedocs.io/en/default/optimized.html#write-only-mode

2.openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files
https://openpyxl.readthedocs.io/en/default/index.html


Error log:
Traceback (most recent call last):
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 832, in _get_writer
    yield file.write
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 772, in write
    serialize(write, self._root, qnames, namespaces,
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 937, in _serialize_xml
    _serialize_xml(write, e, qnames, None,
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 937, in _serialize_xml
    _serialize_xml(write, e, qnames, None,
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 937, in _serialize_xml
    _serialize_xml(write, e, qnames, None,
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 939, in _serialize_xml
    write("</" + tag + ">")
MemoryError

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "C:\temp\dl_rawdata_ebs.py", line 81, in <module>
    wb.save('c:\\shortage\\All.xlsx')
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\workbook\workbook.py", line 392, in save
    save_workbook(self, filename)
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\writer\excel.py", line 293, in save_workbook
    writer.save()
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\writer\excel.py", line 275, in save
    self.write_data()
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\writer\excel.py", line 75, in write_data
    self._write_worksheets()
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\writer\excel.py", line 215, in _write_worksheets
    self.write_worksheet(ws)
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\writer\excel.py", line 200, in write_worksheet
    writer.write()
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_writer.py", line 360, in write
    self.close()
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_writer.py", line 368, in close
    self.xf.close()
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_writer.py", line 299, in get_stream
    pass
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\contextlib.py", line 120, in __exit__
    next(self.gen)
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\site-packages\et_xmlfile\xmlfile.py", line 50, in element
    self._write_element(el)
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\site-packages\et_xmlfile\xmlfile.py", line 77, in _write_element
    xml = tostring(element)
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 1133, in tostring
    ElementTree(element).write(stream, encoding,
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 772, in write
    serialize(write, self._root, qnames, namespaces,
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\contextlib.py", line 131, in __exit__
    self.gen.throw(type, value, traceback)
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 832, in _get_writer
    yield file.write
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\contextlib.py", line 525, in __exit__
    raise exc_details[1]
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\contextlib.py", line 510, in __exit__
    if cb(*exc_details):
  File "C:\Users\UT05\AppData\Local\Programs\Python\Python38-32\lib\contextlib.py", line 382, in _exit_wrapper
    callback(*args, **kwds)
ValueError: I/O operation on closed file.


2020年7月2日 星期四

Python: 以cx_Oracle取Oracle DB資料時, 出現illegal multibyte sequence error

問題: Python以cx_Oracle取Oracle DB資料時, 出現illegal multibyte sequence error

原因: 預設使用Big5, 但DB中有簡體字, 無法轉換

解法: 加註encoding = 'UTF-8'


conn = cx_Oracle.connect(user='u',password ='pw', dsn=dsn_tns, encoding = 'UTF-8')


Ref:
1.How to handle unicode data in cx_Oracle and python 2.7?
https://stackoverflow.com/questions/49174710/how-to-handle-unicode-data-in-cx-oracle-and-python-2-7

2.Random character is displayed when unicode data is fetched
https://github.com/oracle/python-cx_Oracle/issues/157

Python: 把CSV轉為XLSB檔

要先安裝pywin32, 實測也可以把xlsx轉為xlsb.
 
sample code: 
import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
doc = excel.Workbooks.Open('D:\\input.csv')
doc.SaveAs( 'D:\\output_bin.xlsb', 50 )
 
Ref:
 
2.pywin32 安裝與使用教學,Python 的 Windows 擴充功能套件
https://officeguide.cc/python-windows-extensions-pywin32-installation/
 
 

2020年6月30日 星期二

Oracle EBS: Automatic Customer Numbering

使用OM Superuser權限,

Setup
  -> Customer
    -> System Options

在 [Trans and Customers] 頁籤中:
 
Automatic Customer Numbering
 
 
 

2020年6月5日 星期五

Oracle EBS: XML publisher report增加欄位後, 出現error: java.lang.OutOfMemoryError: unable to create new native thread

問題: XML publisher report增加欄位後, 出現error:
 
    java.lang.OutOfMemoryError: unable to create new native thread
 
查到有個設定可調:
 
    REPORTS_JVM_OPTIONS="-Xms256M -Xmx2048M"
    export REPORTS_JVM_OPTIONS
 
但改了出現另一個問題:
 
   stat_low = 8B
   stat_high = 0
   emsg:was terminated by signal 11
 
這問題就奇怪了, 有篇文章說是系統裡有Riverbed monitoring agent造成, 但與實際狀況不符.
 
再改了設定:
 
    REPORTS_JVM_OPTIONS="-Xmx2048M"
 
報表直接就掛了:
 
    Error occurred during initialization of VM
 
因為只有一個參數, 不需要加雙引號.
 
再查了查:
 
    -Xms : 起始所用記憶體
    -Xmx : 最大可用記憶體
 
至於單位可以是K、M、G .
 
參數弄清楚了, 報表問題還是無解.
 
 
Ref:
1.Fusion Middleware Publishing Reports to the Web with Oracle Reports Services
https://docs.oracle.com/cd/E17904_01/bi.1111/b32121/pbr_rfap001.htm#RSPUB23916
 
 
3.Oracle Application Server Reports Services Publishing Reports to the Web
http://aurumtecnologia.com.br/index.php/oracle-application-server-reports-services/
 
 
 
6.请问这个-Xms256m -Xmx1024m到底是什么意思,请详细给我讲解一下
https://zhidao.baidu.com/question/712440742664116845.html
 
7.Java修改JVM記憶體大小整理。(java heap space 解決方案)
 
8.java.lang.OutOfMemoryError: unable to create new native thread问题排查以及当前系统最大进程数量
https://www.jqhtml.com/58796.html
 
9.解決 – java.lang.OutOfMemoryError: unable to create new native thread
https://www.itread01.com/p/1331658.html
 
 

2020年6月3日 星期三

Oracle EBS: 在Windows 10 64位元作業系統上執行Oracle ERP R11

問題: 預設的JIinitiator無法正常安裝, 會出現error

解法: 需安裝64位元版本

程序:
1.oajinitinstaller-64bit.zip解壓縮至資料夾 C:\oajinit
2.以系統管理員權限執行CMD.exe
3.切換至C:\oajinit
4.執行setup.bat

完成.

備註: 依說明文件是直接雙擊setup.bat執行即可, 但實際會有檔案無法寫入的問題, 即使以系統管理員權限直接執行也是一樣.



2020年6月2日 星期二

Oracle EBS: 修改item KFF的value set, 由20字元改為40字元

問題: 修改item KFF的value set, 由20字元改為40字元

原因: 系統上線時, 料號編碼不長, 所以只設定20字元, 但後來編碼日趨複雜, 20字元已不夠用

解法: 直接修改value set. 為了避免有其他問題, 也問了Oracle support, 得到的回覆也是可以直接作, 但若是反過來要減少長度, 就可能會有問題.

更改時還鬧了烏龍, 以21個字元的料號作organization assignment時沒有成功, 但也沒有錯誤訊息, 以為是Oracle的問題, 最後發現是兩個客製的trigger造成.   Orz...
 
Ref:
1.System Item KFF Item Segment Length Reduction (Doc ID 376210.1)
 
 

Oracle EBS: Report問題 REP-0069: Internal error

問題: 有個以XML publisher製作的報表, 原先就已經很多欄位, 再增加三個欄位後, 出現error:

MSG-00001: 
MSG-00000: 
MSG-00001:  AND 1=1
REP-0002: Unable to retrieve a string from the Report Builder message file.
REP-271504897:
REP-0069: Internal error
REP-57054: In-process job terminated:Terminated with error:
REP-271504897: MSG-00001: 
MSG-00000: 
MSG-00001:  AND 1=1
REP-0002: Unable to retrieve a string from the Report Builder message file.
REP-271504897:

REP-0069: Internal error
java.lang.OutOfMemoryError: unable to create new native thread

在Oracle找到的建議作法為:

a) Backup the file $ORACLE_HOME/bin/reports.sh .
b) Edit the file $ORACLE_HOME/bin/reports.sh and add the lines:
REPORTS_JVM_OPTIONS="-Xms256M -Xmx2048M"
export REPORTS_JVM_OPTIONS
c) Re-test the failing report(s).

但目前還是無解.


Ref:
1.Some Reports Fail With The Error : REP-0069: Internal error java.lang.OutOfMemoryError: unable to create new native thread (Doc ID 1415499.1)

2020年6月1日 星期一

Toad在Windows 64位元的問題: ORA-12154: TNS:無法解析指定的連線ID (TNS:could not resolve the connect identifier specfied)

重裝了幾次, 都是同樣問題.
 
印象中要避免資料夾有特殊字元, 有把預設的安裝資料夾從:
 
  C:\Program Files (x86)
 
改為:
 
  C:\Program Files
 
但安裝時還是跑回原預設資料夾.
 
最後是手動建了:
 
  C:\Quest Software
 
終於搞定了.   Orz...
 
 
Ref:
1.在64位Windows系统上安装Toad和PLSQL Developer等Oracle客户端工具
https://www.cnblogs.com/blodfox777/archive/2010/07/28/1787016.html
 
 

2020年5月29日 星期五

跨AD設定mail group中的成員


在outlook中無法直接跨AD設定mail group成員, 變通作法是執行:

  %SystemRoot%\SYSTEM32\rundll32.exe dsquery,OpenQueryWindow
 
就會有作業畫面可使用, 要先從整個目錄中選取要使用的AD.

目前測試Windows 10可以, 但Windows 7有問題, 無法瀏覽整個目錄.
 
 
 
 

2020年5月27日 星期三

Oracle EBS: 以oe_order_pub.Process_Order新增line, 出現error Invalid Tax Classification Code

問題: 以oe_order_pub.Process_Order新增line, 出現error Invalid Tax Classification Code
 
原因: 比對資料發現, tax code沒問題, 實際上是因為schedule ship date落在過去造成, 修正後已可正常新增line
 
心得: Oracle的error message本身就是個error...
 
 
Ref:
1.Sales Order Line Tax Classification Code
 

 

2020年5月26日 星期二

Oracle EBS: 以alert發送email並加上附檔

在blog上看到有提出可用alert發送email並加上附檔, 於是到Oracle網站搜尋, 有找到方法, 但Oracle稱只是提供方法, 不提供問題排除及支援.
 
作法如下:
1. While defining Oracle alert Action, Select 'Action Level' as 'Summary'.
2. In Action Details, select 'Action Type' as 'Operating System Script'.
3. Select the 'Text' radio button.
4. Write the following code : uuencode <Name of the file along with the path> <Name of the attachment in the mail>|mailx -c &cc_mail_id,&to_mail_id -s "<Subject of the Mailer>" &to_mail_id.
5. One can use mail or sendmail command also instead of mailx command.
6. Save Alert details and test.
 
 
Ref:
1.1.ALERTS Interview Questions and Answers in Oracle Apps
http://appselangovan.blogspot.com/2013/10/alerts-interview-questions-and-answers.html
 
2.How to Send Email Attachments With Oracle Alerts? (Doc ID 1576621.1)
 
 

2020年4月20日 星期一

在 Windows 10 上安裝 Hyper-V

為了作測試, 原本要安裝Oracle Virtualbox, 但一直有error, 在查資料時發現Windows上可以啟用Hyper-V , 就改用Hyper-V試試吧.


Ref:
1.在 Windows 10 上安裝 Hyper-V
https://docs.microsoft.com/zh-tw/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v

2020年4月17日 星期五

Oracle EBS: 更改GL Accounting Calendar From/To 日期

在Oracle上直接修改目前年度Period的日期(改為不是1日到月底), 會有APP-SQLGL-08044的error.

  APP-SQLGL-08044: You can only modify periods that have never been used.

針對修改起訖日期, Oracle所支援作法是定義新的Calendar和Set of Books, 再執行Consolidation將資料移轉至新帳本, 這也會影響到subledger.

如果確定要更動, 可create SR上傳資料, 供Support檢查是否有可能進行datafix.

但如果是新設定下一年度的資料, 就不會有問題.


Ref:
1.R12: Calendar Changes that can be Supported in General Ledger (GL) (Doc ID 1061798.1)
2.GL Setup: GLXSTCAL. APP-SQLGL-08044 error. Cannot update From and To dates on Accounting Calendar (Doc ID 144132.1)

2020年4月15日 星期三

以Windows的工作排程器設定執行VBscript, 程式有執行, 但未正常完成

問題: 有個需求是要把html table轉為xlsb格式的excel檔, 再針對特定欄位以巨集進行刪除及向下填滿. 直接執行客製的VBscript可正常完成, 但以Windows的工作排程器設定執行VBscript, 就不正常, 程式在要開啟檔案時結束, 無法完成作業

原因: 不明. 問過其他人, 有人遇過類似狀況, 因應作法是改以Windows service的方式處理

解法: 找了些軟體試試. 有個System Scheduler的程式可以解決這問題, 設定上也不複雜. 原先想自己寫個程式來排程, 這下倒是省到了.

Systerm Scheduler有區分免費版和專業版, 免費版的功能已足以處理現有需求. 感謝作者.


Ref:
1.System Scheduler
https://www.splinterware.com/products/scheduler.html

2020年4月7日 星期二

執行excel巨集時出現error: 不信任以程式設計方式存取 Visual Basic 專案

問題: 以VBScript執行excel巨集時, 出現error 不信任以程式設計方式存取 Visual Basic 專案

解法:

在 Excel選項 -> 信任中心 -> 巨集設定  中, 更改兩項設定:
  啟用所有巨集
  信任存取VBA專案物件模型

完成.


Ref:
1.啟用或停用 Office 檔案中的巨集
https://support.office.com/zh-tw/article/%E5%95%9F%E7%94%A8%E6%88%96%E5%81%9C%E7%94%A8-office-%E6%AA%94%E6%A1%88%E4%B8%AD%E7%9A%84%E5%B7%A8%E9%9B%86-12b036fd-d140-4e74-b45e-16fed1a7e5c6

2020年3月27日 星期五

Oracle EBS: WebADI無法正常執行

狀況: 同一個用來處理WebADI的excel檔案, 有人無法正常執行

原因: Excel的設定問題

解法:

Excel選項
  -> 信用中心
    -> 巨集設定

設定以下兩項:
  啟用所有巨集
  信任存取VBA專案物件模型


2020年3月20日 星期五

Python: 以 Python使用Outlook發出帶有附件的email

看起來是個常見問題, 很快就找到sample:

import win32com.client as win32
outlook
= win32.Dispatch('outlook.application')
mail
= outlook.CreateItem(0)
mail
.To = 'To address'
mail
.Subject = 'Message subject'
mail
.Body = 'Message body'
mail
.HTMLBody = '<h2>HTML Message body</h2>' #this field is optional
# To attach a file to the email (optional):
attachment 
= "Path to the attachment"
mail
.Attachments.Add(attachment)

mail
.Send()


但一開始找不到win32com , 有訊息:

  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  ModuleNotFoundError: No module named 'win32com'


直接執行 pip install win32com , 出現error:

  ERROR: Could not find a version that satisfies the requirement win32com (from versions: none)
  ERROR: No matching distribution found for win32com


實際上應該執行 pip install pypiwin32 .

測試OK.


Ref:
1.Send Outlook Email Via Python?
https://stackoverflow.com/questions/6332577/send-outlook-email-via-python

2.Python操作Word(Win32com)
https://zhuanlan.zhihu.com/p/67543981

2020年3月13日 星期五

Powershell: 寄送email並夾帶附件

語法單純(與Python相比):

Send-MailMessage -From $From -to $To -Cc $Cc -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl -Credential (Get-Credential) -Attachments $Attachment –DeliveryNotificationOption OnSuccess

如果要寄給多個人, 以逗號分隔, 例如:

  $To = "email_1","email_2"

要帶多個附件也是以逗號分隔.


Ref:
1.How to Send an Email Using Windows PowerShell
https://www.makeuseof.com/tag/send-email-windows-powershell/

2.Send-MailMessage
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage?view=powershell-7

3.Powershell 學習筆記
https://blog.darkthread.net/blog/powershell-learning-notes/

4.PowerShell® Notes for Professionals book
https://books.goalkicker.com/PowerShellBook/

5.python中傳送郵件(普通文字檔案、附件、圖片等)
https://www.itread01.com/content/1544639973.html

2020年3月9日 星期一

Python: 執行外部程式

依現有需求, 用最簡單的方式就可以了:
>>> imoprt os
>>> os.system('notepad')
>>> os.system('notepad python.txt')


目前看到有四種方式:
1.使用os.system函式執行其他程式
2.使用ShellExecute函式執行其他程式
3.使用CreateProcess函式執行其他程式
4.使用ctypes呼叫kernel32.dll中的函式


Ref:
1.Python呼叫(執行)外部程式
https://www.itread01.com/content/1543855085.html

2020年3月4日 星期三

Python: 在Python中進行ftp

原先以為會和一般ftp作業一樣, 有相同的put、get指令, 結果是要實作比較細節的檔案讀寫, 還好有不少範例可以參考.

import ftplib

host='ip address'
username=?
password =?

file_remote = 'zz.txt'
f= ftplib.FTP(host)
f.login(username,password)

file_local = 'c:\\temp\\T1.txt'
fp=open(file_local,'wb')
f.retrbinary('RETR %s'%file_remote, fp.write, 1024)

fp.close()
f.quit()


Ref:
1.python之FTP上传和下载
https://www.cnblogs.com/gongxr/p/7529949.html

2.FTP client in Python
https://pythonspot.com/ftp-client-in-python/

2020年3月3日 星期二

Python: 使用cx_Oracle擷取Oracle DB資料

以Python使用cx_Oracle擷取Oracle DB資料.

找了參考資料, 安裝cx_Oracle後, 不管怎麼測試, 都出現同樣問題:

  DPI-1072: the Oracle Client library version is unsupported

原先就有安裝Developer 10g和instantclient 10.2, 可能真的太舊, 再安裝instantclient 19.5, 還是同樣狀況. 結果是path的設定造成, 因為python可能先找到較舊的版本, 所以要把19.5的路徑放在最前面.

第1關過了, 再來第2個問題:

  無法找到程序輸入點GetOverlappedResultEx(在動態連結程式庫KERNEL32.dll)



這有點麻煩, 看了多篇文章才找到原因: Windows 7不支援...

找台Windows 10試試, 果然正常, 有Windows版本問題真的傷腦筋, 要特別注意.

擷取資料沒問題, 其他的就單純了.


Ref:
1.How to Connect Python to Oracle Database using cx_Oracle
https://datatofish.com/how-to-connect-python-to-an-oracle-database-using-cx_oracle/

2.Python Test API - 用python連線Oracle資料庫並操作
https://www.itread01.com/content/1542186427.html

3."DPI-1072: the Oracle Client library version is unsupported" with python3.7.2 and instantclient_19_3/instantclient_12_2 on win10
https://github.com/oracle/python-cx_Oracle/issues/384

4.GetOverlappedResultEx could not be located in kernel32.dll
https://stackoverflow.com/questions/33922025/getoverlappedresultex-could-not-be-located-in-kernel32-dll

5.结合使用 Oracle Database 11g 和 Python
https://www.oracle.com/technetwork/cn/tutorials/229069-zhs.htm#app

2020年2月24日 星期一

多個JPG檔轉為單一PDF檔

有些資料是圖檔格式, 有多張時不好查看, 找到個工具可以合併.

Image To PDF or XPS

http://www.compulsivecode.com/Project_ImageToPDF.aspx


2020年2月18日 星期二

Python: UnicodeDecodeError

問題: 要以python合併多個html檔, 程式執行讀取檔案內容時, 出現UnicodeDecodeError:

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    v_line = f1.readline()
UnicodeDecodeError: 'cp950' codec can't decode byte 0xe6 in position 2351: illegal multibyte sequence


原因: 從server下載的文字檔是以UTF-8編碼, 當python以local電腦上的編碼讀取就出現error

解法: 開啟檔案時註記UTF-8

  f1 = open('c:/temp/ss.htm', 'r', encoding ='UTF-8')


Ref:
1.[Python]-字串編碼錯誤UnicodeDecodeError
https://dotblogs.com.tw/chris0920/2010/10/22/18513


2020年2月17日 星期一

Oracle EBS: 用於查詢INV期間是否關閉之SQL

SELECT ood.organization_id "Organization ID" ,
       ood.organization_code "Organization Code" ,
       ood.organization_name "Organization Name" ,
       oap.period_name "Period Name" ,
       oap.period_start_date "Start Date" ,
       oap.period_close_date "Closed Date" ,
       oap.schedule_close_date "Scheduled Close" ,
       DECODE(oap.open_flag, 'P','P - Period Close is processing' ,
                        'N','N - Period Close process is completed' ,
                        'Y','Y - Period is open if Closed Date is NULL' ,'Unknown') "Period Status"
  FROM org_acct_periods oap ,
       org_organization_definitions ood
 WHERE oap.organization_id = ood.organization_id
   AND (TRUNC(SYSDATE) -- Comment line if a a date other than SYSDATE is being tested.
   --AND ('01-DEC-2014' -- Uncomment line if a date other than SYSDATE is being tested.
       BETWEEN TRUNC(oap.period_start_date) AND TRUNC (oap.schedule_close_date))
 ORDER BY ood.organization_id,
       oap.period_start_date;
   -- If Period Status is 'Y' and Closed Date is not NULL then the closing of the INV period failed.
  

Ref:
1.SQL Query to find Status of Inventory Accounting Periods
https://oracleappsdna.com/2014/12/sql-query-to-find-status-of-inventory-accounting-periods/

2020年2月11日 星期二

Oracle EBS: 開啟/關閉R12中的期間

PO:
  Purchasing SuperUser -> Setup -> Financials -> Accounting -> Control Purchasing Periods

AP:
  Payables Super User -> Accounting -> Control Payables Periods

GL:
  General Ledger Super User -> Setup -> Open/Close

INV:
  Inventory SuperUser -> Accounting Close Cycle -> Inventory Accounting Periods


Ref:
1.Open or Close Periods in R12
https://govoracleapps.wordpress.com/2013/11/24/open-or-close-periods-in-r12/


2020年2月10日 星期一

RPA

RPA:


1.淺談目前最流行的8種RPA工具
https://kknews.cc/zh-tw/tech/kl3omxb.html


2.兩個免費RPA介紹: RPA Press , UiPath
https://www.51rpa.net/rpaedu/511.html


3.免費RPA工具UiPath簡單教學
https://www.18hall.com/uipath1-rpa-20190913/


4.WorkFusion: RPA
https://kb.workfusion.com/
https://kb.workfusion.com/pages/viewpage.action?pageId=81396263


5.5大免費RPA自動化工具大比拼
https://www.18hall.com/rpa-tools-20190913/


6.Sikulix: 圖形辨識自動化測試開發工具
https://tpu.thinkpower.com.tw/tpu/articleDetails/876
http://sikulix.com/
https://raiman.github.io/SikuliX1/downloads.html


Oracle EBS: 重新開啟已關閉之inventory期間

由於疫情問題造成大陸的廠還沒結一月帳, 過完年回來開工, 為了intercompany資料, 要把HQ的一月期間打開.

Forms上的 [Change Status] 按鈕反灰, 不能作, 在Oracle網站找到相關文章.


步驟:

1.備份以下table:
  org_acct_periods
  mtl_period_summary
  mtl_period_cg_summary
  mtl_per_close_dtls
  cst_period_close_summary

2.
  SELECT acct_period_id period, open_flag, period_name name,
  period_start_date, schedule_close_date, period_close_date
  FROM org_acct_periods
  WHERE organization_id = &org_id
  order by 1,2;

3.
  UPDATE org_acct_periods
  SET open_flag = 'Y',
  period_close_date = NULL,
  summarized_flag = 'N'
  WHERE organization_id = &&org_id
  AND acct_period_id >= &&acct_period_id;

  DELETE mtl_period_summary
  WHERE organization_id = &org_id
  AND acct_period_id >= &acct_period_id;

  DELETE mtl_period_cg_summary
  WHERE organization_id = &org_id
  AND acct_period_id >= &acct_period_id;

  DELETE mtl_per_close_dtls
  WHERE organization_id = &org_id
  AND acct_period_id >= &acct_period_id;

  DELETE cst_period_close_summary
  WHERE organization_id = &org_id
  AND acct_period_id >= &acct_period_id;

4. commit

5.從有問題的期間開始, 依序重新執行 'Period Close Reconciliation Report'.


Ref:
1.Re-Open a Closed Inventory Accounting Period (Doc ID 472631.1)

2.HOW TO RE-OPEN A CLOSED INVENTORY ACCOUNTING PERIOD
http://www.oracleerpappsguide.com/2012/01/how-to-re-open-closed-inventory.html

2020年2月9日 星期日

Windows 7中svchost.exe耗用過多記憶體問題

問題: 記憶體可用量極少, 常出現即將耗盡的訊息, 查看發現是svchost.exe耗用過多



解法: 網路上有多篇文章提到, 是自動更新有問題, 要針對Windows update(Automatic Updates)及Background Intelligent Transfer Service (BITS) 的服務先處理, 再重新註冊DLL:

  REGSVR32 WUAUENG.DLL
  REGSVR32 WUAUENG1.DLL
  REGSVR32 ATL.DLL
  REGSVR32 WUCLTUI.DLL
  REGSVR32 WUPS.DLL
  REGSVR32 WUPS2.DLL
  REGSVR32 WUWEB.DLL


但尷尬了, 有三項出現無法載入模組的錯誤訊息:

  WUAUENG1.DLL
  WUCLTUI.DLL
  WUWEB.DLL



再找了篇文章, 提到可能是系統的檔案毀損, 要執行 sfc /scannow , 結果如下:

  C:\Windows\system32>sfc /scannow

  正在開始系統掃描。這將需要一些時間。

  開始系統掃描的驗證階段。
  驗證 100% 完成。
  Windows 資源保護發現受損檔案,但無法修復其中某些檔案。
  詳細資料請見 CBS.Log windir\Logs\CBS\CBS.log。For example
  C:\Windows\Logs\CBS\CBS.log

  系統檔案修復變更將在下次重新開機後生效。


但CBS.log無法開啟, 看不到內容.

重開機後, 那三個模組還是有相同問題, 再觀察.


Ref:
1.Windows 7
https://answers.microsoft.com/zh-hant/windows/forum/all/window-7/9f4cf084-20ca-49e4-942c-467084ebeb06


2020年1月29日 星期三

Oracle: Report runtime背景執行方式

問題: 長久以來, 有個Oracle reports的客製程式, 在forms中以host執行rwrun60的方式, 定期排程把資料輸出至印表機, 但不定時會出現rwrun60卡住, 導致後續資料也都停著未處理

治標: 現行方式, 用windows上的指令, 以taskkill暴力清除rwrun60.exe, 目標有達成, 副作用是有時會誤砍還正在執行中的reports runtime, 又要再人工處理

有想過若host能指定背景執行, 或許就不會卡住, 但host指令沒有這類參數.

再看了看reports的文件, 或許還有其他變通作法.

目前想到的可能方式;
1.改為使用run_product指令進行
2.在report執行時, 指定 BACKGROUND=YES
3.host中改為呼叫rwrbe60, 依Oracle文件所述, 這會較有效率, 且參數與rwrun60相同

找時間再試吧.


Ref:
1.Oracle Reports Reference - Release 6i
https://docs.oracle.com/pdf/A73174_01.pdf
p.596, BACKGROUND (RWRUN60)


2020年1月22日 星期三

Oracle EBS: BI publisher中的冷僻中文字變成問號

問題: BI publisher中的冷僻中文字變成問號

原因: HTML output header中的字元集設定與冷僻字的字元集不同所造成

解決方式:
1.在 XML publisher administration -> Home -> Templates 中
2.查詢報表所使用的template
3.點擊 Edit Configuration 按鈕
4.在 [Template Value] 層的 [HTMLOutput: Character Set] 屬性中, 輸入正確的字元集
5.重啟應用層服務(application tier service)


Ref:
1.Rarely Used Chinese Characters Display As "?" in XML Publisher Excel Output (Doc ID 1336820.1)


2020年1月21日 星期二

Oracle EBS: RTF template是否可產生 .xlsx 報表輸出?

問題: RTF template是否可產生 .xlsx 報表輸出?

答案: 到12.2都還無法作到

補充:
1.rtf template所產生的XHTML輸出, 是非常冗長的檔案格式.
2.在EBS 12.2中(10.1.3.4.2的BiP), 使用真正的Excel templates (.xls), 是有可能產生二進位的Excel
輸出, 但格式是屬於Excel 2003 (.xls), 而不是 .xlsx 格式


Ref:
1.Can .xlsx Report Output Be Generated From RTF Template In EBS 12.2? (Doc ID 2336999.1)

2020年1月17日 星期五

Excel: Mac與Windows的excel檔格式

問題: 廠商原先電腦使用Windows, 轉存舊格式2003 excel檔上傳沒問題, 但使用Mac後, 系統檢查轉存舊格式的excel有問題, 會判斷為不符合要求

狀況:
1.依廠商附檔再另存XLS檔案, 檔案大小與原附檔不同, 且出現相容性檢查的提示, 這與從較高版本另存為excel 2003版本的提示相同.
2.另由廠商mail上可看出, Mac上的選項是 [Excel 97-2004活頁簿] , 但Windows上的選項是 [Excel 97-2003活頁簿]

原因: 應是Mac與Windows的舊excel檔格式仍不同, 造成上傳程式判斷為不符合要求

解決方式: 目前只能先在Windows手動另轉, 不知道有沒有程式可處理