標籤

4GL (1) 人才發展 (10) 人物 (3) 太陽能 (4) 心理 (3) 心靈 (10) 文學 (31) 生活常識 (14) 光學 (1) 名句 (10) 即時通訊軟體 (2) 奇狐 (2) 爬蟲 (1) 音樂 (2) 產業 (5) 郭語錄 (3) 無聊 (3) 統計 (4) 新聞 (1) 經濟學 (1) 經營管理 (42) 解析度 (1) 遊戲 (5) 電學 (1) 網管 (10) 廣告 (1) 數學 (1) 機率 (1) 雜趣 (1) 證券 (4) 證券期貨 (1) ABAP (15) AD (1) agentflow (4) AJAX (1) Android (1) AnyChart (1) Apache (14) BASIS (4) BDL (1) C# (1) Church (1) CIE (1) CO (38) Converter (1) cron (1) CSS (23) DMS (1) DVD (1) Eclipse (1) English (1) excel (5) Exchange (4) Failover (1) Fedora (1) FI (57) File Transfer (1) Firefox (3) FM (2) fourjs (1) Genero (1) gladiatus (1) google (1) Google Maps API (2) grep (1) Grub (1) HR (2) html (23) HTS (8) IE (1) IE 8 (1) IIS (1) IMAP (3) Internet Explorer (1) java (4) JavaScript (22) jQuery (6) JSON (1) K3b (1) ldd (1) LED (3) Linux (120) Linux Mint (4) Load Balance (1) Microsoft (2) MIS (2) MM (51) MSSQL (1) MySQL (27) Network (1) NFS (1) Office (1) OpenSSL (1) Oracle (131) Outlook (3) PDF (6) Perl (60) PHP (33) PL/SQL (1) PL/SQL Developer (1) PM (3) Postfix (2) postfwd (1) PostgreSQL (1) PP (50) python (5) QM (1) Red Hat (4) Reporting Service (28) ruby (11) SAP (234) scp (1) SD (16) sed (1) Selenium (3) Selenium-WebDriver (5) shell (5) SQL (4) SQL server (8) sqlplus (1) SQuirreL SQL Client (1) SSH (3) SWOT (3) Symantec (2) T-SQL (7) Tera Term (2) tip (1) tiptop (24) Tomcat (6) Trouble Shooting (1) Tuning (5) Ubuntu (37) ufw (1) utf-8 (1) VIM (11) Virtual Machine (2) VirtualBox (1) vnc (3) Web Service (2) wget (1) Windows (19) Windows (1) WM (6) Xvfb (2) youtube (1) yum (2)
顯示具有 tiptop 標籤的文章。 顯示所有文章
顯示具有 tiptop 標籤的文章。 顯示所有文章

2024年9月27日 星期五

tiptop 環境登入設定

 1. $HOME/.profile

</u1/usr/tiptop> cat .profile
#echo "?D?i?U?u§@Ao1O (1)¥?|!°I (2)’u﹐O°I (3)?D·C°I *) Exit  [1]:\c"
echo "請選擇工作環境 (1)正式區 (2)測試區 (3)標準區 *) Exit  [1]:\c"
echo ""
read ans
case $ans in
  1) . /u1/usr/profile/profile.topprod
     ;;
  2) . /u1/usr/profile/profile.toptest
     ;;
  3) . /u1/usr/profile/profile.topstd
     ;;
  *) exit
     ;;
esac

2. 根據選取,讀檔

資料庫設定在選取的檔案內,如 /u1/usr/profile/profile.topprod
環境變數在這裡的檔案設定
例如,$FGLPROFILE就是在這裡設定,然後tiptop程式會呼叫環境變數來讀取資料庫設定

##########################################################################

另外,一般user,
1. default directory 在/etc/passwd 設定為/u1/usr/topgui
2. /u1/usr/topgui/.profile 裡面會直接執行udm7

[root@tiptop ~]# cat /u1/usr/topgui/.profile
. /u1/usr/profile/profile.topprod.udm7
exit

所以一般user在linux shell 下,su 過去時,就會直接開啟GUI

2024年9月12日 星期四

Genero連結資料庫

 https://ithelp.ithome.com.tw/m/articles/10259775

既然是從 INFORMIX 剝離出來的工具,應該連結資料庫的能力是強大的。本段落我們檢視一下Genero連結資料庫的能力。

市面上常用的資料庫,都有自己努力的強項,個別的指令也稍微有些不同。為了最大化能共通於這些資料庫,以做到『Write Once, Use Everywhere』,Genero FGL具有自開發的『共通性資料庫介面 ODI, Open Database Interface』,以 INFORMIX 指令為基準 (因為來自於 INFOMIX ),將其他資料庫具有的些微差異,利用 ODI 進行轉譯,概略流程如下:
https://ithelp.ithome.com.tw/upload/images/20210903/20051169moOCaveFDG.png
透過 ODI 的轉換,資料庫內包含數據型態、SQL語法、指令等,能在最大限度下求同,但仍舊保持了使用 PREPARE 方法,使得特殊指令仍在 Genero內能被使用,滿足『優化』的需求,此為存異。

FGLPROFILE

FGL套件的設定檔案是 FGLPROFILE,在這裡可以指定許多必要的設定,今天專門針對『資料庫的連線』進行說明。

FGLPORIFLE採用 entry 的方式設定 (非INI模式),行首 # 字號時代表為註解

  • dbi.default.driver = "" #預設連結的 db 種類驅動程式,安裝時有詢問就會補上
    此設定可以參考 $FGLDIR/dbdrivers 路徑下設定,若為 ORACLE 則通常為 dbmora (注意部分Genero須帶版號)
  • dbi.database..X #指定資料庫連線字串, 可隨產品需求自行定義,X 則是設定帳號密碼等訊息,不同資料庫列出差異於下方

Genero各版本可對接的數據庫

Genero可對接 IBM DB2 / INFORMIX / MS SQL Server / ORACLE / MySQL / PostgreSQL / SAP Hana / SQLite / Sybase ASE (以上按照名稱排序),但是支持版本各有不同,以下挑選部分資料庫作為簡介對象

資料庫廠牌 Genero 2.40 Genero 2.50 Genero 3.20
ORACLE 8.x / 9.x / 10.x / 11.x 9.2 / 10.x / 11.x / 12x 11.x 以上全版本
INFORMIX 5.x / 7.x / 8.x / 9.x / 10.x / 11.x 5.x / 7.x / 8.x / 9.x / 10.x / 11.x 5.x以上全版本
MS SQL Server 2005 / 2008 / 2012 2005 / 2008 / 2012 2012以上全版本,Azure SQDBL V12
PostgreSQL 8.x.y / 9.x.y 8.x.y / 9.x.y 9.6 / 10 / 11 / 12
SQLite 3.5.x / 3.6.x 3.5.x / 3.6.x 3.x

Genero端連線方法

連線到資料庫時,最重要的就是連線字串的設定。包含連結的資料庫主機位置 (port) 、登入資料庫的帳號密碼,以及對應需使用的字元組等環境變數。
^ 例如 ORACLE 資料庫會將相關訊息以 ORACLE_SID 含括成為一組設定時,則須依照該資料庫要求進行設定。

使用靜態的 FGLPROFILE 設定

Genero支持靜態的設定檔,即透過 FGLPROFILE 進行連線字串的設定。FGLPROFILE的存放有兩組路徑:$FGLDIR/etc/fglprofile 與 $FGLPROFILE 指定檔案,遇有同樣的設定時,後者可壓過前者;同檔案內衝突時,下方設定壓過上方設定

使用動態的 CONNECT 指令設定

若需要連結的資料庫眾多,或是需要動態設定,則可以在程式內部使用 CONNECT 指令
語法
『CONNECT TO連線對象+ODI驅動程式名稱 USER 連線帳號 USING 連線密碼』
註:連線對象依照不同資料庫有不同需求。部分資料庫如SQLite無帳號密碼則可省略

以下將以 Genero 3.20 為例說明個別資料庫連線注意事項

本文摘錄需特別關注要點進行說明與介紹,需大量採用或作為生產環境時,仍應詳讀FGL的ODI文件,該文件內均會詳列連線時,DB的特殊之處、須採用的特殊語法、如何將原有程式或查詢語句進行轉換為 ODI 通用語句。

ORACLE

連線前

需在 Genero 所在主機安裝完成對應的 ORACLE Client 軟件,並配置 tnsname.ora,確認ORACLE_SID / ORACLE_HOME 等必須存在的環境變數時,可進行 Genero 端設定

FGLPROFILE設定
dbi.database.dbname.driver = "dbmora"
dbi.database.dbname.source = "stock"
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"
dbi.database.dbname.schema= "登入SCHEMA"

INFORMIX

連線前

驅動程式配置完成後,需確認 INFORMIXSERVER 環境變數是否已完成配置

因為源自於 INFORMIX,所以在 FGLPROFILE 中指定驅動程式即可

PostgreSQL

連線前

