This man is too old to remember everything in his brain. Right now, he needs a place to write down what he has studied.
2015年6月29日 星期一
javascript 如何 新增/刪除 html select oprions
function cat02_func(o1) {
var o2 = document.getElementById("中分類");
for (i=o2.options.length-1;i>=0;i--) {
o2.remove(i); //要把每一個option刪除
}
var new_option = new Option("",""); //先加空值
o2.options.add(new_option);
for (i = 0; i < cat02_ary.length; i++) {
if (cat02_ary[i].indexOf(o1.value) >= 0) {
var idx = cat02_ary[i].indexOf(",");
var str = cat02_ary[i].slice(idx+1);
var new_option = new Option(str,str);
o2.options.add(new_option); //用這兩行增加option
}
}
}
2015年6月17日 星期三
TNS-12555: TNS:permission denied
System parameter file is /u2/oracle/10g/network/admin/listener.ora
Log messages written to /u2/oracle/10g/network/log/listener.log
Trace information written to /u2/oracle/10g/network/trace/listener.trc
Trace level is currently 0
Started with pid=23250
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=tiptop)(PORT=1521)))
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
TNS-12555: TNS:permission denied
TNS-12560: TNS:protocol adapter error
TNS-00525: Insufficient privilege for operation
Linux Error: 1: Operation not permitted
No longer listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=tiptop)(PORT=1521)))
通过日志错误信息可知,应该跟权限有关,最后发现了一个隐藏的信息,
/var/tmp/.oracle这个目录比较特殊,如果oracle没有对此目录的操作权限的话,oracle用户就无法进入/var/tmp/.oracle文件夹.
方法很简单,以下兩者皆可(建議2)
1.chmod 777 /var/tmp/.oracle 之后就ok了.
2.su 成 root,(或sudo) ,然後 chown -R oracle:oinstall /var/tmp.oracle
Log messages written to /u2/oracle/10g/network/log/listener.log
Trace information written to /u2/oracle/10g/network/trace/listener.trc
Trace level is currently 0
Started with pid=23250
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=tiptop)(PORT=1521)))
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
TNS-12555: TNS:permission denied
TNS-12560: TNS:protocol adapter error
TNS-00525: Insufficient privilege for operation
Linux Error: 1: Operation not permitted
No longer listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=tiptop)(PORT=1521)))
通过日志错误信息可知,应该跟权限有关,最后发现了一个隐藏的信息,
/var/tmp/.oracle这个目录比较特殊,如果oracle没有对此目录的操作权限的话,oracle用户就无法进入/var/tmp/.oracle文件夹.
方法很简单,以下兩者皆可(建議2)
1.chmod 777 /var/tmp/.oracle 之后就ok了.
2.su 成 root,(或sudo) ,然後 chown -R oracle:oinstall /var/tmp.oracle
2015年6月15日 星期一
TIPTOP ERP 常用业务计算逻辑总结
http://blog.csdn.net/yihuiworld/article/details/44946041
TIPTOP ERP 常用业务计算逻辑总结
一、制造
1、订单未交量:(oeb12-oeb24+oeb25-oeb26)*oeb05_fac
(订单量 - 出货量 +销退量(折让且原订单出货)-被结案数量)* 销售/库存单位换算率
条件:oea00<>'0' AND oeb70 = 'N' AND oeaconf = 'Y'
2、请购未转采购量:(pml20-pml21)*pml09
[原料一般请购] (请购量-累计已转采购量)* 请购单位/库存单位的转换率
条件:pml011 !='SUB' AND pmk18 != 'X' AND ( pml16 <='2' OR pml16='S' OR pml16='R' OR pml16='W')
3、一般采购未交量:(pmn20-pmn50+pmn55+pmn58)*pmn09
[原料一般采购] (采购量-已交量+验退量+仓退[折让且原采购单换货])* 采购单位/料件库存单位的转换率
条件:pmn011 !='SUB' AND pmm18 != 'X' AND ( pmn16 <='2' OR pmn16='S' OR pmn16='R' OR pmn16='W')
4、采购结案时才计算的超/短交交量:pmn57=(pmn50-pmn20-pmn55)*pmn09
[>0则为超交;<0则为短交] (已交量-采购量-验退量)* 采购单位/料件库存单位的转换率
条件:采购单已结案
5、一般工单在制量:(sfb08-sfb09-sfb10-sfb11-sfb12)*ima55_fac
(生产数量-完工数量-再加工数量-FQC在验量-报废数量)* 生产单位/库存单位换算率
条件:sfb04 <'8' AND sfb87!='X' AND ( sfb02 !='7' AND sfb02 !='8' AND sfb02 !='11' AND sfb02 != '15' )
6、委外在制量=委外工单在制量+委外IQC在验量
委外工单在制量:(sfb08-sfb09-sfb10-sfb11-sfb12)*ima55_fac
(生产数量-完工数量-再加工数量-FQC在验量-报废数量)* 生产单位/库存单位换算率
条件:sfb04 <'8' AND sfb87!='X' AND ( sfb02='7' OR sfb02='8')
委外IQC在验量:(rvb07-rvb29-rvb30)*pmn09
(实收数量-验退量-入库量)* 生产单位/库存单位换算率
条件:rvb04 = pmn01 AND rvb03 = pmn02 AND rvaconf='Y' AND rva10 ='SUB' AND pmn43 = 0
7、工单备料欠料量:(sfa05-sfa06-sfa065+sfa063-sfa062)*sfa13
(应发数量-已发数量-委外代买量+下阶报废-超领)* 发料单位/库存单位换算率
条件:sfb04 !='8' AND sfb87!='X' AND sfb02 != '15'
注意:因为GP5.20以上版本欠料时也可以先不补欠料就超领,会造成上述计算式可能为负数
则计算出的备料欠料量应修正为0
8、工单已发欠料量:CALL s_shortqty(p_sfa01,p_sfa03,p_sfa08,p_sfa12,p_sfa27,p_sfa012,p_sfa013)
RETURNING g_short_qty(即返回已发欠料量),再*sfa13
条件:sfb04 !='8' AND sfb87!='X' AND sfb02 != '15'
9、最小发料套数: CALL s_minp(p_wono,p_check,p_percent,p_opseq,p_prcocess,p_sequence)
RETURNING l_stat,l_minp (l_stat结果码:0.OK、1.Fail;l_minp:最小发料套数值)
条件:sfb04 !='8' AND sfb87!='X' AND sfb02 != '15'
说明:FQC量指的是"有FQC单但是该FQC还没有完工入库的量
(即FQC单没有在完工入库单sfv17里面)"
11、IQC在验量=已收货待IQC验+IQC已验待入库/验退
IQC在验量:(rvb07-rvb29-rvb30)*pmn09
(实收数量-验退量-入库量)* 生产单位/库存单位换算率
条件:rvb04 = pmn01 AND rvb03 = pmn02 AND rvaconf='Y' AND rva10 !='SUB'
已收货待IQC验:上述IQC在验量增加条件:
AND (rvb39='Y' AND
(SELECT COUNT(*) FROM qcs_file WHERE qcs01=rvb01 AND qcs02=rvb02 AND qcs14='Y' AND qcs00<'5')=0)
IQC已验待入库/验退:上述IQC在验量增加条件:
AND (rvb39='N' OR
(rvb39='Y' AND (SELECT COUNT(*) FROM qcs_file WHERE qcs01=rvb01 AND qcs02=rvb02 AND qcs14='Y' AND qcs00<'5')>=1)
)
12、FQC在验量:sfb11*ima55_fac
工单FQC量* 生产单位/库存单位换算率
条件:sfb02 <> '7' AND sfb87!='X' AND sfb02 <> '8' AND sfb02 <> '11' AND sfb04 <'7'
13、预计可用量=可用库存量 - 订单受订量 - 工单备料量 + 请购未转采购量 + 采购未交量 + IQC在验量 + 工单在制量 + 委外在制量 +FQC在验量
二、财务
1、应付期末余额(贷方)=历史累计和(贷-借)+本期贷方发生额-本期借方发生额
历史累计和(贷-借):SUM(apm07f-apm06f) WHERE apm04=年 AND apm05<月 GROUP BY 科目,客户...
本期贷方发生额: SUM(apm07f) WHERE apm04=年 AND apm05=月 GROUP BY 科目,客户...
本期借方发生额: SUM(apm06f) WHERE apm04=年 AND apm05=月 GROUP BY 科目,客户...
2、应收期末余额(借方)=历史累计和(借-贷)+本期借方发生额-本期贷方发生额
历史累计和(借-贷):SUM(ooo08d-ooo08c) WHERE ooo06=年 AND ooo07<月 GROUP BY 科目,客户...
本期借方发生额: SUM(ooo08d) WHERE ooo06=年 AND ooo07=月 GROUP BY 科目,客户...
本期贷方发生额: SUM(ooo08c) WHERE ooo06=年 AND ooo07=月 GROUP BY 科目,客户...
3、入库/退货未匹配量=rvv87-rvv23 暂估数量=rvv88
(计价数量-已请款匹配量)
条件:rvv03!='2' AND rvv89!='Y' AND ((B.rvv87 > B.rvv23+B.rvv88) OR (A.rvu00='3' AND B.rvv87=0))
计价数量-已请款匹配量-暂估数量>0 且含 仓退折让(需判断是否有做待抵)
4、原币未付=apc08-apc10-apc14-apc16
(原币合计-原币已付金额-原币直接冲帐金额-原币留置金额)
条件:apa42 = 'N' AND apa34f > (apa35f+apa20)
本币未付=apc09-apc11-apc15-apc16*apa14 (g_apz.apz27 = 'N'时)
(本币合计-本币已付金额-本币直接冲帐金额-原币留置金额*立账汇率)
条件:apa42 = 'N' AND apa34f > (apa35f+apa20)
本币未付=apc13-apc16*apa72 (g_apz.apz27 = 'Y'时)
(本币未冲金额-原币留置金额*重估汇率)
条件:apa42 = 'N' AND apa34f > (apa35f+apa20)
TIPTOP ERP 常用业务计算逻辑总结
一、制造
1、订单未交量:(oeb12-oeb24+oeb25-oeb26)*oeb05_fac
(订单量 - 出货量 +销退量(折让且原订单出货)-被结案数量)* 销售/库存单位换算率
条件:oea00<>'0' AND oeb70 = 'N' AND oeaconf = 'Y'
2、请购未转采购量:(pml20-pml21)*pml09
[原料一般请购] (请购量-累计已转采购量)* 请购单位/库存单位的转换率
条件:pml011 !='SUB' AND pmk18 != 'X' AND ( pml16 <='2' OR pml16='S' OR pml16='R' OR pml16='W')
3、一般采购未交量:(pmn20-pmn50+pmn55+pmn58)*pmn09
[原料一般采购] (采购量-已交量+验退量+仓退[折让且原采购单换货])* 采购单位/料件库存单位的转换率
条件:pmn011 !='SUB' AND pmm18 != 'X' AND ( pmn16 <='2' OR pmn16='S' OR pmn16='R' OR pmn16='W')
4、采购结案时才计算的超/短交交量:pmn57=(pmn50-pmn20-pmn55)*pmn09
[>0则为超交;<0则为短交] (已交量-采购量-验退量)* 采购单位/料件库存单位的转换率
条件:采购单已结案
5、一般工单在制量:(sfb08-sfb09-sfb10-sfb11-sfb12)*ima55_fac
(生产数量-完工数量-再加工数量-FQC在验量-报废数量)* 生产单位/库存单位换算率
条件:sfb04 <'8' AND sfb87!='X' AND ( sfb02 !='7' AND sfb02 !='8' AND sfb02 !='11' AND sfb02 != '15' )
6、委外在制量=委外工单在制量+委外IQC在验量
委外工单在制量:(sfb08-sfb09-sfb10-sfb11-sfb12)*ima55_fac
(生产数量-完工数量-再加工数量-FQC在验量-报废数量)* 生产单位/库存单位换算率
条件:sfb04 <'8' AND sfb87!='X' AND ( sfb02='7' OR sfb02='8')
委外IQC在验量:(rvb07-rvb29-rvb30)*pmn09
(实收数量-验退量-入库量)* 生产单位/库存单位换算率
条件:rvb04 = pmn01 AND rvb03 = pmn02 AND rvaconf='Y' AND rva10 ='SUB' AND pmn43 = 0
7、工单备料欠料量:(sfa05-sfa06-sfa065+sfa063-sfa062)*sfa13
(应发数量-已发数量-委外代买量+下阶报废-超领)* 发料单位/库存单位换算率
条件:sfb04 !='8' AND sfb87!='X' AND sfb02 != '15'
注意:因为GP5.20以上版本欠料时也可以先不补欠料就超领,会造成上述计算式可能为负数
则计算出的备料欠料量应修正为0
8、工单已发欠料量:CALL s_shortqty(p_sfa01,p_sfa03,p_sfa08,p_sfa12,p_sfa27,p_sfa012,p_sfa013)
RETURNING g_short_qty(即返回已发欠料量),再*sfa13
条件:sfb04 !='8' AND sfb87!='X' AND sfb02 != '15'
说明:
p_sfa01:工单号码
p_sfa03:料件编号
p_sfa08:作业编号
p_sfa12:发料单位
p_sfa27:被替代料号
p_sfa012:工艺段号 GP 5.20以下版本不需要
p_sfa013:工艺序 GP 5.20以下版本不需要
大致逻辑:工单已发欠料量=已发套数*实际QPA-已发数量 (其中:实际QPA=应发/生产数量)
RETURNING l_stat,l_minp (l_stat结果码:0.OK、1.Fail;l_minp:最小发料套数值)
条件:sfb04 !='8' AND sfb87!='X' AND sfb02 != '15'
说明:
p_wono:工单号码 sfb01
p_check:是否检查最小套数 sma73
p_percent:检查完工误差率 ima153
(CALL s_get_ima153(sr.sfb05) RETURNING l_ima153)
p_opseq:作业编号 一般传空值'',表示不检查作业编号
p_prcocess:一般传空值''
p_sequence:一般传空值''
大致逻辑:最小发料套数 = ((已发-报废+超领)/应发)*生产数量*(1+完工误差率)(1+发料误差率)
10、一般退料可退量:[不考虑发料误差]:sfa06-((sfb09
+ sfb11)* sfa161)-g_sfs05
[asfi528] 已发-((完工数量+FQC量)*实际QPA)-当前退料单其他项次已退量和说明:FQC量指的是"有FQC单但是该FQC还没有完工入库的量
(即FQC单没有在完工入库单sfv17里面)"
11、IQC在验量=已收货待IQC验+IQC已验待入库/验退
IQC在验量:(rvb07-rvb29-rvb30)*pmn09
(实收数量-验退量-入库量)* 生产单位/库存单位换算率
条件:rvb04 = pmn01 AND rvb03 = pmn02 AND rvaconf='Y' AND rva10 !='SUB'
已收货待IQC验:上述IQC在验量增加条件:
AND (rvb39='Y' AND
(SELECT COUNT(*) FROM qcs_file WHERE qcs01=rvb01 AND qcs02=rvb02 AND qcs14='Y' AND qcs00<'5')=0)
IQC已验待入库/验退:上述IQC在验量增加条件:
AND (rvb39='N' OR
(rvb39='Y' AND (SELECT COUNT(*) FROM qcs_file WHERE qcs01=rvb01 AND qcs02=rvb02 AND qcs14='Y' AND qcs00<'5')>=1)
)
12、FQC在验量:sfb11*ima55_fac
工单FQC量* 生产单位/库存单位换算率
条件:sfb02 <> '7' AND sfb87!='X' AND sfb02 <> '8' AND sfb02 <> '11' AND sfb04 <'7'
13、预计可用量=可用库存量 - 订单受订量 - 工单备料量 + 请购未转采购量 + 采购未交量 + IQC在验量 + 工单在制量 + 委外在制量 +FQC在验量
二、财务
1、应付期末余额(贷方)=历史累计和(贷-借)+本期贷方发生额-本期借方发生额
历史累计和(贷-借):SUM(apm07f-apm06f) WHERE apm04=年 AND apm05<月 GROUP BY 科目,客户...
本期贷方发生额: SUM(apm07f) WHERE apm04=年 AND apm05=月 GROUP BY 科目,客户...
本期借方发生额: SUM(apm06f) WHERE apm04=年 AND apm05=月 GROUP BY 科目,客户...
2、应收期末余额(借方)=历史累计和(借-贷)+本期借方发生额-本期贷方发生额
历史累计和(借-贷):SUM(ooo08d-ooo08c) WHERE ooo06=年 AND ooo07<月 GROUP BY 科目,客户...
本期借方发生额: SUM(ooo08d) WHERE ooo06=年 AND ooo07=月 GROUP BY 科目,客户...
本期贷方发生额: SUM(ooo08c) WHERE ooo06=年 AND ooo07=月 GROUP BY 科目,客户...
3、入库/退货未匹配量=rvv87-rvv23 暂估数量=rvv88
(计价数量-已请款匹配量)
条件:rvv03!='2' AND rvv89!='Y' AND ((B.rvv87 > B.rvv23+B.rvv88) OR (A.rvu00='3' AND B.rvv87=0))
计价数量-已请款匹配量-暂估数量>0 且含 仓退折让(需判断是否有做待抵)
4、原币未付=apc08-apc10-apc14-apc16
(原币合计-原币已付金额-原币直接冲帐金额-原币留置金额)
条件:apa42 = 'N' AND apa34f > (apa35f+apa20)
本币未付=apc09-apc11-apc15-apc16*apa14 (g_apz.apz27 = 'N'时)
(本币合计-本币已付金额-本币直接冲帐金额-原币留置金额*立账汇率)
条件:apa42 = 'N' AND apa34f > (apa35f+apa20)
本币未付=apc13-apc16*apa72 (g_apz.apz27 = 'Y'时)
(本币未冲金额-原币留置金额*重估汇率)
条件:apa42 = 'N' AND apa34f > (apa35f+apa20)
Perl 特殊字元和8進位/16進位表示方法
$x = 0377; # 以「0」開頭是 8 進位表示法,因此 0377 代表十進位的 255
$y = 0xfe; # 以「0x」開頭是 16 進位表示法,因此 0xfe 代表十進位的 254
$x / $y 是數字,但是一旦用以下方式,就成為ASCII/UTF-8 的字串:
$x = chr(0xfe);
$y = "\xfe";
以上等價
$x = chr(0xFEFF);
$y = "\x{FEFF}"; #數字太大,要用{}標示
以上等價
這些字串也可以用 pack("ccc",...),見以下範例:
[root@EIP-API-AP erp]# perl
print "0x64\n";
print "\x64\n";
print chr(0x64)."\n";
print pack("C",0x64)."\n";
__END__
0x64
d
d
d
結論:"\x64" 等價 chr(0x64) 等價 pack("C",0x64) 但 不等價 0x64
$y = 0xfe; # 以「0x」開頭是 16 進位表示法,因此 0xfe 代表十進位的 254
$x / $y 是數字,但是一旦用以下方式,就成為ASCII/UTF-8 的字串:
$x = chr(0xfe);
$y = "\xfe";
以上等價
$x = chr(0xFEFF);
$y = "\x{FEFF}"; #數字太大,要用{}標示
以上等價
這些字串也可以用 pack("ccc",...),見以下範例:
[root@EIP-API-AP erp]# perl
print "0x64\n";
print "\x64\n";
print chr(0x64)."\n";
print pack("C",0x64)."\n";
__END__
0x64
d
d
d
結論:"\x64" 等價 chr(0x64) 等價 pack("C",0x64) 但 不等價 0x64
如何讓excel讀取utf-8 編碼的csv檔案時,不會有亂碼?
其實如果以筆記本或類似UltraEdit打開時,不會是亂碼。
原因是excel 預設打開csv檔案,是用 ANSI編碼打開。
解決方式有二:
1. excel打開,menu->資料->從文字檔->選擇要打開的csv,選擇utf-8編碼開啟
2. 當初寫入csv時,開頭寫入utf-8 BOM(byte order mark)編碼如下(第45列)
1 #!/usr/bin/perl
2
3 require "$ENV{HOME}/perl/setEnv.pl";
4
5 use MIME::QuotedPrint;
6 use MIME::Base64;
7 use Mail::Sendmail 0.75; # doesn't work with v. 0.74!
8 use DBI;
9 use utf8;
10 use Encode;
11
12 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time-86400);
13 $year += 1900;
14 $mon += 1;
15 $mon = sprintf("%02d", $mon);
16
17 %mail = (
18 from => 'mis@echochem.com.tw',
19 #to => 'tracy\@echochem.com.tw',
20 to => "tyruan\@echochem.com.tw",
21 subject => '客戶主檔'."$year/$mon"
22 );
23 $mail{smtp} = 'x.x.x.x'; #要改
24
25 $boundary = "====" . time() . "====";
26 $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\"";
27
28 #$message = encode_qp( "客戶主檔 $year/$mon 資料" );
29 $message = encode_qp( "Customer Master Data $year/$mon " );
30
31 $file = $^X; # This is the perl executable
32
33 my $dbh = DBI->connect( "dbi:Oracle:$yyy", "$zzz", "$www" ) #要改
34 || die( $DBI::errstr . "\n" );
35 $dbh->{AutoCommit} = 0;
36
37 my $sth = $dbh->prepare(qq{
38 select rmnth,occ01,occ02,occ11,occ18,ta_occ09
39 from axm_tbl_occ
40 where rmnth = to_char(trunc(sysdate,'mm')-1,'yyyymm')
41 });
42 $sth->execute();
43 chdir "$ENV{HOME}/perl/erp";
44 open FILE, "> 客戶主檔.csv";
45 print FILE chr(0xFEFF);
#print FILE pack("CCC",0xef,0xbb,0xbf);#也可以,
#print FILE "\x{FEFF}"; #也可以,
見http://stackoverflow.com/questions/7418946/force-utf-8-byte-order-mark-in-perl-file-output
46 print FILE "資料月份,客戶代碼,客戶名稱,統一編號,客戶全名,業務區域\n";
47 while(my @data = $sth->fetchrow_array()) {
48 $data[2] =~ s/,//g;
49 $data[4] =~ s/,//g;
50 print FILE "$data[0],$data[1],$data[2],$data[3],$data[4],$data[5]\n";
51 }
52 close FILE;
53 $sth->finish();
54 $dbh->disconnect();
55
56 open (F, "< 客戶主檔.csv") or die "Cannot read $file: $!";
57 binmode F; undef $/;
58 my $body;
59 while (my $line = <F>) {
60 $body .= $line;
61 }
62 $mail{body} = encode_base64($body);
63 close F;
64 print $mail{body};
65
66 $boundary = '--'.$boundary;
67 $mail{body} = <<END_OF_BODY;
68 $boundary
69 Content-Type: text/plain; charset="utf-8"
70 Content-Transfer-Encoding: quoted-printable
71
72 $message
73 $boundary
74 Content-Type: application/octet-stream; name="客戶主檔.csv"
75 Content-Transfer-Encoding: base64
76 Content-Disposition: attachment; filename="客戶主檔.csv"
77
78 $mail{body}
79 $boundary--
80 END_OF_BODY
81
82 sendmail(%mail) || print "Error: $Mail::Sendmail::error\n";
83
原因是excel 預設打開csv檔案,是用 ANSI編碼打開。
解決方式有二:
1. excel打開,menu->資料->從文字檔->選擇要打開的csv,選擇utf-8編碼開啟
2. 當初寫入csv時,開頭寫入utf-8 BOM(byte order mark)編碼如下(第45列)
1 #!/usr/bin/perl
2
3 require "$ENV{HOME}/perl/setEnv.pl";
4
5 use MIME::QuotedPrint;
6 use MIME::Base64;
7 use Mail::Sendmail 0.75; # doesn't work with v. 0.74!
8 use DBI;
9 use utf8;
10 use Encode;
11
12 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time-86400);
13 $year += 1900;
14 $mon += 1;
15 $mon = sprintf("%02d", $mon);
16
17 %mail = (
18 from => 'mis@echochem.com.tw',
19 #to => 'tracy\@echochem.com.tw',
20 to => "tyruan\@echochem.com.tw",
21 subject => '客戶主檔'."$year/$mon"
22 );
23 $mail{smtp} = 'x.x.x.x'; #要改
24
25 $boundary = "====" . time() . "====";
26 $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\"";
27
28 #$message = encode_qp( "客戶主檔 $year/$mon 資料" );
29 $message = encode_qp( "Customer Master Data $year/$mon " );
30
31 $file = $^X; # This is the perl executable
32
33 my $dbh = DBI->connect( "dbi:Oracle:$yyy", "$zzz", "$www" ) #要改
34 || die( $DBI::errstr . "\n" );
35 $dbh->{AutoCommit} = 0;
36
37 my $sth = $dbh->prepare(qq{
38 select rmnth,occ01,occ02,occ11,occ18,ta_occ09
39 from axm_tbl_occ
40 where rmnth = to_char(trunc(sysdate,'mm')-1,'yyyymm')
41 });
42 $sth->execute();
43 chdir "$ENV{HOME}/perl/erp";
44 open FILE, "> 客戶主檔.csv";
45 print FILE chr(0xFEFF);
#print FILE pack("CCC",0xef,0xbb,0xbf);#也可以,
#print FILE "\x{FEFF}"; #也可以,
見http://stackoverflow.com/questions/7418946/force-utf-8-byte-order-mark-in-perl-file-output
46 print FILE "資料月份,客戶代碼,客戶名稱,統一編號,客戶全名,業務區域\n";
47 while(my @data = $sth->fetchrow_array()) {
48 $data[2] =~ s/,//g;
49 $data[4] =~ s/,//g;
50 print FILE "$data[0],$data[1],$data[2],$data[3],$data[4],$data[5]\n";
51 }
52 close FILE;
53 $sth->finish();
54 $dbh->disconnect();
55
56 open (F, "< 客戶主檔.csv") or die "Cannot read $file: $!";
57 binmode F; undef $/;
58 my $body;
59 while (my $line = <F>) {
60 $body .= $line;
61 }
62 $mail{body} = encode_base64($body);
63 close F;
64 print $mail{body};
65
66 $boundary = '--'.$boundary;
67 $mail{body} = <<END_OF_BODY;
68 $boundary
69 Content-Type: text/plain; charset="utf-8"
70 Content-Transfer-Encoding: quoted-printable
71
72 $message
73 $boundary
74 Content-Type: application/octet-stream; name="客戶主檔.csv"
75 Content-Transfer-Encoding: base64
76 Content-Disposition: attachment; filename="客戶主檔.csv"
77
78 $mail{body}
79 $boundary--
80 END_OF_BODY
81
82 sendmail(%mail) || print "Error: $Mail::Sendmail::error\n";
83
2015年6月11日 星期四
居天下之廣居,立天下之正位,行天下之大道。得志與民由之,不得志獨行其道。
http://www.nani.com.tw/slearn/slchin/chin_c/chin_c_b/chin_c_b6_1.htm
|
||||
景春曰:「公孫衍、張儀,豈不誠大丈夫哉?一怒而諸侯懼,安居而天下熄。」
孟子曰:「是焉得為大丈夫乎!子未學禮乎?丈夫之冠也,父命之;女子之嫁也,母命之,往送之門,戒之曰:『往
之女家,必敬必戒,無違夫子。』以順為正者,妾婦之道也。居天下之廣居,立天下之正位,行天下之大道。得志與民由之,不得志獨行其道。富貴不能淫,貧賤不
能移,威武不能屈。此之謂大丈夫!」
|
||||
![]()
1. 景春:孟子時人,講求縱橫之術。
2. 公孫衍:戰國時縱橫家,魏國人,初仕魏國官員,後任秦相。
3. 張儀:戰國時縱橫家,魏國人,相秦惠王,以連橫策略遊說六國事秦。
4. 一怒而諸侯懼:怒則遊說諸侯,使其互相攻擊,故諸侯畏懼。
5. 安居而天下熄:安居在家,未遊說諸侯、挑撥離間,則天下戰火熄滅。
6. 冠:音ㄍㄨㄢˋ,行冠禮。古時士人年二十行冠禮,始為成人。
7. 命:訓勉、教導。
8. 女家:你的家,指夫家。女,音ㄖㄨˇ,通「汝」。
9. 夫子:此指丈夫。
10. 以順為正:以順從為正道。
11. 居天下之廣居:此指以仁居心,乃天下最寬敞的住宅。
12. 立天下之正位:此指以禮立身,乃天下最中正的位置。
13. 行天下之大道:此指以義行事,乃天下最寬闊的大道。
14. 得志與民由之:得志的時候,和人民一起遵行所得之道。由,遵循。
15. 不得志獨行其道:不得志的時候,自己單獨遵行所得之道。
16. 淫:放逸心志,即蕩亂其心意。
17. 移:改變節操。
18. 屈:挫折志氣。
|
||||
![]()
孟子言:運用縱橫之術,取悅人君,以遂其志,乃是妾婦之道。能居仁、立禮、行義,有獨立人格者,始為大丈夫。
|
||||
![]()
景春說:「公孫衍、張儀,難道不能算是真正的大丈夫嗎?他們一生氣,諸侯便恐懼,深怕他們遊說別的諸侯來攻打;如果在家安居,未遊說諸侯、挑撥離間,天下的戰火便止熄。」
孟子說:「這種人怎能算是大丈夫呢!您沒學過禮嗎?男子成年舉行冠禮時,由父親訓勉他做成人的道理;女子要出
嫁時,由母親告誡她做妻子的道理,臨行母親送到門口,還告誡說:『妳到夫家後,一定要敬重公婆,言行一定要戒慎,不要違逆丈夫的旨意。』可見以順從為正
道,是為人妾婦的道理。真正的大丈夫,以仁居心,住的是天下最寬敞的住宅;以禮立身,站的是天下最中正的位置;以義行事,行的是天下最寬闊的大道。得志的
時候,和人民一起遵行所得的正道;不得志的時候,自己單獨遵行所得的正道。富貴不能擾亂他的心意,貧賤不能改變他的節操,威武不能挫折他的志氣。這才叫做
大丈夫!」
|
||||
![]() |
||||