2011年8月28日 星期日

@CASE 6 < 訂貨單與銷貨單數量統計表 > ver-110829

'可能需要增加 交貨日期 篩選 (預期交貨日期)
 與 銷貨日期 區隔 (實際交貨日期)


'銷貨日期篩選,若不輸入日期將會拉出大範圍資料造成超時


'需要加入訂貨單已結案,未結案條件搜尋

'當選取訂貨單已結案條件時,增加條件
  手動結案是否納入計算
(手動結案,銷貨量不一定等於訂貨單數量)

@目前看起來手動結案部分,
只要狀態處於結案,但是銷貨數量小於訂貨數量,就是手動結案
大於等於的,為系統自動結案



'目前銷貨日期篩選,將會透過銷貨單日期內
應該找出該訂單號,批號,物料號,去核對應該顯示的訂單細項內容

不然會把銷貨單日期範圍之外的資料也納入近來

再來就是處理每次銷貨,其中有包含銷貨單篩選日期之外的銷貨單號
可以選擇要不要顯示

因為設定了格式,如果不印出來,會顯示0,而非空白資料
除非在修格式部分

目前已經排除範圍外資料
使用者需要知道自己所蒐尋的是些什麼條件的資料


==============================================
'跑動畫所按鈕怪怪的
要在側看看
先拿調動畫


'需要寫入銷貨日期篩選

分開兩部分
一個走訂單
一個走銷貨單

應該兩個分開來看
走訂單時候,清空銷貨日期
走銷貨,清空訂單日期


1.有輸入銷貨日期
  才撈蕭貨日期內的訂貨單號
  帶入訂單號篩選

2.沒輸入銷貨日期
   走原本訂單日期
   帶入訂單日期篩選
==================================================
14+1+銷貨

'加入金額小季,數量小記
定貨數量,銷貨單位,計價單位輛,庫存單位

單價*訂貨數*計價單位輛 = 金額小記

帶銷數量

=================================================
可能會需要從兩方面走
如果只有銷貨單方面的篩選條件

還是以訂貨單去走的話
變成所有訂貨單都要跑一次

先拿掉銷貨單部分的條件

'XLS格式
列顏色區分

'發現說
其實可以從table的row ,col去推斷說應該會走到XLS的範圍有多大
====================================================
需要知道說
訂單上面某些產品的銷貨狀況
訂單上每筆產品銷貨時間點可能都不一樣

同訂單上的某樣產品,可能會分好幾批去銷貨(切割數量,分批銷貨)


訂單號,訂單日期,產品號,產品品茗,客戶規格
數量,單位量,單價 -> 計算小記
銷貨日期,銷貨單號,
銷貨數量


銷貨單 tblSale, tblSaleDet


'客戶單號 tblOrder : CustOrderNo, CustOrderNoA
兩個到底要看哪一個

有的兩個都沒
有的兩個都有
有的只有一個


只去看 CustOrderNo ,未來都走 CustOrderNo
===================================================

訂貨單

select a.orderno, a.orderdate, b.partcode, b.custspec, b.Qty, b.batchno, a.Custorderno, a.Custordernoa, max(a.formversion) from tblorder a join tblorderdet b on a.orderno = b.orderno
where a.status = 2 and orderdate > '20110101'
group by a.orderno, a.orderdate, b.partcode, b.custspec, a.Custorderno, a.Custordernoa, b.Qty,  b.batchno


銷貨單
select a.saledate, b.saleQty, b.packQty, b.unitprice from tblsale a join tblsaledet b on a.saleno = b.saleno 
where a.status = 2 


==================================================
條件篩選:
料號,訂單號,客戶單號,客戶規格

日期(訂貨日期,銷貨日期) 範圍篩選
客戶ID  範圍篩選

CheckBox 選擇是否將 待銷數 列入計算
(待銷數->銷貨單尚未確認,所有銷貨單上細項都是待銷數)
0未確認,1送簽中,2以確認,9作廢
(應該要踢掉 9 )

訂單上 與 銷貨單上
細項可能都會有批號

EX:
訂貨單 : A1  500, A2  400
銷貨單 : A1  500, A2  200


需要注意的是
訂貨單上的某產品,可能被切成好幾次銷貨單去銷貨
所以要用動態欄位去 顯示一筆訂單的銷貨日期跟銷貨數

分別在訂單細項,銷貨單細項上
會有BatchNo 去分辨批次
要注意, 銷貨單上的 SaleQty 不一定等於 訂貨單上的 Qty
=====================================================

#VB 2010 進階程式開發及程式碼品質


邊做邊學 Visual Studio 2010 進階程式開發及程式碼品質 (Advanced Development and Code Quality)


#VB TFS 做 SVN 控管



重拾散亂的VSS程式碼版本



'感覺他沒辦法對,Form View去做比對
或是說可以我不知道方法
要在查察看


'沒展開比對版本差異
會沒辦法把內容複製上去....
========================================================

使用 TortoiseSVN 處理版本的分支與合併(一)
碰到說需要透過分支來處理程式版本問題好像要先建一個資料夾然後把資料夾設定分支

但是資料夾裡面的東西可能應該要跟主線的東西要一樣吧

到時候切換主線根支線去做coding的部分

要再摸

===============================

不知道是不是我裝了 SVN 的原因

感覺連 Server端都變得好曼
怪怪的

又感覺不是

========================================

可以了,可以做到在server資料夾建立 SVN Server

然後Client PC在做Code變動的時候,送出(commit)
將會更新server 端資料
並且可以做異動對照
也可以回復之前版本


重點是他會比對各版本間的差異
方便找說你coding改了哪些東西
哪邊還沒改之類的


SVN (Subversion 、TortoiseSVN)設定大全


[程式]版本控制工具TortoiseSVN初體驗


======================================

SVN教學



免架svn server的svn server


用 Subversion 跟 Google Code 作版本控制



gagaghou
gaga

=========================================================

版本控制系統介紹

 

================================================================

不記得昨天寫的程式碼了?? - TFS的程式碼比對

http://www.dotblogs.com.tw/franma/archive/2009/07/13/9400.aspx

=================================================================