需安裝好client,且必須完成下列環境變數的設定

  • PGHOST PostgerSQL資料庫所在IP/Domain
  • PGPORT PostgreSQL資料庫需要通信埠 (預設為5431可在db端新增額外區或調整)
  • PGDATABASE 預期要使用的database
  • PGHOME 若DB與Genero裝在同一台時,指向PostgreSQL安裝路徑用的
  • PGLOCALDIR 若DB與Genero裝在同一台時,指向語系檔用的
  • PGDATA 若DB與Genero裝在同一台時,指向data file存放路徑
FGLPROFILE設定
dbi.database.dbname.driver = "dbmpgs"
dbi.database.dbname.source = "test1"   #或用dbname[@host[:port]]
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"

MS SQL Server

連線前

SQL Server在2.40與更早前的版本,有支持 open source的FREETDS與Easysoft 的連線,此兩種連線需透過 OPEN ODBC的協助。設定上較為繁雜且軟件為社群維護,可能會有維護窗口的顧慮。可考慮直接使用微軟推出的 Linux 版本SQL Server驅動 SNC (SQLserver Native Client) 。
依據 Genero 官網要求,SQL Server連線前應先確定 Linux 上是否已完成對應驅動程式安裝的最低版本要求如下

FGLPROFILE設定
dbi.database.dbname.driver = "dbmsnc"
dbi.database.dbname.source = "test1"
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"

SQLite

連線前

單機文件型資料庫,只需確認套件已安裝即可

FGLPROFILE設定
dbi.database.dbname.driver = "dbmsqt"
dbi.database.dbname.source = "/opt/myapp/stock.dbs"

若完成FGLPROFILE的設定後,即可令程式進行連線

要驗證連線時,可先利用 DATABASE 指令進行連線,依據上方的FGLPROFILE設定,以『dbname』為範例,測試連線如下

MAIN
   DEFINE cnt INTEGER
   DATABASE dbname
   SELECT COUNT(1) INTO cnt FROM hello_table 
   IF cnt > 0 THEN
     DISPLAY “CONNECT OK!”
   END IF
END MAIN

即可確認 DB連線成功。

 

2024年1月3日 星期三

tiptop 閒置時間的觸發邏輯

 出處:https://blog.csdn.net/weixin_36324426/article/details/116813713

 

1、闲置时间的触发逻辑

ON IDLE g_idle_seconds   --代码里面设置触发器,g_idle_seconds表示闲置多少秒后就触发

CALLcl_on_idle()        --设置ON IDLE g_idle_seconds 触发时的处理函数

--所以系统怎么处理闲置时间的逻辑就全在cl_on_idle()此函数中了,你可以根据企业需求定制(ex:针对某一个用户不管制)

2、系统哪里可以设置闲置时间?管控方式怎样?

①.优先根据「p_zz」里面该程序设定的『闲置时间』管控方式

②.如果①里面是“3:遵照整体设定”,则再 根据「p_zx」该用户里面设定的『权限类别』中「p_zw」的『闲置控管方式』

③.如果②继续是“3:遵照整体设定”,则最后根据「aoos010」里面设定的『闲置设置』“启动闲置时间”、“闲置处理”.....

 

 

2019年11月13日 星期三

TIPTOP axcp500D 代码解释


(轉)https://www.hefeiyu.com/?p=1329




成本阶:99  原料无工单(采购料件)  ima08=P/V/Z
  • 原料有工单有BOM
  • 成品或半成品有工单无BOM
0-96 成品或半成品有工单有BOM

cca_file 库存成本期初
ccb_file 库存成本当月入库调整金额
ccc_file  库存月加权成本
ccg_file 每月工单主件在制成本(依工单别的分批在制成本)   即工单上阶成本
cch_file 每月工单元件在制成本                              即工单下阶成本

cct_file 拆件单头
ccu_file 拆件单身

先进先出
Cxa_file
Cxb_file

计算范围:
有下列情况之一的料件,均纳入计算范围:
1 tlf档当期有异动的料件 tlf
2当期有投入工时的料件 ccj
3有工单备料且有投入工时的料件  sfa/sfb/ccj
4当期有上阶在制成本的料件(ccg有余额)
5当期有下阶在制成本的料件(cch未余额)
6有库存期初开帐的料件cca
7当期工单有期初在制开帐金额的料件 ccf
8当期工单有在制调整金额的料件ccl
9当期工单有工单发退料异动的料件sfb/tlf

select 成本阶ima57, 料号ima01,须计算重工否ccd03,低阶码ima16,来源码ima08,分群码ima06,其他分群码ima09-11,成本分群码ima12,
where ima料号=tlf 料号 and   tlf异动日期为当前期间 and  tlf902仓库不为JIT仓库 and 仓库不为0              ##tlf档当期有异动的料件
UNION
Where ima料号=工单档sfb料号 and 投入工时ccj01在当期期间 and ccj04工单号=工单档工单号sfb01           ##当期有投入工时的料件
UNION
Where ima料号=备料档料号sfa03 and 投入工时ccj01在当期期间 and ccj04工单号=工单档工单号sfb01 and sfa备料档料号=sfb工单档料号  ##有工单备料且有投入工时的料件
UNION
Where ima料号=在制成本档料号ccg and 在制成本为当期 and ccg91/92当期在制成本数量或单价不为零                          ##当期有上阶在制成本的料件
UNION
Where ima料号=在制成本元件档cch料号 and 在制成本为当期 and cch91/92当期在制成本数量或单价不为零                    ##当期有下阶在制成本的料件
UNION
Where ima料号=库存期初开帐料号cca        ##有库存期初开帐的料件
UNION
Where ccf 期初在制开帐金额档料号=工单档料号sfb and ima料号=sfb工单料号 and 期初在制开帐金额不为零              ##当期工单有期初在制开帐金额的料件
UNION
Where ccl当期在制调整金额料号=工单料号ima and ima 料号=工单料号sfb
##当期工单有在制调整金额的料件
UNION
Where (未结案工单sfb38 is null or结案日在当前期间内) and ima料号=工单料号sfb05 and tlf单据日期在当前期间内 and  tlf工单单号=sfb工单单号 and tlf13异动命令代号为“asfi5*”                ##当期工单有工单发退料异动的料件
例如:
SELECT ima57,ima01,ccd03,ima16,ima08,ima06, ima09,ima10,ima11,ima12
FROM ima_file,tlf_file,OUTER ccd_file
WHERE ima57=ccd01 AND ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’
AND ima01 = tlf01 AND tlf06 BETWEEN ’00/01/01′ AND ’00/01/31′
AND tlf902 NOT IN (SELECT jce02 FROM jce_file)   AND tlf907 != 0
GROUP BY 1,2,3,4,5,6,7,8,9,10
UNION
SELECT ima57,ima01,ccd03,ima16,ima08,ima06, ima09,ima10,ima11,ima12
FROM ima_file, ccj_file,sfb_file,OUTER ccd_file
WHERE ima57=ccd01 AND ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’
AND ima01 = sfb05 AND ccj01 BETWEEN ’00/01/01′ AND ’00/01/31′
AND ccj04 = sfb01
GROUP BY 1,2,3,4,5,6,7,8,9,10
UNION
SELECT ima57,ima01,ccd03,ima16,ima08,ima06, ima09,ima10,ima11,ima12
FROM ima_file, ccj_file,sfb_file,sfa_file,OUTER ccd_file
WHERE ima57=ccd01 AND ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’
AND ima01 = sfa03 AND ccj01 BETWEEN ’00/01/01′ AND ’00/01/31′
AND ccj04 = sfb01  AND sfb01 = sfa01
GROUP BY 1,2,3,4,5,6,7, 8,9,10
UNION
SELECT ima57,ima01,ccd03,ima16,ima08,ima06, ima09,ima10,ima11,ima12
FROM ima_file, ccg_file,OUTER ccd_file
WHERE ima57=ccd01 AND ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’
AND ima01 = ccg04  AND ccg02= 1999 AND ccg03= 12
AND (ccg91 !=0 OR ccg92 !=0 OR ccg92a !=0 OR ccg92b !=0
OR ccg92c!=0 OR ccg92d !=0 OR ccg92e !=0 )
GROUP BY 1,2,3,4,5,6,7,8,9,10
UNION
SELECT ima57,ima01,ccd03,ima16,ima08,ima06, ima09,ima10,ima11,ima12
FROM ima_file,cch_file,OUTER ccd_file
WHERE ima57=ccd01 AND ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’
AND ima01 = cch04 AND cch02=1999 AND cch03=12
AND (cch91!=0 OR cch92 !=0 OR cch92a!=0 OR cch92b !=0 OR cch92c!=0
OR cch92d !=0 OR cch92e !=0 )
GROUP BY 1,2,3,4,5,6,7,8,9,10
UNION
SELECT ima57,ima01,ccd03,ima16,ima08,ima06, ima09,ima10,ima11,ima12
FROM ima_file,cca_file,OUTER ccd_file
WHERE ima57=ccd01 AND ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’
AND ima01=cca01 AND cca02= 1999 AND cca03= 12
GROUP BY 1,2,3,4,5,6,7,8,9,10
UNION
SELECT ima57,ima01,ccd03,ima16,ima08,ima06, ima09,ima10,ima11,ima12
FROM ima_file,ccf_file,sfb_file,OUTER ccd_file
WHERE ima57=ccd01 AND ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’
AND ccf01=sfb01 AND ima01 = sfb05 AND ccf02=1999 AND ccf03=12
AND (ccf11 !=0 OR ccf12!=0 OR ccf12a !=0 OR ccf12b !=0 OR ccf12c !=0
OR  ccf12d !=0 OR ccf12e !=0 )
GROUP BY 1,2,3,4,5,6,7,8,9,10
UNION
SELECT ima57,ima01,ccd03,ima16,ima08,ima06, ima09,ima10,ima11,ima12
FROM ima_file,ccl_file,sfb_file,OUTER ccd_file
WHERE ima57=ccd01 AND ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’
AND ccl01 = sfb01 AND ima01 = sfb05 AND ccl02= 2000 AND ccl03= 1
GROUP BY 1,2,3,4,5,6,7,8,9,10
UNION
SELECT ima57,ima01,ccd03,ima16,ima08,ima06,ima09,ima10,ima11,ima12
FROM ima_file,tlf_file,sfb_file,OUTER ccd_file
WHERE ima57=ccd01 AND ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’
AND (sfb38 BETWEEN ’00/01/01′ AND ’00/01/31′ OR sfb38 IS NULL )
AND ima01 = sfb05 AND tlf06 BETWEEN ’00/01/01′ AND ’00/01/31′
AND tlf62 = sfb01   and tlf13[1,5] = ‘asfi5’
GROUP BY 1,2,3,4,5,6,7,8,9,10
INTO TEMP tlf_temp WITH NO LOG