TFS 2010安裝筆記

#VB 外掛

VS 2010 妙用景囊
http://www.microsoft.com/taiwan/promo/aspdotnet/


Visual Studio 2010 操作技巧系列:常用功能心得筆記



變數醒目提示

http://www.addictivetips.com/windows-tips/highlight-all-occurrences-of-selected-text-in-visual-studio-2010/

================================================
visual assist x

http://www.zu14.cn/2010/10/15/visual-assist-x-crack-patch/

2011年8月26日 星期五

#VB VB.Net Regex 正則表達式

VB.Net Regex 正則表達式
http://cate-taiwan.blogspot.com/2009/02/vbnet-regex.html

需要一些方便比較字串或是辨識字串的正則運算




[VB.NET]將字串分割,並產生字串陣列

在 String.Split 方法 (Char[], StringSplitOptions) 中,可以透過參數 StringSplitOptions 來對空字串做處理
StringSplitOptions 列舉

#CR 報表 動態籃框大小

需要再處理說
讓兩個文字框不會相互覆蓋的問題

看能不能讓他自動往下移動
之類的


"區段專家"把"首頁"設成"放置在隨後區段"
放置在隨後區段
將會將兩區段的東西做重疊顯示

只要取消放置隨後區段即可

============================================================
因為CR的框限能力很差

找尋說有沒有辦法讓他的格線
可以隨著內容值
動態改變大小


动态(万能)水晶报表:任意表,任意列,动态格线调整



2011年8月24日 星期三

@CASE 1.3 < 訂單原物料需求計算 > ver-110824

'第一次分批轉檔
有機會發生原料撈取交互影響問題

要再觀察


'嘗試將轉檔相關訊息以累加方式處理
透過強制回應Form,去做到說讓使用者可以在該表單動作後
一次處理


可能需要改勾選處理
當勾選的時候就把單號加進來
取消勾選就移除


            '轉檔訊息一次處理
                '========================
                '1.紀錄訂單號
                '2.檢查檔案是否存在
                '3.show出強制回應表單
                '   3.1.改檔名 - 檔名檢查是否已存在,做提示
                '   3.2.確認 - 該筆轉檔後覆蓋
                '   3.3.取消 - 該筆不轉檔
                '4.開始轉檔
                '========================

目前透過 List 去撈訂單號
希望呈現在GridView上面作為DataSource
但是欄位只呈現每個值的長度

DataGridView.DataSource 能否使用具有struct的list呢

應該需要建立一個struct 去設定 value, Name
然後在指定來於資料的時候
看會不會跑出value
要在側側看

struct
完整單號 (不顯示,跑轉檔用)
原始訂單檔名 (不可修改,跑轉檔用)
檔名 (可修改)
路徑 (不可修改)
checkbox (打勾取消)

所以最後轉檔依照gridview上的檔名
依照ordnolist儲存的檔名


@要注意訂貨單號還是要去接
所以可能要改一夏SQLSubmit



@excel改直接顯示
(多筆批次轉會一次開一堆,看要不要限制開的次數,或是在想看看)
如果直接顯示,不存檔,似乎就不用考慮會不會覆蓋檔案的問題

目前作法是
直接開檔案,
讓使用者自行決定要不要存,印

不去考慮覆蓋問題


'全選全不選應該改Radio Button



'或許把異常處理欄位做可以點選開啟方式
在外面做個醒目提示(閃爍之類的)

目前先透過一個panel 希望裡面放一個箭頭圖片
然後可以閃爍

點兩下開啟
點異常資訊標題兩下關閉

要再找看看能不能壓在gridview上
然後類似透明度的方式,可以穿透看到背後的gridview資料

=========================================

'合併轉檔,檔名抓了兩次
不確定物料是不是也重覆計算
要檢查

目前看來是訂單號碼重複
並且沒有照料號做加總


'合併後轉檔,
之後分批轉檔路徑錯誤


'需要將訂單明細 ITEM 以新舊料號顯示


'發現說轉檔,如果有料號條件
勾選的訂單轉檔所有東西都會轉出來


'發現說訂單ITEM篩選有問題,萬用字元無法用
LINQ 再用萬用字元上面有點問題


LINQ to SQL 查詢小技巧



2. Like 通配符(萬用字元% or 單一字元 _ ) 查詢
通常我們查詢like的方式有幾種 “%abc%”、”%abc”、”abc%”、”a%b%c”;在 LINQ
裡面可以利用
Contains(“abc”)   >> “%abc"%”
StartWith(“abc”)  >> “abc%”
EndWith(“abc”)   >> “%abc”



因為%是特殊字元,所以除了Contains本身會加的%以外,其它的會自動設定escape。這時
候我們要利用 SQLMethods.Like (System.Data.Linq.SqlClient)
var list =  db.Members.Where(p=>SqlMethods.Like(p.ChName, "a%b%c"));


目前似乎只支援LINQ 2 SQL 萬用字元

可能要改 table.select

目前不支援 _ ? 萬用搜尋
不支援 a*b 中間萬用字元

除非說透過MS SQL
那就要改

目前改由MS SQL下去篩選
而不透過LinQ



'需要將非核准的訂單也納入計算
讓使用者自己決定
status = 0 or 2


有點問題,似乎有些東西撈不到資料
會造成 tblOrdMRP 去切 distinct 的時候出問題
要再修


'可能需要改移下 doubleClick
讓他不會去抓下面的條件

只有當篩選按鈕的時候才作條件篩選



'微軟的文件就說, 在合併儲存格下, 自動行高是沒作用的.
所以這似乎是 EXCEL 的限制


必須請使用者手動去調整一下行高了

'可能需要注意遺下
多重輸入字串切割
可能會碰到空白字元的問題

'如果勾選到沒有訂單細項,
並且作列印轉檔

忽略

'要檢查一下 XB , BX 那邊 叫用 class 連 SQL 的方式
看能不能都改獨立
==============================================
撈錯了
要撈訂單上面所訂購的產品
不是原物料的篩選

'所以轉檔列印的時候
要去判斷是否有 篩選的 Item 存在

'報表列印那邊
在撈訂單號,產品編號時
如果太多會超過所繪製的格子

要想辦法讓他重複繪製重複繪製好像不能放在頁首
或是說可以設定

要去查遺下
==============================================
'可能會需要再跑BOM的時候
不只要抓住pdtkey, pdtversion, prockey
還要另外抓住 partcode

讓他可以去判斷有沒有出現在 Item 裡面
有的才去撈
沒有就不撈

好像只能在 bompart抓

所以應該是要用過濾的
一樣抓所有物料

但是去踢掉

=================================================
'可能需要記憶 那些料號 被選取過
當切換訂單的時候,將會出現的該料號選取狀態打勾

'目前卡在說
應該怎麼讓gridview 裡面的 checkbox 能夠在即時勾選的時候
就偵測到動作
並且將該列的物料號記錄到 richtextbox裡面

怎麼偵測~


DataGridView.CellValueChanged 事件


通常發生在離開焦點時



DataGridView.CurrentCellDirtyStateChanged 事件


使用在一開始發生改變時 ( 無法持續, 只有在第一次勾選或取消勾選時發生 )




處理 CurrentCellDirtyStateChanged 事件。在此範例中,事件處理常式會呼叫 CommitEdit 方法來引發 CellValueChanged 事件,以判斷目前 DataGridViewCheckBoxCell 的值。


===================================
a. 檢查有無日期
b. 檢查有無訂單號
c. 檢查有無原物料料號
(所以一開始篩選就要把所有都拉出來)

選訂單-->呈現原物料
a. 再次檢查 有無 Item 條件

需要注意
在一個訂單上面點選 Item 原物料加入 條件時
如果跳了另外一個訂單
因為會 再次檢查有無 Item 條件
所以只會呈現 textbox 所有的 Item 而已

看有什麼方法
能夠切換各個訂單,方便加入 Item 條件
最後再重新送出篩選

希望透過一個Panel裡面的RichTestBox
將勾選的材料加入到 RichBox
然後再透過裡面的 Button
確認加入到 textbox

這時候再點選訂單就會篩選材料

'發現說會有一些料號 900開頭的東西
外購品,可能是砥礪也可能是其他東西
因為不會再製程上,所以BOM表找不到材料

會配在選配上
猜測這應該是小於去採購
而不是蔡組長
要在問遺下看需不需要拉進來
===================================
從方案二下手好了
使用者可以一開始手動輸入

或是透過訂單細項勾選加入

需要注意的是
當細項取消勾選
如何找出該 Item 並且從 textbox 只剔除該 Item
=============================================
'大致上會與選配物料介面相當

'需要訂單日期篩選(建檔?出貨?)
需要訂單號篩選
需要 item 篩選

可以串接也可以獨立

'轉檔列印報表格式要再討論

'篩選模式
大致上日期或是訂單號去找出相關訂單

並且呈現某些訂單細項

方案一

(或是勾選,比較快?)
希望做到拖拉訂單細項到 Item 欄位
能夠自動將該 item 的 partcode自動加入篩選條件

也可以一開始就手動輸入 Item 去做篩選

想法是當他勾選細項,就會加入Textbox之中,取消勾選,就剔除


方案二

'想做一個下拉式選單,輸入前面字串
將自動篩選資料庫資料

改變下拉選單內容



C# Winform ComboBox 在输入内容时 会在下拉菜单中显示 根据输入内容查询的结果http://zhidao.baidu.com/question/180144652.html
'但是如果要做到多筆資料篩選,

可能就沒辦法根據內容查詢
或是說要再改寫

透過另外一個control 去蒐集 combobox 每次確認的料號

沒辦法用focus去做
不然每次都會跳到combobox
變成沒辦法移除

2011年8月23日 星期二

@ALL CASE

'目前寫入EXCEL都是一個CELL一個CELL去寫(for 資料量大,會很慢)
找看有沒有方法,透過ODBC的方式直接將不同資料來源的資料
塞入另一個資料來源

然後再開啟建立的XLS寫聚集設格式

或是說可以整筆
多筆之類的一次寫入

或是透過LINQ

要再查看看


如何將dataset資料匯出成為實際excel檔案?




HOW TO:使用 ADO.NET 擷取與修改利用 Visual Basic .NET 之 Excel 活頁簿中的記錄



TIPS-Export GridView To Excelhttp://blog.darkthread.net/blogs/darkthreadtw/archive/2011/02/24/1143.aspx



Table資料過大,要如何做備份的工作呢?

http://webcache.googleusercontent.com/search?q=cache:RWG48U5QN5gJ:www.blueshop.com.tw/board/show.asp%3Fsubcde%3DBRD20070202150346K77%26fumcde%3DFUM20041006152735ZFS+table+%E8%BD%89+excel+%E8%B3%87%E6%96%99%E9%87%8F%E5%A4%A7&cd=12&hl=zh-TW&ct=clnk&gl=tw&lr=lang_zh-CN|lang_zh-TW

通過VS.NET調用 SQL 的DTS
http://kb.cnblogs.com/a/408128/


SSIS功能體驗(一)、匯入EXCEL檔案




'需要將 Paging 做一個類別
用呼叫的




'GridView 因為滑鼠滑過row,顏色變換
造成gridview重繪,畫面閃爍

Control.DoubleBuffered 屬性



鼠标在dataGridView控件上移动时的问题,请教下了!

http://www.aspxbing.com/index/12756.html
==============================================
'發現說 如果一開始進入表單
馬上使用鍵盤ctrl+C 去複製 一開始 focus的 textbox
會出現錯誤

似乎是說,一開始如果剪貼簿完全沒東西
我的程式在執行複製動作的時候
就會出現這個問題
(一開始直接貼上不會有問題,滑鼠右鍵複製貼上也沒問題)

不太清楚哪邊有錯誤

ClipBoard.SetDataObject()
去設定要複製的字串
就完成
但還是不太知道原因一 一

'所有介面要再修一夏

'盡量把鍵盤輸入做好

'竟可能能夠自動Focus到相關步驟之下

'做一些異常資料的panel 可以折疊

'gridview的column如果一開始設定自動大小
就不能再透過使用者設定

或是說有其他方式
要在查遺下