计算过程:
排序方式:UNIQUE ima57,ima01,ccd03,ima16   ima57 desc/ima16/ima01
成本阶为99 :1、ccc清零,取上期结存转本期期初
2、由tlf 计算入出库数量,由apb101计算入库(采购)成本
3、加上入库调整金额
4、计算所有出库成本及结存
5、更新ccc-file
成本阶不为99:1、处理当前成本阶所有料件重工
2、ccc清零,取上期结存转本期期初
3、处理WIP在制成本
4、由tlf 计算入出库数量,入库成本(外购料件)
5、加上入库调整金额
6、加上WIP入库金额
7、计算所有出库成本及结存
8、更新ccc-file
处理重工


重工处理过程:
以当前成本阶的所有料件为计算范围,
1、p500_rework1先处理重工WIP及完成品入库,
p500_wip_rework处理重工在制成本(以重工工单sfb99=Y为范围),步骤与处理一般在制相同:wip_1计算主件部分成本;wip_2计算元件投入成本;wip_3计算元件转出成本;wip_4处理主件SUM成本。
2、p500_rework2计算所有重工出库成本及结存,
p500_ccg2_cost加上WIP重工入库成本(ccg32在制转出金额àccc28);
p500_ccc_tot(2) 计算所有出库成本及结存;
3、记录拆件式工单的投入及转出 (sfb02=11)
找所有拆件式工单;
wipx_1计算拆件式WIP主件部分成本;
wipx_2计算拆件式WIP元件投入成本;
wipx_3计算拆件式WIP元件转出成本;
wipx_4计算拆件式WIP主件SUM成本;
p500_ccc_tot(2)计算所有出库成本及结存;


MAIN
删除本期已有资料,取上期结存转本期期初p500_last0
找计算范围(取本期有异动之资料计算tlf)
抓资料到   tlf_tmp
fetch 成本阶/料号/重工否/低阶码  (按成本阶降序排列) 来计算
FOR EACH
IF 当前料件成本阶不同
PUSH 料号
P500_rework 重工处理  (本成本阶所有料件)
POP 料号
END IF
保存当前料件料号g_ima01_t
将当前料件当期成本档归零 ccc_file  p500_ccc_0
取料件上期结存p500_last
IF 当前料件不是原料(成本阶数不为99)
处理WIP在制成本  p500_wip
END IF
由tlf_file 计算入出库数量及采购成本  p500_tlf
加入出库调整金额 p500_ccb_cost
IF 当前料件不是原料(成本阶数不为99)
加上WIP入库金额  p500_ccg_cost
END IF
计算所有出库成本及结存 p500_ccc_tot(1)
计算结果写入当期成本档p500_ccc_ins
END FOREACH
IF 上一料号为NULL 则 上一料号置零
IF 上一成本阶为NULL 则上一成本阶置零
第二次处理重工p500_rework
END MAIN






P500_last0()
Delete 本期成本资料
DELETE FROM ccc_file WHERE ccc02=  2000 AND ccc03= 1 AND ccc01 IN(SELECT ima01 FROM ima_file WHERE ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’)
取上期及开帐成本
SELECT ima01 FROM ccc_file,ima_file WHERE ccc02=1999 AND ccc03=12 AND ccc01=ima01 AND ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’
UNION SELECT ima01 FROM cca_file,ima_file WHERE cca02=  1999 AND cca03= 12 AND cca01=ima01  AND ima01 matches ‘*’ AND ima01 NOT MATCHES ‘MISC*’
CALL p500_ccc_0() 清零
SELECT * INTO g_ccc.* FROM ccc_file WHERE ccc01 = l_ima01 AND ccc02=last_yy AND ccc03=last_mm      先取上月结存
SELECT * INTO l_cca.* FROM cca_file WHERE cca01=g_ccc.ccc01 AND cca02=last_yy AND cca03=last_mm  再取期初开帐



P500_rework()
取当前料件成本阶的ccd03 (须计算重工否)
IF须重工
先计算WIP及完成品入库p500_rework1
再计算所有出库成本及结存p500­_rework2
记录WIP-拆件式工单在制成本(工单性质为11)目的为取重工后单价 p500_wipx0
END IF
END p500_rework2


P500_rework1()
在须计算的资料中抓当前料件异动资料 tlf_tmp
FOREACH 料件
从ccc_file 中抓当期资料,否则置零
处理WIP重工成本(重工 sfb99=y —工单档sfb_file 重工否) p500_wip_rework
end foreach
end p500_rework1

p500_rework2()

在须计算的资料中抓当前成本阶所有料件异动资料 tlf_tmp
FOREACH 料件
从ccc_file 中抓当期资料,否则置零
加上WIP重工入库金额p500_ccg2_cost
计算所有出库成本及结存 p500_ccc_tot(2)
更新ccc_file p500_ccc_upd
end
end


p500_wipx0()
在须计算的资料中抓当前料件异动资料 tlf_tmp
FOREACH 料件
从ccc_file 中抓当期资料,否则置零
p500_wipx
end
end


p500_last0()
取上期结存转本月期初

p500_tlf
对某一料件由tlf档分类统计入出库数量
并分别取入库成本,出库成本暂未处理
( 由tlf 取异动单类型XXX/单号XXX1/项次XXX2)

WHEN tlf13[1,4]=’axmt’ OR tlf13 = ‘aomt800′  销货领出
LET g_ccc.ccc61=g_ccc.ccc61+q_tlf.tlf10*u_sign
CALL p500_ccc63_cost(u_sign)
IF u_sign = 1 THEN
LET g_ccc.ccc64=g_ccc.ccc64+q_tlf.tlf10*u_sign
END IF

WHEN q_tlf.tlf13=’aimt301′ OR q_tlf.tlf13=’aimt311’
##报废异动(aimt303,aimt313)应列入杂项异动中
OR q_tlf.tlf13 = ‘aimt303′ OR q_tlf.tlf13 =’aimt313′
LET g_ccc.ccc41=g_ccc.ccc41+q_tlf.tlf10*u_sign

WHEN q_tlf.tlf13[1,5]=’asfi5′   #工单发料
IF g_sfb99=’Y’ THEN        #重工领出
LET g_ccc.ccc25=g_ccc.ccc25+q_tlf.tlf10*u_sign
ELSE                       #一般工单领出
LET g_ccc.ccc31=g_ccc.ccc31+q_tlf.tlf10*u_sign
END IF

WHEN q_tlf.tlf13[1,5]=’asft6′   #工单入库
IF q_tlf.tlf02 = 65 OR q_tlf.tlf03 = 65 THEN #拆件工单(成本由WIP处理)
LET g_ccc.ccc31=g_ccc.ccc31+q_tlf.tlf10*u_sign
ELSE
IF g_sfb99=’Y’ THEN     #重工入库(成本由重工WIP转出)
LET g_ccc.ccc27=g_ccc.ccc27+q_tlf.tlf10*u_sign
ELSE                    #一般入库
LET g_ccc.ccc21=g_ccc.ccc21+q_tlf.tlf10*u_sign
CALL p500_ccc22_cost()   #取成本
END IF
END IF