2011年8月21日 星期日

#VB 安裝部署 路徑設置問題

碰到一些網管權限的問題
需要更改安裝部署的路徑

似乎預設都是C:Programe

解決.NET(WebApplication)安裝部署的不能選擇安裝路徑的問題
http://big5.webasp.net/article/10/9077.htm






似乎不是權限的問題


猜測是Office版本問題
User2000


看能不能讓自己的東西在2000上面跑





编码保存Excel2003与Excel 2000 Excel XP的不同

显然:_SaveAs 是兼容以前的版本, SaveAs 是office 2003 的新版本。
当然这点代码修改量是比较小的。而且,代码修改后,你针对office 2003产生的编译文件,office 2000 ,office xp 下仍然可以使用。
office 更低的版本,我手头没有环境,没有测试。
有关操作Excel 的基本知识,请参看我的上一篇blog:
http://blog.joycode.com/ghj/posts/22722.aspx

CReport 格線問題


爬了一下文
似乎沒有格線這個東西

要用一些方法去做
但是會友對其問題


crystal report表格格線 及 浮水印 問題





2011年8月19日 星期五

VB 動態為GridView 加上 CheckBox

'动态添加CheckBox列 Dim cel As New DataColumn("确认", System.Type.GetType("System.Boolean")) dst.Tables(0).Columns.Add(cel) cel.SetOrdinal(1) DataGridView.datasource=dst.Tables(0)

@CASE 1.2 < 選配物料需求計算 > ver-110820


'選配原物料那邊也要做是不是BACKON檢查

會有東西是BackOn產品,
選配料號有 U% ,的非BackOn商標料號

好像不能以U開頭料號來判斷

兩邊比對

看能不能說建立 distinct 選配料號
然後走BOM表的時候查表檢查有無重複 (BackOn商標)
重複則剔除選配上的料號,
計算BOM表的 (BackOn商標)



'訂單status = 2 一定只有一個版本(最新版)
所以不需要找max

反映同訂單相同item
數量只有一份

因為max的時候被 group by
指傳回一筆資料


'需要把單一訂單也改直接列印


'關於日期不輸入,應該提示搜尋範圍(今日~明年今日)





'BackOn 商標撈取發生部分資料沒撈到
也就是走bom表有點問題

之前例外處理是找物料編號部分
需要再查查看,撈到半成品之後,是不是沒辦法繼續往下撈取資料
並且記錄例外資料

丟到一般異常,記錄例外資訊

撈到製程~要往Part撈資料途中
判斷有沒有撈到 "合法製程"

目前是沒發現有
有製程卻撈不到材料的問題


發現說 MRP 直接套 XF去找BOM表
所以應該不會有製程被停用的問題

但是Choice 跟 Order不一樣
按照原本的 HF 或是其他 _F
可能有被停用問題

變成~可以找,看不出問題
不能找,看得出問題  => 優先

目前就先這樣
讓訂單查找部分,不能找,看得出問題
(不走製程,所以應該要看得出問題)
讓MCST查找部分,可以找,看不出問題
(童常有排製程,應該表示BOM表已建立)

要在問問看老大


'需要把期望交期(該訂單的 consDate 直接印出)
所以需要抓住該資訊
=================================================

'需要檢查選配有沒有異常資料

@訂單有客戶規格,選配沒有該規格編號
應該列入 選配一般異常 (沒有建立,建立不完全)

@訂單沒有該客戶規格,選配確有該規格編號
(透過訂單來找選配,所以這部分應該可以先不做)

1.通常是因為改料號,所以需要改包裝
因此改之前的料號會停用,包裝規格也就被刪掉

2.或是說該料號為 '9開頭' 外購品,不須包裝就出貨
(有 comb, 沒有 comdet)



select d.*,a.* from tblcombdet a left join
( select c.custid + '-'+ b.custspec as combcode, b.orderno
 from tblorderdet b join tblorder c on b.orderno =c.orderno ) as d
on a.combcode = d.combcode
where d.combcode is null and a.pdtcode like '90002%'




select d.*,a.* from tblcomb a left join
( select c.custid + '-'+ b.custspec as combcode, b.orderno
 from tblorderdet b join tblorder c on b.orderno =c.orderno ) as d
on a.combcode = d.combcode
where d.combcode is null and a.pdtcode like '90002%'

on a.combcode = d.combcode

select * from tblcomb where combcode like 'ABQ-GR50020'
select * from tblcombdet where combcode like 'ABQ-GR50020'


where c.custid + '-'+ b.custspec like 'AAA-0220-TIG'


 select c.custid + '-'+ b.custspec as combcode, b.*
 from tblorderdet b join tblorder c on b.orderno =c.orderno
where b.partcode like '90002%'
and c.custid + '-'+ b.custspec like 'AAA-MA020'

select * from tblorder where orderno like 'BOA2328101126'

select * from tblorderdet where orderno like 'BOA2328101126'




'EXCEL 資源釋放問題還是沒解決(有時可以,有時卻無法釋放)

'看能不能覆蓋檔案時,讓他去跑安裝路徑
(不用再點選)

'發現說很多地方會需要把目錄路徑鎖定在主程式執行之下的目錄
如果用 Enviroment.CurrentDirectory
存檔自寫的話,會改變 Enviroment.CurrentDirectory 跑到其他地方

透過一開始抓住主程式執行目錄
其他使用時呼叫該變數即可

'目前EXCEL部分如果遇到需要覆蓋檔案
而又點選取消
將會出現錯誤訊息

把他警告訊息關掉
然後自己寫訊息就可以了

'合併訂單部分,
去抓取第一張的訂單號+ "合併檔" 作為轉檔名稱

'將有可能遇到同檔名覆蓋問題
去提示使用者,讓他自由改檔案名稱

'SQL多走了幾次...要再修

'透過ReportViewer
CR好像沒有辦法說
在直接列印的情況下,去跑預設的格式
每次都跳 Letter格式

變成批次選了幾分,就要設定幾次格式

@透過ReportDocument
直接去印
            doc.PrintOptions.PaperSize = 166