WHEN q_tlf.tlf13 = ‘aimt302’ OR q_tlf.tlf13 = ‘aimt312′
LET g_ccc.ccc21=g_ccc.ccc21+q_tlf.tlf10
LET g_ccc.ccc43=g_ccc.ccc43+q_tlf.tlf10
CALL p500_ccc22_cost()
U_flag为入出库标志
WHEN u_flag=’1′                 #一般工单入库、采购入、仓退
LET g_ccc.ccc21=g_ccc.ccc21+q_tlf.tlf10*u_sign
CALL p500_ccc22_cost()   #取入库成本
WHEN u_flag=’5′                 #调整
LET g_ccc.ccc51=g_ccc.ccc51+q_tlf.tlf10*u_sign
WHEN u_flag=’6’                 #盘差
LET g_ccc.ccc71=g_ccc.ccc71+q_tlf.tlf10*u_sign
OTHERWISE CONTINUE FOREACH




p500_ccc22_cost()
取入库成本

工单入库成本暂不处理 (tlf13 MATCHES ‘asf*’)
工单入库成本应由WIP转入,故加工费于wip_2_22()归入投入成本,再转入库

如为委外退库暂不处理
IF q_tlf.tlf13 matches ‘apmt107*’ THEN
LET l_pmm02=NULL
SELECT pmm02 INTO l_pmm02 FROM pmm_file WHERE pmm01=q_tlf.tlf036
AND pmm18 <> ‘X’
IF l_pmm02=’SUB’ THEN RETURN END IF          #–>委外退库亦由WIP转出
END IF
WHEN q_tlf.tlf13 MATCHES ‘aimt30*’   #杂项入zzz
CALL p500_ccc44_cost()
LET amt=l_ccc23 * q_tlf.tlf10 * u_sign
WHEN q_tlf.tlf13 = ‘aimt720’ OR   #调拨入zzz
q_tlf.tlf13 = ‘aimp700’ OR q_tlf.tlf13 = ‘aimp701′
LET amt  = g_ccc.ccc23 * q_tlf.tlf10  #直接取上月平均单价
OTHERWISE      #取发发票请款立帐金额
SELECT apa44,SUM(apb101) #帐款单身成本分摊本币金额
为了配合成本分摊作业aapt900 故改apb10为取apb101
FROM apb_file,apa_file
WHERE apb21=xxx1 AND apb22=xxx2   ##xxx1为tlf单据号,xxx2为项次
AND apb01=apa01 AND apa00 = ’11’   #帐款性质为进货发票
AND apa75 != ‘Y’ AND apa42 = ‘N’    #非外购资料且未作废帐款
AND apa02 BETWEEN g_bdate AND g_edate
GROUP BY 1
问题:为何不判断确认否???apa41=Y
SELECT apa44,SUM(apb101)   # 扣除折让部分(退货)
FROM apb_file,apa_file
WHERE apb21=xxx1 AND apb22=xxx2 AND apb01=apa01
AND apa00 = ’21’ AND apa58 = ‘2’ AND apa75 != ‘Y’ #帐款为退货折让
AND apa42 = ‘N’
AND apa02 BETWEEN g_bdate AND g_edate
GROUP BY 1
金额取绝对值
若为外购信用状入库则取到货分摊后金额 sum(ale09)
SELECT alk72,SUM(ale09)
FROM ale_file ,alk_file
WHERE ale16=xxx1 AND ale17=xxx2 AND ale01=alk01
GROUP BY 1
更新tlf 档,其中杂收不更新,由axct500确定
IF q_tlf.tlf13 != ‘aimt302’ and q_tlf.tlf13 != ‘aimt312′ THEN
UPDATE tlf_file SET (tlf21,tlf221,tlf222,tlf2231,tlf2232,tlf224,
tlf211,tlf212,tlf65)
=(amt,amta,amtb,amtc,amtd,amte,TODAY,g_time,l_apa44)
WHERE ROWID=q_tlf_rowed



p500_ccc44_cost()
取杂项入库成本
先取本月杂项入库金额档inb_file (手工维护)
如无单价则取期初开帐金额 cca_file
仍无单价则取上月平均ccc_file ccc23




p500_ccc63_cost()
本月销货收入


p500_ccb_cost()
加入库库调整金额


p500_ccg_cost()
加上WIP入库金额(工单主件在制成本)
非重工的、非预测工单、非拆件式工单的工单主件在制成本


p500_ccg2_cost()
加上WIP重工入库金额
重工的、非预测工单、非拆件式工单的工单主件在制成本



p500_ccc_tot(1 or 2)
计算所有出库成本及结存
1à第一阶段,先不处理重工
2à第二阶段,处理重工
if 2 则处理重工 p500_ccc_ccc26     ccc26重工领出金额
p500_ccc_ccc23                    ccc23本月平均单价
IF  第一阶段且当前成本阶不须计算重工 或 第二阶段
LET 本月工单领用成本=0    g_ccc_ccc32
LET 本月杂项领用成本=0             42
LET 本月其他领用成本=0             52
LET 本月销货成本=0                 62/62a/62b/62c/62d/62e
LET 本月盘盈亏金额=0               72
LET 本月销退成本=0                 66/66a-e
P500_tlf21_upd
END IF
LET 本月结存数量ccc91=上月结存数量ccc11+本月入库数量ccc21(采购入+工单入+委外入)+本月重工领出ccc25+本月重工入库数量ccc27+本月工单领用数量ccc31+本月杂项领用数量ccc41+本月其他调整数量ccc51+本月销货数量ccc61+本月盘盈亏数量ccc71
LET 本月结存金额ccc92=上月结存金额ccc12+本月入库金额ccc22(材料22a+人工22b+制费22c+加工22d+其他22e)+本月重工领出金额ccc26+本月重工入库金额ccc28+本月工单领用成本ccc32+本月杂项领用成本ccc42+本月其他调整成本ccc52+本月销货成本ccc62+本月盘盈亏金额ccc72
销退数量ccc64和销退成本ccc66未考虑???
LET 本月结存材料金额=本月结存数量ccc91*本月平均单价-材料ccc223a
人工
制费
委外
其他
差异金额ccc93



p500_ccc_ccc26
处理重工领出金额


p500_ccc_ccc23()
计算本月重工工单部分的平均单价
先取期初开帐,再取上月余额进行计算平均单价


p500_tlf_upd()
更新tlf 档单价

p500_ccc_ins()
更新ccc档成本金额

p500_cch_0()
将工单元件在在制成本档按上月期末转本月期初,其余归零

p500_cch_01()
将工单元件在在制成本档全部归零

wip_del()
删除工单在制成本档(ccg/cch)
p500_wip()
处理WIP工单在制成本(工单性质1/7)
SELECT * FROM sfb_file   #找当前料件在制工单(非重工)
WHERE sfb05 =g_ima01
AND sfb02!= ’13’ AND sfb02 != ’11’
AND (sfb99 IS NULL OR sfb99 = ‘ ‘ OR sfb99=’N’)
AND (sfb38 IS NULL OR sfb38 >= g_bdate)  # 工单成会结帐日
AND (sfb81 IS NULL OR sfb81 <= g_edate)  # 工单开立日期
ORDER BY sfb01
先delete  ccg/cch  wip_del
计算每张工单的WIP主件部分成本(ccg)  wip_1()
计算每张工单的WIP元件投入成本(cch)  wip_2()
计算每张工单的WIP元件转出成本(cch)  wip_3()
计算每张工单的WIP主件SUM成本(ccg)  wip_4()


p500_wip_rework()
处理WIP-REWORK在制成本(重工sfb99=’Y’)
先delete  ccg/cch  wip_del2
计算每张工单的WIP主件部分成本(ccg)  wip_1()
计算每张工单的WIP元件投入成本(cch)  wip_2()
计算每张工单的WIP元件转出成本(cch)  wip_3()
计算每张工单的WIP主件SUM成本(ccg)  wip_4()


wip_1()
计算每张工单的WIP主件部分成本(ccg)
将mccg归零p500_mccg_0

wip上期期末数量转本期期初(先取在制工单成本数量ccg91,再取在制开帐档数量ccf11)
工时统计wip_ccg20(取ccj档工单合计工时)
计算每张工单WIP主件转出数量wip_ccg31 (取tlf档成品入库-成品退库)
更新ccg_file



wip_ccg20()
SELECT SUM(ccj05) INTO mccg.ccg20 FROM ccj_file      #取ccj档工单合计工时
WHERE ccj04=g_sfb.sfb01 AND ccj01 BETWEEN g_bdate AND g_edate

Wip_ccg31()
计算工单WIP主件转出数量
SELECT SUM(tlf10*tlf60) INTO g_make_qty FROM tlf_file      # 当月成品入库量
WHERE tlf62=g_sfb.sfb01 AND tlf06 BETWEEN g_bdate AND g_edate
AND (tlf03 = 50)
AND tlf13 MATCHES ‘asft6*’
AND (tlf01 = g_sfb.sfb05)
SELECT SUM(tlf10*tlf60) INTO g_make_qty2 FROM tlf_file     #当月成品退库量
WHERE tlf62=g_sfb.sfb01 AND tlf06 BETWEEN g_bdate AND g_edate
AND (tlf02 = 50)
AND tlf13 MATCHES ‘asft6*’
AND (tlf01 = g_sfb.sfb05)
转出数量(以负数表示)=退库量-入库量