設定為A4紙張
就可以跳過直接列印
(但是沒辦法選擇印表機,直接跑預設)
===============================================
'將點選row 走SQL的部分寫在 selectionChange

'分批次列印,目前想法是送出時,再去檢查那些訂單被選取
一個一個走SQL並且列印

'如果合併計算,目前也是一樣一步一步走,
只是會做累計動作,只產出一張表單


=================================================
需要思考一夏怎麼把多筆訂單分批次去走列印或轉檔

還有需要考慮應該怎麼呈現合併計算的資料在Form上面


'做到多筆資料合計

'能夠多筆批次列印
1. 無選取  單筆列印
2. 有選取  預設多筆分批列印 (或是說一定要選取才會印那筆資料)
3. 有合併計算  合併計算列印

'訂單檔,沒清空重設
應該每次查詢訂單檔案都會不一樣

@發現每次篩選後
跑sqlsubmit會跑兩次

跟我的鍵盤選取列有關係
可能變成說不能寫在 gridview_selectionchanged

改寫在GridView 的 KeyDown 去判斷 上, 下, Enter 鍵



# CReport 不显示报表直接打印

不显示报表直接打印

使用Application可以进行打印
在将数据赋给报表模板后,调用PrintOut方法
'赋给报表数据
objCRReport.Database.SetDataSource rst


'此句打印,会出现打印提示框
objCRReport.PrintOut
'不提示,直接打印到默认打印机
Call objCRReport.PrintOut(False)

2011年8月18日 星期四

VB If V.S IIf 效能比較


[Performance][VB.NET]If V.S IIf



主要的差異是If的效率會比IIf好,也就是會比較快。



可以清楚的看出兩者間速度的比約為 1:3,不過這是當使用很多次的情況之下,在使用次數小於100000次的情況下,其間速度的差異幾乎可忽略不計。

2011年8月16日 星期二

#VB 安裝後,一些必要條件重複要求安裝

會有一些必要條件每次安裝都會要求安裝
照理講之前裝過
現在應該不用再裝

還有一個是說
安裝途中重新開機
之後重開機又要求安裝

不斷重複
(這個感覺跟frameWork有關係)
ex.  2.0 沒裝, 有裝2.5
他要求莊2.5重開機以後,
因為2.0一定要先裝才能裝之後的版本


問題似乎出在 framework 4 Client Profile
好像是說他更新 framework 如果PC尚有其他程序會占用 framework
影響到  framework 4 Client Profile 的更新時候
就會要求重開機

但是如果重開機以後
有常駐的程序會占用
一樣會要求重開機

拿掉這個條件是看看
(本來CR用的)
好像CR有裝 .net framework 4 就可以 run
不需要 Client Profile


如果已經碰上
就把之前的安裝黨全部移除(4 client profile)
重開機應該就不會再執行了

2011年8月15日 星期一

#VB 已經開啟一個與這個連接相關的 DataReader,必須先將它關閉。

已經開啟一個與這個連接相關的 DataReader,必須先將它關閉。


照理說
DataAdapter.fill()
將會自動開啟connection
並且自動關閉connection


但是卻碰到這樣的問題


怎麼改都不太知道有哪個DataReader沒有關閉
我用的都是Adapter


就只好硬著頭皮每個連線字串都改掉
不透過Class呼叫


確保每個連線都是獨立的

2011年8月14日 星期日

#VB ODBC 資料來源 寫入


每次開程式都去寫入
,(或是再改成判斷有無寫入,感覺會有一些問題)
不走DSN

'寫入 ODBC 資料來源
'1. 走DSN
'2. 無DSN
' 宣告變數
Dim Driver As String
' 使用者資料來源名稱
DSN = "FoxProMcstSource"
' 驅動程式
Driver = "Microsoft FoxPro VFP Driver (*.dbf)"
cnMcst &= IO.Directory.GetCurrentDirectory().ToString + ";"

' 建立DAO.DBEngine 物件 , 透過RegisterDatabase 方法新增一個ODBC 設定
CreateObject("DAO.DBEngine.36").RegisterDatabase(DSN, Driver, True, cnMcst)
'DBEngine.RegisterDatabase ("CSD_PO_PMIS", str_Driver_Name, True, stConnect)
=================================================

如何由程式中去新增 ODBC 資料來源


[VBNET] 叫用 ODBC 精靈的 API


Microsoft OLE DB Provider for ODBC

2011年8月13日 星期六

@CASE 1.2 < 選配物料需求計算 > ver-110814

'將點選row 走SQL的部分寫在 selectionChange

'分批次列印,目前想法是送出時,再去檢查那些訂單被選取
一個一個走SQL並且列印

'如果合併計算,目前也是一樣一步一步走,
只是會做累計動作,只產出一張表單

幹好麻煩
===============================================
'如果只輸入訂單號 (將篩選 今天以後的出貨日期 )

'希望能夠有直接部瀏覽報表,直接列印的部分

'做到多筆資料合計

'能夠多筆批次列印
1. 無選取  單筆列印
2. 有選取  預設多筆分批列印 (或是說一定要選取才會印那筆資料)
3. 有合併計算  合併計算列印

'取消報表預覽

'取消Excel開檔
直接寫入預設資料夾

'在Gridview中加入選取方塊
==================================================
'列印格式可能要再看怎麼改
有點不一樣

'查一夏怎麼加入兩個以上的資料來源
去連結報表

'水晶報表怎麼畫表格格線
要查一下

'滑鼠複製貼上還沒做
(所有CASE希望做到滑鼠右鍵只會在Gridview 的 cells 裡面出現)
===================================================
custid 部分先隱藏
改成訂貨單號


select a.*
from tblorderdet a join tblorder b on a.orderno = b.orderno
where  b.orderno like 'scm3139%'



select c.orderno as 訂貨單號, a.custid as 客戶ID, MAX(a.formversion) as 訂單版本
from tblorder a join tblorderdet c on a.orderno = c.orderno
where c.consdate = '20110715' AND a.status = 2
group by c.orderno, a.custid
'所有CASE欄位可以拖拉,並且變更寬度

'列印格式要再改正式的

'忘掉了 'U%' 商標部分
 數量有點問題
通常一樣或是很大