wip_ccg21()
计算每张工单的WIP主件投入数量
抓工单发料底稿sfq的成套发料(sfp=1)-成套退料(sfp=6)


wip_2()
计算每张工单的WIP元件‘期初/本期投入成本’cch
step1. WIP元件上期末转本期期初  wip_2_1
step2-1 WIP元件本期投入材料(依工单发料/退料档) wip_2_21
计算每张工单的WIP主件投入数量           wip_ccg21
step2-2 WIP元件 本期投入人工制费                 wip_2_22
step2-3 WIP元件 本期投入调整成本                 wip_2_23


wip_2_1()
先取cch档上期转本期期初
再取ccf在制开帐档转本期期初


wip_2_21()
WIP元件 本期投入材料(依工单发/退料档) 同时结出投入金额
SELECT tlf01,ima08,ima57,tlf02,tlf03,tlf13,SUM(tlf10*tlf60*tlf907*-1),
SUM(tlf21*tlf907*-1),SUM(tlf221*tlf907*-1),SUM(tlf222*tlf907*-1),
SUM(tlf2231*tlf907*-1)
FROM tlf_file,ima_file
WHERE tlf62=g_sfb.sfb01 AND tlf06 BETWEEN g_bdate AND g_edate
AND ((tlf02=50 AND tlf03 BETWEEN 60 AND 69) OR
(tlf03=50 AND tlf02 BETWEEN 60 AND 69))
AND tlf01=ima01 AND tlf10<>0
AND tlf13 MATCHES ‘asfi5*’ #工单发退料
AND tlf907 != 0
GROUP BY 1,2,3,4,5,6

主件料号=元件料号   表示重工
成本阶相等ima57 =ima57_t表示重工
成本阶较小ima57<ima57_t 表示重工
取发料单价
本阶重工者取重工前库存月平均 (本月ccc12+ccc22)
上阶重工者取上月库存月平均
无单价取上月库存月平均    (上月ccc23)
仍无单价取上期库存开帐单价(上月cca23)
非重工则取本月库存月平均 (当月ccc23)




wip_2_22()
WIP元件 本期投入人工制费
由cck每月人工/制费/工时档抓取
委外加工成本=委外入库(apb101)-委外退库(apb101)


wip_2_23()
WIP元件 本期投入调整成本
由ccl 在制调整成本档抓取

wip_32()
WIP元件 本期转出成本(实际成本)

先判断本期转出元件数量(依标准QPA计算)
按工时分配人工制费
若本期仅发生加工费且已完工入库,则全数转出
若当期未转出即结案,则归入差异成本
计算本期结存成本


p500_sub()
替代件转出


wip_4()
计算每张工单WIP主件成本ccg
取cch-àccg  ,取半成品cch-à ccg ,  所有cch-半成品cch(元件转出成本) = 本阶主件投入成本



p500_wipx()    拆件式工单投入及拆件转出
处理WIP在制成本
wipx_1 计算每张工单的WIP 主件部分成本(cct)
wipx_2 计算每张工单的WIP 元件投入成本(ccu)
wipx_3计算每张工单的WIP 元件转出成本(ccu)
wipx_4 计算每张工单的WIP 主件SUM成本(cct)
p500_ccc_tot(2) 计算所有出库成本及结存
p500_ccc_upd   update ccc_file

wipx_1()
计算每张拆件式工单的WIP主件部分成本
将mcct清零
wipx_cct20 统计工时


wipx_2()
计算每张拆件式工单的WIP元件‘期初/本期投入’成本(ccu)
wipx2_1   WIP元件 上期期末转本期期初
wipx2_21   WIP元件 本期投入材料(依拆件式工单发/退料单)
wipx2_22  WIP元件 本期投入人工制费
wipx2_23  WIP元件 本期投入调整成本


wipx_3()
WIP元件 本期转出成本
取当月库存月平均档,拆出元件取本月算出加权平均单价
wipx_2_24() 计算期末(工单未结案)或差异(工单已结案)


wipx_4()
计算每张拆件式工单WIP主件成本(cct)

Tiptop成本计算函数結構表and计算步驟

[转]Tiptop成本计算函数结构表


一   p500_ask() –询问画面
二   p500_del()—删除成本相关资料cch_file,ccg_file,,ccu_file, cct_file,ccc_file,cce_file
三   p500()----成本计算主函数
 3.1.  p500_get_date()---获取成本计算日期
 3.2.  p500_last0()---取上期结存转本月期初
  3.2.1  p500_ckp_ccc()---若ccc为空,则指定其为0
 3.3.  p500_ccc_0()---清空ccc_file,给一个零
 3.4.  p500_last()---取上期结存转本月期初
 3.5.  p500_wip()---处理 WIP 在制成
  3.5.1 wip_del()---delete ccg_file, cch_file,cce_file 该主件相关资料
  3.5.2 wip_1()---计算每张工单的 WIP-主件 部份 成本
  3.5.3 wip_2()---计算每张工单的 WIP-元件 投入 成本 (cch)
3.5.3.1 wip_2_1() --WIP-元件 上期期末转本期期初
3.5.3.2 wip_2_21()--WIP-元件 本期投入材料 (依工单发料/退料档)
  3.5.3.2.1 p500_cch_01() ---# 将 cch 归 0
3.5.3.3 wip_ccg21()--计算每张工单的 WIP-主件 投入数量 -> 有争议
3.5.3.4 wip_2_22() ---  WIP-元件 本期投入人工制费
3.5.3.5 wip_2_23()--- WIP-元件 本期投入调整成本
  3.5.4 wip_3()---计算每张工单的 WIP-元件 转出 成本 (cch)
3.5.4.1 -- wip_32()---WIP-元件 本期转出成本 (实际成本制)
  3.5.4.1.1 p500_sub(l_sfa.sfa01,l_sfa.sfa03,l_sub_qty)
  3.5.4.1.2 p500_sub(l_cch.cch01,l_cch.cch04,l_sub_qty)
  3.5.5 wip_4()---计算每张工单的 WIP-主件 SUM  成本
 3.6.  p500_wip2()----处理重复性生产WIP(计算产品在制成本(料,工,费)投入,)
  3.6.1 wip2_1()--计算产品WIP主件  ccg
  3.6.2 wip2_2()--计算每张工单的 WIP-元件 投入 成本 (cch)
    3.6.2.1 wip2_2_1()    # step 1. WIP元件 期初
    3.6.2.2 wip2_2_21()   # step 2-1. WIP元件 本期投入材料 (依发料/退料档)
    3.6.2.3 wip2_2_22()   # step 2-2. WIP元件 本期投入人工制费
    3.6.2.4 wip2_2_23()   # step 2-3. WIP元件 本期投入调整成本
  3.6.3 wip2_3()--计算每张工单的 WIP-元件 转出 成本 (cch)
  3.6.4 wip2_4()--计算产品WIP主件 SUM cch  (ccg)
 3.7.  p500_tlf()---由 tlf_file 计算各类入出库数量, 采购成本
        p500_upd_cxa09(l_apb12,l_apb09,1)
        p500_ccc22_cost()
         p500_ccc44_cost()
 3.8.  p500_ccb_cost()---计算入库调整金额
 3.9.  p500_ccg_cost()---计算wip入库调整金额
 3.a.  p500_ccg3_cost()---计算wip入库调整金额(重复性生产)
 3.b.  p500_ccc_tot(p_sw)--- 计算所有出库成本及结存
        p500_ccc_ccc26()
        p500_ccc_ccc23()
  3.b.1 p500_tlf21_upd()----回写tlf21的成本--update 
        p500_get_tlf21(p_tlf01,p_tlf10,p_chr,p_flag)
 3.c.  p500_ccc_ins()----insert ccc档
 3.d.  p500_can_upd()---加上销货收入调整金额
 3.e.  p500_rework()----计算重工工单
  3.e.1 p500_rework1()  ---先算 WIP 及 完成品入库
3.e.1.1 p500_wip_rework()  --处理 WIP 重工成本 (重工sfb99='Y')
   wip_1()       # 计算每张工单的 WIP-主件 部份 成本 (ccg)
   wip_2()       # 计算每张工单的 WIP-元件 投入 成本 (cch)
   wip_3()       # 计算每张工单的 WIP-元件 转出 成本 (cch)
   wip_4()       # 计算每张工单的 WIP-主件 SUM  成本 (ccg)
  3.e.2  p500_rework2()  ---再算所有出库成本及结存
    3.e.2.1 p500_ccg2_cost()    --加上WIP重工入库金额
    3.e.2.2 p500_ccc_tot('2')    --计算所有出库成本及结存
    3.e.2.3 p500_ccc_upd()       --Update ccc_file
  3.e.3  p500_wipx0()    ---记录WIP-拆件式工单 在制成本 (工单性质=11) --因为要取重工后单价
    3.e.3.1 p500_wipx()---处理 WIP 在制成本 (工单性质=11拆件工单)                  
 3.f .  p500_reshare()--对于 联产品入库分摊 部份, 进行第二次处理