還有點怪
有多一些東西,或是少一些東西
不知道跟料號的更動有沒有關係

這個可能也是跟原物料一樣要走兩次(第一次抓XF之後才抓到 'U%' )
看有沒辦法直接抓

多少東西
可能會跟請購單已經印出
後來又改訂貨單

變成該請購單是舊的
會有多少東西的問題
=============================================

'選配撈到的東西有出入(訂單,原料)

'多訂單計算部分

有點不知道多訂單應該怎麼呈現格式
要再問看看可以以什麼方式呈現轉檔格式

或是是否真有必要
在什麼情況下需要

'加入訂單號查詢

'改日期搜尋成為 出貨日期搜尋 (目前是訂貨單建檔日期)

'希望透過搜尋訂單
可以選擇結合那些訂單,去計算選配料號


@要注意的是
該日期範圍~不一定會是最新版本的訂單

想法是一樣撈訂單號
再去結合一次撈出最新訂單(跳脫該日期搜尋)

@CASE 1.1 < 原物料需求計算 > ver-110814

'應該加入物料號篩選自己用


'之前玩Parallel.for
忽略掉排序問題,已修正

'需要注意遺下
MRP EXCEL 格式問題
因為一開始沒有直接存 xls
而是先txt
後來開檔寫入格式後,存檔讓使用者自訂的話
預設格式還是txt

'拿掉報表列印
(crystal Report 轉 excel 可以查查看)
看能不能再報表上面轉excel

=================================

'可能需要改直接建立 xls 不透過 txt
直接開檔
讓使用者決定存檔名稱與位置



幹決定了
做一個table
可以踢掉不想看的製令
然後才下去搜尋

'再來就是資料上的問題了
維護資料ERP 跟 DOS資料正確性

可能可以檢查,DOS,ERP BOM表上
兩邊資料正確性
========================================
'檢查BOM表製程
基數與使用數是否不相符

只看調和部分
可能會需要寫一隻工具程式去檢查


select p.partnum, c.cardnum, p.pdtversion, p.pdtkey, p.prockey
from (select sum(a.partnum) as partnum, a.pdtversion, a.pdtkey, a.prockey from tblbompart a join
( tblbomproc b join tblbompdt d on b.pdtversion = d.pdtversion and b.pdtkey = d.pdtkey
)
on a.pdtversion = b.pdtversion and a.pdtkey = b.pdtkey and a.prockey = b.prockey
 where d.isnotvalid = 0 and d.aprvdate not like 'NULL'
group by  a.pdtversion, a.pdtkey, a.prockey ) as p join
 tblbompart  c
on c.pdtversion = p.pdtversion and c.pdtkey = p.pdtkey and c.prockey = p.prockey
where p.partnum*1000 <> c.cardnum and c.partcode not like 'U%' and c.partcode not like 'Q%'
 and c.partcode not like 'R%'  and c.partcode not like 'O%'


select * from tblbompart where pdtversion = 1 and pdtkey = 865 and prockey = 2954


=================================
再來就看BOM表是不是有問題

或是說有些東西更新
DOS還沒更新

'可能會需要說去考慮公斤 公克的轉換
(基數會多三個0)
好像又不用一 一
==================================
目前看是說
網子套片之類的
因為在 製令生產數 先作千分之八的計算
後面跑出來就不會有小數點

但調和部分還是有小數點上的差距
(累積起來可能就會到整數)

1. 計算製程時,就去計算耗損率(floor)
2. 計算 Part 使用數/基數,(floor)

呈現資料包含小數點
轉檔列印四捨五入
===================================
'計算上的數字與舊系統有點出入

要看一下是不是千分之八的問題

大概知道是取四捨五入的時候
應該計算到最後的數字再開始取

似乎舊系統是在最後的時候
才把數字去加上八趴
但是有一些東西還是有點出入



'從單一制令著手
去檢查城市跑得跟計算的是差多少
可能原因在哪

不知道....
======================================
'每次覆蓋MCST

'增加列印日期時間

'改表格方式呈現資料

'去掉小數點

'把商標部分拉回來
=====================================
@因為透過舊料號去找新料號
會有商標的問題
1.先找 ----XF 無商標的表準製程序
2.如果 ----XF 找不到(舊料號應該一定8碼)
 舊料號會有商標資訊,去抓該商標的XF
3. 如果是第七碼 X, B的區別
    如果抓到兩種以上, 先踢掉 B
    讓X得進去跑(中間再用B替換找)
4. 如果不是第七碼(應該有一個是停用的)
    兩個都抓(跑BOM的時候會判斷哪個被停用)
    (跑BOM會多 + 1個產品)
5.所以製程有多少產品,跑BOM就有多少產品

=======================================
'所有case 介面設定 希望能夠符合1024X768
目前很怪

'要找最新版本 pdt

'發現說會有一些東西可能是還沒確認,但是也不是停用狀態的
變成會撈不到再製品
將這部分列為資料異常
反推回去找舊料號顯示
(新料,舊料,品名,原因)

'生產的再製品到成品間的差異
只會有商標的差別 (商標都交給選配)
其中的製程材料耗用是一樣的
所以抓完前7碼
判斷X,B
+ ____XF
(if ----XF 找不到
 走 ____XF)
去走BOM

所以BOM只會走一次 (已經是XF)


'又是第7碼,需要下判斷說如果擷取的前7碼,末碼是 X或是B
去檢查訂單上面的兩種有沒有存在
(有 X 一定有B, 有B不一定有 X)

"select PartCode, " & tblheadPCode.Rows.Item(i).Item("Qty").ToString & " AS Qty " & _
                "from tblorderdet " & _
                "where orderno like '" & tblheadPCode.Rows.Item(i).Item("HeadOrderNo").trim() & "' " & _
                "and partcode like '" & tblheadPCode.Rows.Item(i).Item("HeadPartCode").ToString & "%' " & IIf(tblheadPCode.Rows.Item(i).Item("HeadPartCode").ToString.ElementAt(6) = "X", "and partcode like '" & Replace(tblheadPCode.Rows.Item(i).Item("HeadPartCode").ToString, tblheadPCode.Rows.Item(i).Item("HeadPartCode").ToString.ElementAt(6), "B") & "%'", "") _
                 & IIf(tblheadPCode.Rows.Item(i).Item("HeadPartCode").ToString.ElementAt(6) = "B", "and partcode like '" & Replace(tblheadPCode.Rows.Item(i).Item("HeadPartCode").ToString, tblheadPCode.Rows.Item(i).Item("HeadPartCode").ToString.ElementAt(6), "X") & "%'", "")



'似乎有異常資料沒被抓出來
撈前面7碼的SQL 應該修改遺下
讓他能夠辨別異常資料

做法是透過新增的資料去判斷該筆前7碼是不是有抓到完整的7碼資料
不是就屬於異常
================================================
庫存 {  //所有可能的前7碼 (有可能多種 第七碼 B,X 是否已確定?)
    // B,X 挑一個抓,後面都一樣,先抓MAX(PartCode) -> 撈一個料號
   // 判斷mcst PartCode有空值的,剔除

SELECT substring(max(partcode),1,7)) as headPartCode
 FROM tblStock sto WHERE sto.PartRule LIKE '%@[2624@]' ESCAPE '@'
}

跳過...
還是沒辦法跳過

訂單{ // 看訂單訂購的是哪個,去對前7碼) 抓到要的產品(包裝後)

select b.*
from tblorder a join tblorderdet b on a.orderno = b.orderno
where a.orderno like 'TAU2960%' and (partcode like '200614B%' or partcode like '200614X%')

}

透過產品去撈包裝前的再製品(包裝前) partCode {

select * from tblbompdt
where pdtcode LIKE '200614X____' and  pdtcode not LIKE '%XX' and  pdtcode not LIKE '%EX'
and  aprvdate not like 'null' and isnotvalid = 0

}



走兩次 Pdt, Proc, Part
1.包裝後XX 去撈 包裝前 XF 
2. 包裝前XF  之下所有製程


產品 {  // 去抓Aprv過,非停用的產品   pdtkey,pdtversion
        //  (會包含XP包裝(原料是XF,所以可能要踢掉XX的),XF所有製程)
   // 要踢掉的應該不只XX,EX(完成品,沖孔) , 要留HX(HUB 包裝要鎖螺絲)

select * from tblbompdt
where pdtcode LIKE '200614X____' and  pdtcode not LIKE '%XX' and  pdtcode not LIKE '%EX'
and  aprvdate not like 'null' and isnotvalid = 0
}

製程 { // 計算PrcoNum , CardNum , 撈出 ProcKey
select * from tblbomproc
where pdtkey = 10747 and pdtversion = 1 
}

原物料 {   // XF製程下所有原物料
select * from tblbompart
where
pdtkey = 10746 and pdtversion = 1 and prockey between 28524 and 28528
AND part.PartCode1 NOT LIKE 'NFFILLER' AND part.PartCode1 NOT LIKE 'U%'
}

2011年8月10日 星期三

@CASE 1 < 物料需求計算 > ver-110811

'第八碼重複搜尋

SELECT partcode as HeadPartCode, '2512BSTA' AS OldPartCode, 1500 AS Qty
FROM tblStock WHERE PartRule LIKE '%@[2512BSTA@]' ESCAPE '@'
AND ( partcode like '%----XF' OR partCode like '%XF')

每個製令下來,
如果撈出的產品不只一個,就特別註記

觀察該撈出的多數產品往下走
是否只有唯一的產品號
1.重複 (distinct)
2.都沒有 (異常)
3.多數 (異常 -> 不應該發生)



====================================

'mcst 每月都有32天

'選配撈到的東西有出入(訂單,原料)

'多訂單計算部分

有點不知道多訂單應該怎麼呈現格式
要再問看看可以以什麼方式呈現轉檔格式

或是是否真有必要
在什麼情況下需要

'加入訂單號查詢

'改日期搜尋成為 出貨日期搜尋 (目前是訂貨單建檔日期)

'希望透過搜尋訂單
可以選擇結合那些訂單,去計算選配料號


@要注意的是
該日期範圍~不一定會是最新版本的訂單

想法是一樣撈訂單號
再去結合一次撈出最新訂單(跳脫該日期搜尋)




========================================
orderdet : partcode , custspec , pdtversion , qty, order.custid


select b.partcode, b.pdtversion, b.custspec, b.qty, a.custid, max(a.formversion)
 from tblorder a
join tblorderdet b on a.orderno = b.orderno
where a.orderdate = '20110527'
and a.status = 2
group by b.partcode, b.pdtversion, b.custspec, b.qty, a.custid


================================
選配 與 BOM 切割
BOM就不用考慮訂單部分

選配
一樣的方法撈到新料號
配上客戶規格
去撈選配

介面設計上
感覺不外乎就是可以篩選訂單

要注意的是
1. 訂單細項上面
可能會有兩筆不同批次但是同料號同客戶規格的東西
(所以要抓出兩個相同的料號加總Qty,再去計算選配)
mark + CustSpec 唯一

2. 不透過mcst去做資料撈取

3. 選配撈所有的商標(看訂單訂的產品決定,會走BOM)
 製令就踢掉所有商標(U開頭)

4. 選配希望能夠一筆一筆計算,也有多筆合計功能

select *
from tblcomb
where combcode = 'BDR-562086-16'


select *
from tblcombdet
where combcode  like '%562086-16'


select *
from tblorderdet
where orderno = 'BDR1003091126'


========================================
好像可以
但是效能上有問題

'proc 去挑 part 有點問題
會有說 pdtversion, pdtkey 相同
但是 proccode不同(proc 跟 part)

變成撈不到資料

所以不能透過這個關係來撈資料



'有可能是出在子查詢上

要再想方法

'最後面的 巢狀For each 要想辦法改掉

透過Table select 去解決
但有點問題 compute 找不到存在的資料行(明明存在)

找訂單 (PartCode產品, CustSpec 去對選配)

select *
from tblorderdet a
join tblstock b on a.partcode = b.partcode
where a.PartCode LIKE
(select SUBSTRING(max(partcode),1,7) from tblstock
where PartRule LIKE '%@[0780N@]' ESCAPE '@' )+'%'
and orderno like 'sch2184%'