3.f.1  p500_ccg4_cost()    -- 计算联产品入库分摊
  3.f.2  p500_ccc_tot('3')    --计算所有出库成本及结存
  3.f.3  p500_ccc_upd()      -- Update ccc_file
 3.g .  p500_reshare2()---对于 拆件式入库分摊 部份, 进行处理
3.g.1  p500_ccg5_cost()   --计算拆件式入库分摊
  3.g.2  p500_ccc_tot('3')  -- 计算所有出库成本及结存
  3.g.3  p500_ckp_ccc()   --CHECK ccc_file做NOT NULL栏位的判断
  3.g.4  p500_ccc_upd()     -- Update ccc_file
 3.h .  p500_cct2ccg()--将cct_file,ccu_file写入ccg_file,cch_file
四   p500_out()----显示成本计算错误讯息(ccy_file)
 4.1   p500_rep()---显示成本计算错误讯息(ccy_file)

2017年1月25日 星期三

tiptop 字串 split 成array作法









https://tzunghua.blogspot.tw/2012/02/4gl-split.html


##################################################################################################
# 字串切割成Array
# @author  : JeffreyWu 
# @date    : 2012-02-10
# @param  : p_str   [STRING] 來源字串 Ex:/u1/out/1234.txt
# @param  : p_delimiter  [STRING] 分裂字符 Ex:","
# @param  : p_RemoveEmpty [BOOLEAN] 是否移除空白Array Ex:TRUE Or FALSE
# @return       : p_arr   [DYNAMIC ARRAY OF STRING]
# @description : 字串切割成Array
##################################################################################################
FUNCTION sl_Split(p_str,p_delimiter,p_RemoveEmpty)
 DEFINE p_str         STRING
 DEFINE p_delimiter   STRING
 DEFINE p_tok         base.StringTokenizer
 DEFINE p_arr         DYNAMIC ARRAY OF STRING
 DEFINE p_RemoveEmpty  BOOLEAN
 DEFINE p_tokStr   STRING
 
 LET p_tok = base.StringTokenizer.createExt(p_str,p_delimiter,"",TRUE)
 
 CALL p_arr.clear()
 
 WHILE p_tok.hasMoreTokens()
  LET p_tokStr = NULL
  LET p_tokStr = p_tok.nextToken()
  
  IF p_RemoveEmpty THEN
   IF p_tokStr.getLength() > 0  THEN
    CALL p_arr.appendElement()
    LET p_arr[p_arr.getLength()] = p_tokStr
   END IF
  ELSE
   CALL p_arr.appendElement()
   LET p_arr[p_arr.getLength()] = p_tokStr
  END IF

 END WHILE
 
 RETURN p_arr
END FUNCTION

2016年1月31日 星期日

FourJS : 最簡單的 SQL + FOREACH 範例,還有呼叫PL/SQL方式

CASE 1
DECLARE cur64 CURSOR FOR
 SELECT ogb14
   FROM ogb_file, ima_file
  WHERE ogb01=g_oga.oga01
    AND ogb04 = ima01
    AND ta_ima001 = '64-17-5' #==酒精

 FOREACH cur64 INTO l_ogb14   #==酒精類產品不可用於本作業!!
    CALL cl_err('','PL0017',1)
    LET g_success = 'N'   #FUN-580155
    RETURN
 END FOREACH

CASE 2 (PL/SQL)
FUNCTION t400_chk_oeb904_2()
   DEFINE l_sql STRING
   DEFINE l_ret SMALLINT

    LET l_ret = 0
    LET l_sql = "SELECT axm_pkg_oeb904.axm_func_true_false(?) FROM DUAL"
    PREPARE p1 FROM l_sql
    EXECUTE p1 USING g_oea.oea01 INTO l_ret

    IF l_ret = 0 THEN
       RETURN FALSE
    ELSE
       RETURN TRUE
    END IF
 END FUNCTION

CASE 3 (PL/SQL)
    LET l_ret2 = "0"
    LET l_sql = "BEGIN echo01.axm_pkg_t410.axm_proc_yn_cs_dist(?,?,?); END;"
    PREPARE p4 FROM l_sql
    EXECUTE p4 USING g_oea.oea01 IN, g_user IN, l_ret2 OUT

2016年1月27日 星期三

Tiptop 安装说明书

http://blog.csdn.net/Gandalfwen/article/details/25279409

        目          录
   1.linux的安裝……………………………............………………….1
   1.1    硬體配置………………………………………………………3
   1.2    軟體程序清單…………………………………………………3
   1.3    安裝linux操作系統……………………..……………………..3
   1.3.1  啟動電腦………………………………..…………….………3
   1.3.2  檢查CD磁碟是否損壞…………………...…………………..4
   1.3.3  進入操作系統安裝向導畫面……………………….……….4
   1.3.4  選擇繁體安裝響導……………………………………...…..5
   1.3.5  鍵盤設定選擇…………………………………………….…..5
   1.3.6  選擇鼠標設定………………………………………………..6
   1.3.7  選擇使用“使用Disk Druid分割磁盤” ………………..…..6
   1.3.8  使用Disk Druid分割磁盤工具。……………………….……7
   1.3.9  開機管理程序設定……………………….…………………8
   1.3.10 網絡設定……………………….……………………………8
   1.3.11 防火牆設定…………………….……………………………9
   1.3.12 勾選系統支持的語系………….……………………………9
   1.3.13 選擇時區………….………………………………………..10
   1.3.14 設置root帳號密碼………………………………………….10
   1.3.15 設置安裝的套件…………………………………………...11
   1.3.16 可對安裝組件進行選擇…………………………………...11
   1.3.17 開始安裝系統……………………………………….……...12
1.3.18 安裝操作系統的套件……………………………….………...12
2.1配置linux操作系統…………………………………….13
   2.1.1 起用服務設置………………………………………………..13
2.1.2 開啟系統的telnet、tftp、vsftp服務…………………………..13
2.1.3 允許遠程登入的用戶使用root帳號…………………………..14
2.1.4 允許root帳號可遠程telnet登入系統………………………...15
3.安裝informix數據庫……………………………………...............15
3.1  建立informix群組及帳號……………………….……………15
3.2  修改informix用戶的環境變量………………………………15
3.3  copy安裝文件至INFORMIXDIR目錄………………………16
3.4  安裝sql…………………………………………………….…16
3.5  安裝4gl……………………………………………………….16
3.6.1 安裝informix9.4 (IDS2000.cpi) …………………………….17
3.6.2 配置數據庫初始化文件…………………………….…….17
3.7  oninit –iv初始化啟動informix數據庫…………….……….18
3.8  安裝informix-sdk2.8 (csdk.cpi) …………….…………….19
3.9  安裝chinese-zhtw…………….………………………….19
4.安裝BDL工具………………………………………..20
4.1  安裝development environment…………………………..20
4.2  安裝runtime environment………………………………..25
5. 安裝tiptop……………………………………………26
5.1  建立tiptop組和用戶…………………………………….26
5.2  運行4gl程序…………………………………………….27

 6.tiptop程序不同系統復制解決方案………………29
   6.1  linux系統shell解決方法……………………………….29
   6.2  keychk如何破解tiptop程序使用的限制
   6.3  tiptop bin工具的重新編譯
   6.4  Four J's Windows Front End 3.54.2d安裝方法
   6.5  connct fgl工具時的報錯解決
   6.6  如何使用”@”鏈接AP-server和DB-server

 1. linux的安裝
    1.1硬體配置
    HP DL 380
    CPU   :  P4 2.8G * 2
    內存   :  4G
    硬盤   :  136G * 2、
    RAID卡:  HP smart array 6400 controller

1.2軟體程序清單
    OS   :    RED HAT 8.0 光盤
   SDK  :    CLISDK2.8 包
   BDL  :   BDL2.8包
   SQL   :    sql7.3包
   4GL   :    4gl7.3包
   TIPTOP :   TIPTOP 6.0

 1.3安裝linux操作系統
 1.3.1啟動電腦,插入redhat8.0第一張磁盤。出現安裝畫面,直接敲回車。


1.3.2 檢查CD磁碟是否損壞,選這”Skip”跳過檢查。





1.3.3進入操作系統安裝向導畫面,選擇NEXT。
\
1.3.4選擇繁體安裝響導,NEXT。

1.3.5鍵盤設定選擇“U.S.English” ,NEXT。

1.3.6選擇鼠標設定“滾輪鼠標(PS/2)”, NEXT。
\
1.3.7選擇使用“使用Disk Druid分割磁盤”,NEXT。

1.3.8使用Disk Druid分割磁盤工具。

磁盤詳細分區如下:
   /       15000M(安裝操作系統)
/boot    100 M
   Sawp   1000M(虛擬內存,一般為物理內存的兩倍)
   /u1     30000M
   /u2     30000M
   /u3     30000M
   /u4     30000M


1.3.9開機管理程序設定,選擇默認,NEXT。

1.3.10網絡設定,選擇默認,NEXT。


1.3.11防火牆設定,選擇“無防火牆”,NEXT。



1.3.12勾選系統支持的語系,簡體、繁體、英文,NEXT。
1.3.13選擇時區,“亞洲/台北”,NEXT。

1.3.14設置root帳號密碼,NEXT。

1.3.15設置安裝的套件,“自訂安裝”,NEXT。


1.3.16可對安裝組件進行選擇,NEXT。

1.3.17開始安裝系統。


1.3.18安裝操作系統的套件,系統會自動提示更換安裝光碟,直致所有安裝完成。



2.1配置linux操作系統
2.1.1起用服務設置,在指令模式下使用setup工具開啟設置工具。



2.1.2開啟系統的telnet、tftp、vsftp服務,退出候重啟電腦。


2.1.3允許遠程登入的用戶使用root帳號,在/etc目錄下查找到vsftd.ftpusers、vsftpd.user_list這兩個文件

修改文件內設置,在root帳號前加#進行注釋。



2.1.4允許root帳號可遠程telnet登入系統,移除/etc目錄下的sercutty文件。




3.安裝informix數據庫
3.1建立informix群組及帳號
使用telnet工具登陸linux主機



建立informix組和用戶
    groupadd –g 300 informix      (為informix組分id號為300)
useradd –u 202 –g 300 –d /u/usr/informix

3.2修改informix用戶的環境變量
在informix用戶目錄下新建一個.profile文件,vi加入以下參數:
    “INFORMIXDIR=/u1/Informix;export INFORMIXDIR
  PATH=$INFORMIXDIR/bin;$PATH;export PATH
  INFORMIXSERVER=on_tcp88;export INFORMIXSERVER”
 INFORMIXDIR目錄為informix的安裝目錄,INFORMIXSERVER設置     的是informix數據庫服務器的名稱。”




3.3copy安裝文件至INFORMIXDIR目錄
Copy  sql.tar 、debug.tar.z (4gl) 、redevel.tar.z(4gl) 、informix-sdk2.8 (csdk.cpi) 、informix9.4 (IDS2000.cpi) 、chinese-zhtw (中文語言包)到/u/Informix目錄下.


3.安裝informix數據庫
3.1建立informix群組及帳號
使用telnet工具登陸linux主機


3.4安裝sql
 tar vxf sql.tar
 生成installsql安裝文件
 su root  
sql的安裝必須是使用informix帳號來進行安裝的,但是需要root的權限
 ./installsql安裝


3.5安裝4gl
 tar zxf debug.tar.z、redevel.tar.z
 分別生成install4db,install4gp安裝文件
4ql的安裝必須是使用informix帳號來進行安裝的,但是需要root的權限  
./ install4db
 ./install4gp


3.6.1安裝informix9.4 (IDS2000.cpi)
 cpio –iucvdmB <IDS2000.cpi 解壓csdk.cpi
 生成installserver安裝文件
 installserver需要在informix帳號下進行。
 su informix
 ./ installserver安裝
 此處安裝可不輸入序列號和key
 安裝成功在/u/Informix目錄下生成一個RUN_AS_ROOT.SERVER文件
 ./ RUN_AS_ROOT.SERVER

3.6.2配置數據庫初始化文件
mv sqlhosts.std sqlhosts


vi sqlhosts

mv onconfig.std onconfig.top

vi onconfig.top



修改ROOTPATH參數 /u2/rootdbs
ROOTSIZE  2000000
  設置初始化數據庫空間為/u2/rootdbs,大小為2G.
  在/u2目錄下touch一個熟文件
(即已缓冲的文件),用以存放數據庫初始化空間。
 touch rootdbs
   修改權限
   chmod 666 rootdbs
   chmown informix:Informix rootdbs

3.7oninit –iv初始化啟動informix數據庫
su - informix
oninit –iv 初始化啟動informix數據庫
i 參數須慎用,i將會把數據庫內的資料全部初始化,只適用於第一次啟動數據庫的時候,需要進行初始化。
onstat – 檢查數據庫是否啟動

出現“On-Line”表示數據庫已經啟動。

3.8安裝informix-sdk2.8 (csdk.cpi)
  tar vxf clientsdk.2.81.UC2.LINUX.tar


 cpio –idmv <csdk.cpi 解壓csdk.cpi



installclientsdk的安裝必須是使用informix帳號來進行安裝的,但是需要root的權限。
 生成installclientsdk安裝文件
 ./ installclientsdk安裝


安裝成功
3.9安裝chinese-zhtw
 tar xvf Chinese.tar

 生成installzhtw文件
 ./ installzhtw



選擇6:Version 9.13 (GLS)





選擇1:Version 2.00 (ClientSDK)
 安裝成功

4.安裝BDL工具
4.1安裝development environment
 在u1目錄下建立fgl2c.dev ,fgl2c.run兩個目錄




chmod 777 fgl2c* 改變權限
chown informix:informix fgl2c* 改變擁有者
copy fjs-f4gl-3.53.1a-lnxlc21.sh 到fgl2c.dev ,fgl2c.run兩個目錄下.


su – Informix
vi  .profile  加入以下的參數:
“FGLDIR=/u/fgl2c.dev;export FGLDIR”


cd  /u/fgl2c.dev
/bin/sh  fjs-f4gl-3.53.1a-lnxlc21.sh –i 命令安裝編譯環境



一些安裝說明。




詢問是否同意支付license,Y同意。




詢問是否繼續安裝此產品。Y



系統檢測到FGLDIR的值為/u1/fgl2c.dev,詢問是否默認為這個路徑。Y



系統強烈建議備份fgl2c.dev目錄,因為安裝會覆蓋目錄內的原始文件。因為我們是新建的文件,所以選擇N不需要備份。





選擇需要安裝的產品,1—development environment  2—runtime environment
這裡選擇1安裝編譯環境。



詢問是否安裝Informix Global Language包,Y.



詢問是否創建一個環境參數文件,Y.



是否進行注冊,Y.




此處需要你輸入installation KEY,這組key是需要跟4js賣的,我們是安裝測試的軟件,所以選擇N.





系統顯示”Runtime setup successful.”就表示安裝成功。

4.2 安裝runtime environment
vi  .profile 把“FGLDIR=/u/fgl2c.dev;export FGLDIR”
修改成“FGLDIR=/u/fgl2c.run;export FGLDIR”


cd  /u/fgl2c.run
/bin/sh  fjs-f4gl-3.53.1a-lnxlc21.sh –i 命令安裝運行環境
接下來的安裝和development environment的完全相同。只是在選擇安裝產品時2--runtime environment




fglWrt –a info 可以看到BDL安裝信息




5. 安裝tiptop
5.1建立tiptop組和用戶.


groupadd – 400 tiptop
useradd –u 203 –g 400 –d /u1/usr/tipop toptop

修改tiptop用戶的.profile文件。






把tiptop程序目錄copy到測試機上的/u1/tiptop目錄下

5.2運行4gl程序
   udm2.ibm 運行tiptop程序,打開目錄畫面.報錯:
“Invaild installation key. Please contact your provider”
   報錯原因為/u1/tiptop/bin下面有一個keychk的C語言可執行碼,是鼎新用來計算license的,執行這段代碼返回給cl_user這個公用函數一個值,如果這個值為0就繼續執行程序,如果這個值不為0就報錯推出程序.如果我們直接把tiptop程序從一台機器copy到臨一台機器,keychk返回的值就成為256,就產生了報錯.所以需要重寫這段C代碼:



keychk.cpp:
#include <iostream.h>
Int code1();
Main () {
Int b;
B=code1();
Std::cout<<b<<std::endl;
}
Int code1() {
Int a=0;
Return a;
}
這段c代碼讓tiptop程序不需要檢查tiptop的license而自動返回給cl_user函數一個0值.
g++ -o keychk keychk.cpp
編譯生成keychk可執行碼.再運行udm2進入menu目錄,無報錯信息.

Udm2.ibm 運行gui畫面,OK!
  Tiptop 測試系統安裝完成.






TIPTOP安裝完成。

6.tiptop程序不同系統復制解決方案
6.1 linux系統shell解決方法
  由於AIX系統使用的主shell為ksh,而RedHat Linux系統使用的主shell為bash。特別是在udm2.ibm指令程序時:
echo "\033&[!SESSIONNAME^M"(注意 ^M 為 [Ctrl]+M 非 ^+M),此命令的作用為取得系統打開的段口號。如果為bash的話此指令是不可執行的,所以指令只可執行在ksh下。




如何解決RedHat Linux系統使用的主shell為bash的方法:
打開/etc/profile主環境變量:
#vi profile
unset pathmunge

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"