2011年8月8日 星期一

#VB 滑鼠右鍵功能 ver.2011.08.09


'要再思考可以做些什麼功能




基本上是出來了
但是當某個textbox被選取(selectionLength > 0)得到焦點時
貼上另外的textbox的時候並不會限制長度


感覺是跟我leave事件去修改格式的問題有關
先放著

@CASE 5 < update 程式 > ver.20110808


'在win7上安裝測試以後
大致上主程式可以執行

但是更新程式會出問題
不斷呼叫主程式
並且關閉更新程式

第一次測試
要再查查看

可能是全縣問題
========================================
'需要將一些報表更新檔案也一併寫入更新程式中
讓他能夠自動更新


'應該要在思考遺下整個流程
感覺會有點問題

在目前尚未寫入自我更新的 更新程式
要去過渡到有自我更新的版本上面

反應會有更新問題
似乎問題出在剛建立玩noupdate檔案
主程式偵測到並且去殺掉太快的樣子
會說更新程式還在佔用NoUpdate資源

如何避免这个新建文件并写信息出错

目前透過 IO.File.Create().close去釋放資源
然後改掉msgbox()提示關閉主程式訊息

'應該改掉取消更新時
將主程式關閉
更新程式關閉

而不要等待再問

======================================
'目前改以P曹更新
並且放置更新版本檔案判斷

應該可以放置版本更新資訊
更新時撈出資料
顯示相關更新資訊

@直接開更新可以
透過主程式開更新
檔案一直無法覆蓋

猜測是 PROCE尚未完全關閉
所以檔案無法搬移覆蓋

=========================================
初步上完成

'想一下怎麼編碼

'進一步處理版本更新的動作(exe替換 , 安裝新套件, setup重新安裝)

'直接開Update時,與透過主程式開啟Update
應該要各做些什麼事

'怎麼包裝兩個不同專案的兩隻程式在一個安裝檔
自動安裝兩隻程式

目前想到是說,分開部屬
然後把update執行檔,拉進去主程式去部屬

有點怪,拉進去部署以後
關閉主程式

猜測是關閉 主程式會需要一點時間,
如果說弄一個迴圈來確定該程式已經關閉以後
才往下走
或許可以解決

Process.WaitForExit 方法

設定要等待相關的處理序結束的時間,並且阻止目前的執行緒執行,直到等候時間耗盡或者處理序已經結束為止。



那就要看專案到底部署的時候
需要那些檔案,那些不必
pdb, vshost.exe, manifest, config
===================================================
在殺掉目錄下的主程式時
發生了例外

大概知道說是因為我的主程式並沒有關掉的原因
要關掉介面視窗執行緒

1. 要先 closeMainWindows (關介面執行緒)
2. 在關掉 執行緒 close (真正關掉執行緒)
====================================================
希望透過抓取 Process 唯一識別的 ID (Integer) 去做關閉動作


                    '關掉所有執行中 MRP - App 程式
                    Dim myProc As Process
                    Dim allProc() As Process

                    '所有開啟的 ERP外掛
                    allProc = Process.GetProcessesByName("MRP - App")
                    For i = 0 To UBound(allProc)
                        MsgBox("識別碼 : " & allProc(i).Id & ",名稱 : " & allProc(i).MainModule.FileName)

                        myProc = Process.GetProcessById(allProc(i).Id)
                        myProc.Close()
                    Next




获取进程PID


======================================================
需要寫一隻程式
可以幫目前主程式做更新動作

'更新動作第一次都會失敗,
然後再提示一次是否關閉主程式更新

有點怪

'更新完成以後,確定檔案以置換
 但是呼叫主程式的動作有問題
看起來像是不斷呼叫,然後不斷關閉又呼叫

應該是我更新程式再呼叫主程式,以及關閉自己那邊有點什麼問題

'如果更新程式以跳出(主程式並存時)
 不關閉主程式執行更新
 更新程式會 Sleep 一段時間
 再次提示關閉主程式

此時應該將 Update Form 縮至最小
或是透過背景執行等動作
(目前 Sleep , Update 程式將鎖死, Form 也不能重繪)

'開發後與目前上線版本會不一樣
開發後的最新版本,
在使用時,怎麼判斷開發者才是最新版本問題

'下載更新檔完成後,
 怎麼執行更新檔?

1.下載就直接覆蓋(下載前一定要確定主程式關閉)
2.下載以後,移動檔案去覆蓋(下載以後,等確認主程式關閉,就可以移動檔案覆蓋)

完成以後

呼叫主程式
關閉 Update 程式

移動檔案
http://program.maomo.info/article.aspx?uid=63


VS.NET在程序中关闭其他运行的程序



如何程式內關閉透過System.Diagnostics.Process.Start開啟的程式
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20100719133145ERC&fumcde=FUM20050124192253INM


Process.Close 方法


============================================
主程式
每次開啟檢查版本(本機版本 是否等於 資料庫所存最新版本)
透過一個版本檢查檔

主程式下
需要一個上傳系統版更程式的介面 (管理員權限)

UpDate程式
當需要更新,
1. 建立 UpDate 資料夾 (暫存)
2. 連資料庫下載新版本程式(exe or setup),到 UpDate 資料夾
3. 檢查下載檔案大小 是否與資料庫內存相同 ( 相同則下載完畢 )
4. (無窮迴圈檢查) 關閉主程式,安裝更新,並建立新的檢察檔



    '1.建立 Update 暫存資料夾
    '2.下載新版更新檔
    '3.當資料庫撈資料完成,檢查檔案大小,是否與資料庫內存相同
    '4.確定下載完成,詢問是否關閉主程式,
    '5.確認關閉主程式後,執行update
    '6.訊息提示


====================================================
要稍微查一夏
怎麼把兩個專案下的不同程式包成一個安裝檔
還是說兩個程式要放在同一個專案建置

有什麼不同

要怎麼包要在查察
====================================================
Windows Installer (MSI)


使用vs2005製作安裝檔,若執行檔需更新,如何重新製作



[VS2005]安裝時移除舊版程式