HOSTNAME=`/bin/hostname`
HISTSIZE=1000

if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
   INPUTRC=/etc/inputrc
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

for i in /etc/profile.d/*.sh ; do
   if [ -r "$i" ]; then
       . $i
   fi
done

unset i
if [ $SHELL = '/bin/ksh' ] ; then
  . /etc/env.top
Fi
在profile環境變量最後加入:
unset i
if [ $SHELL = '/bin/ksh' ] ; then
  . /etc/env.top
Fi

打開env.top文件:
[root@szerp02 etc]# vi /etc/env.top

ENV='/etc/env.top';export ENV
EXECSHELL='/bin/ksh';export EXECSHELL
alias ed='/usr/bin/ed.top'
alias sh='/bin/ksh'
alias pg='more'
alias sz='/usr/bin/sz'
alias rz='/usr/bin/rz'

打開ed.top文件:
vi /usr/bin/ed.top
#!/bin/ksh
if [ $1 == '-' ] ; then
  shift
fi
ex $1

通過EXECSHELL='/bin/ksh';export EXECSHELL把ksh賦值給EXECSHELL。

6.2 keychk如何破解tiptop程序使用的限制
    keychk工具位於/u1/tiptop/bin目錄下。應該是一個c或c++編寫的可執行程序。此程序真正的作用應為看不到keychk.c的源代碼,所以也不知道鼎新是使用這個工具派什麼作用的。我的認為是鼎新想在代碼上做人數的限制(呵呵~~不知道這種想法鼎新的工程師是否認可)。
   在入口程序中有一段代碼,要求執行keychk,然後返回一個值。如果這個值等於0的話就允許繼續執行程序,如果這個值不等於0的話,那麼就會error!
    Tiptop程序在copy以後keychk就不可用了。此處提出解決方法:
需要重寫這段C代碼:




keychk.cpp:
#include <iostream.h>
Int code1();
Main () {
Int b;
B=code1();
Std::cout<<b<<std::endl;
}
Int code1() {
Int a=0;
Return a;
}
這段c代碼讓tiptop程序不需要檢查tiptop的license而自動返回給cl_user函數一個0值.
g++ -o keychk keychk.cpp
編譯生成keychk可執行碼,執行keychk可得到一個0值。

cl_user.4gl程序檢測:



fgl_getenv 4GL內置函數。

6.3  tiptop bin工具的重新編譯
  在tiptop程序重新拷貝之後/u1/tiptop/bin目錄下的有一些工具是需要重新編譯的。
  6.3.1 readstr工具需要重新編譯。readstr工具的作用為取得echo "\033&[!SESSIONNAME^M"產生在屏幕上的段口資料。
  readstr.c源碼
/*
    * File       :  readstr.c
    * Copyright  :  Diginfo Technology Co.
    * Date       :  2000-7-3
    */
    #include <string.h>
    #include <signal.h>
    void timecatcher(int num)
   {
       exit(0);
   }
   main()
  {
     int i;
     char ch, buf[128];
     buf[0] = 0;
     signal(SIGALRM, timecatcher);
     alarm(3);
     for(i = 0;i < sizeof(buf);i++) {
        read(0, &ch, 1);
        if(ch == 0xd || ch == 0xa)
           break;
        buf[i] = ch;
     }
     write(1, buf, strlen(buf));
}

請將此 readstr.c 透過 cc compiler,並將執行檔命名為 readstr   
   A. cc -o readstr readstr.c
   B. chmod a+x readstr
   C. mv readstr $TOP/bin
[限制]
   Wtk Server 的Port Number’ offset 可以從 1 ~ 59000

6.3.1 dtcget、dtcput工具
dtcgett、dtcput工具的作用為在產生報表資料後從主機/report目錄把文件拷貝到本地的TIPTOP目錄。在copy到不同的系統之後也需要重新編譯這些程序。但可惜的是鼎新並沒有提供dtcgett、dtcput工具的源碼。不過在/u1/tiptop/bin目錄下有正對各個系統提供的可執行文件,我們只需改一下名字就可以了。



mv dtcget.lux dtcget
mv dtcput.lux dtcput

    1. Four J's Windows Front End 3.54.2d安裝方法
6.4.1在普通主機上安裝TIPTOP ERP程式的方法
1-1 取得TIPTOP安裝文件包 big5 , wtk2.01
1-2 先安裝BIG5 字體程式,選擇默認安裝目錄(建議使用)
   1-2-1 在安裝步驟中須輸入用戶名稱: 默認為 yahsin
   1-2-2 提示輸入序列號與密碼,將big5目錄下的sn.txt中的序列號與密碼輸入(yahsincl 7b4a98c85959)
   1-2-3 安裝完畢設置操作系統類型與使用文字類別(依當前操作系統與語系定)
1-3 安裝 wtk2.0.1客戶端程式, 選擇默認安裝目錄(建議使用)
1-4 將wtk2.01客戶端安裝程式包中的locals.tcl字體文件 copy 到windows(winows98系統) 或winnt(windows2000系統) 目錄下
1-5 如不是ERP管理人員,須將桌面上的快捷方式除 TOP-GUI以外的與TIPTOP安裝有關的相關快捷方式刪除
1-5 安裝完畢,測試連通狀況

6.4.2在終端機伺服器上安裝TIPTOP ERP程式的方法
2-1 取得TIPTOP安裝文件與TIPTOP終端伺服器程式包W2k termail server
2-2 先安裝BIG5 字體程式,並將安裝目錄改為C:\I4GLSRV
   2-2-1 在安裝步驟中須輸入用戶名稱(默認輸入 yahsin)
   2-2-2 提示輸入序列號與密碼,將big5目錄下的sn.txt中的序列號與密碼輸入(yahsincl 7b4a98c85959)
   2-2-3 安裝完畢設置操作系統類型與使用文字類別(依伺服器操作系統與語系定)
2-3 安裝 wtk2.0.1客戶端程式, 並將安裝目錄改為C:\I4GLSRV
2-4 將TIPTOP終端伺服器程式包W2k termail server中的 AUTO.CMD程式COPY 到C:\I4GLSRV目錄下並覆蓋. (如果伺服器是windows2003則要將路徑C:\winnt\system32\runwtk.bat改為C:\windows\system32\runwtk.bat),前者適用于windows 2000 server 後者適用于 windows 2003 server
2-5 將TIPTOP終端伺服器程式W2k termail server中的gawk.exe,wtk.bat,runwtk.bat,getport.bat 四個文件 copy 到 終端伺服器中的系統目錄 system32 下
2-6將wtk2.01客戶端安裝程式包中的locals.tcl字體文件 copy 到伺服器終端用戶目錄下的windows目錄下
2-7 將TOP-GUI快捷方式copy 到伺服器終端用戶目錄下的桌面目錄下
2-8 安裝完畢,測試連通狀況
6.5  connct fgl工具時的報錯解決


 當你看到這個錯誤時,大難臨頭了,至少是我當時看到這個錯誤時的感覺。因為一堆的亂碼,似在說是不可以獲得主機名。(可能與/u1/tiptop/ds4gl/bin目錄中的文件有關系。)
  解決方法:
根據:
UNIX DBL環境參數說明
======================================================
內容:
1. BDL profile 設定
-----------------------------------------------------------------------------
  請選這適合下列組合的設定檔案。

  CASE 1 : Informix DB + BDL 3.50.1a + WTK 2.01 or WTK 3.2x
   請使用:$DS4GL/BDL/fglprofile/ifx 中的
           fglprofile
           fglprofile.6
           fglprofile.7924

  CASE 2 : Oracle DB + BDL 3.50.1a + WTK 2.01 or WTK 3.2x
   請使用:$DS4GL/BDL/fglprofile/ora 中的
           fglprofile
           fglprofile.6
           fglprofile.7924

  請將下列設定檔放入 $FGLDIR/etc ?目錄中。

==============================================
2. BDL Window Front End 設定
-----------------------------------------------------------------------------

         提供幾種不同TIPTOP前端配色檔

         綠色系: locals.green.tcl
         藍色系t: locals.blue.tcl
         灰色系: locals.gray.tcl
         黃色系: locals.yellow.tcl

更新步驟:
1.
(1) WTK 1.x:
   copy locals.xxx.tcl 至c:\windows (for win95/win98)
   如果OS 為 win NT/win 2000/win XP 請 copy 至 c:\winnt
(2) WTK 2.x or 3.x:
   copy locals.xxx.tcl 至 C:\Program Files\FourJs\cliwtk
                   
2. rename locals.xxx.tcl 改為 locals.tcl
3. 重新執行 Windows Front End Server
4. ok

  1. 如何使用”@”鏈接AP-server和DB-server
    1. aoos901.4gl程序修改部分

zx08,g_user,g_tty,g_plant資料的更新需要在ds_init@on_tcp88資料庫中進行。

      1. cl_user.4gl程序修改部分

檢測資料庫時,也需要在ds_init@on_tcp88資料庫中進行.