หน้า 1 จากทั้งหมด 2

Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: พฤหัสฯ. ก.ย. 03, 2015 10:59 am
โดย ppitaksu
มีรายงานตัวหนึ่งที่ผม ต้องการ กรองสินค้าที่ ไม่เป็นของบริษัท ประมาณ 15-20 บริษัท จาก 40 บริษัท ที่มีอยู่ในระบบทั้งหมด ผมควรต่อ Filter ที่ยาวๆนี้อย่างไร

[master file]
File=STCRD
Alias=A
Tag=STCRD3
System=DATA_PATH
Filter=.NOT.(STMAS->SUPCOD='S001'.OR.STMAS->SUPCOD='S0002'.OR.STMAS->SUPCOD='S0003'.OR.STMAS->SUPCOD='S0004'.OR.STMAS->SUPCOD='S0005'.OR.STMAS->SUPCOD='S0006'.OR.STMAS->SUPCOD='S0007'.OR.STMAS->SUPCOD='S0008'.OR.STMAS->SUPCOD='S0009'.OR.STMAS->SUPCOD='S0010')

คือว่า ผมลองทดสอบดูแล้ว โปรแกรม ลองรับ ความยาวของบรรทัด Filter ไม่เกิน 256 ตัวอักษร มีวิธีใดที่จะ workaround ปัญหานี้ไหมครับ

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: พฤหัสฯ. ก.ย. 03, 2015 12:26 pm
โดย suchai
ทำได้หลายแนวทางครับ

แนวทางที่หนึ่ง ประหยัดคำ
(A->SUPCOD='S001'.OR.A->SUPCOD='S0002'.OR.A->SUPCOD='S0003'.OR.A->SUPCOD='S0004'.OR.A->SUPCOD='S0005'.OR.A->SUPCOD='S0006'.OR.A->SUPCOD='S0007'.OR.A->SUPCOD='S0008'.OR.A->SUPCOD='S0009'.OR.A->SUPCOD='S0010')

แนวทางที่สอง ออกแนวคณิตศาสตร์หน่อย เนื่องเลขลำดับมันเรียง แต่คุณ ppitaksu พิมพ์ 'S001' ตก 0 ไปตัวนึง
Filter=.NOT.VAL(SUBSTR(STMAS->SUPCOD,4,2))<=10    (อันนี้ผมยังไม่ได้ลองทดสอบ แต่ผมชอบหาอะไรแปลกทำ)

แนวทางอีกแนวหนึ่งที่เรียบง่าย คือใช้ Query=  ต้องดูว่ามีบรรทัดก่อนหรือไม่ ถ้ามีขึ้นบรรทัดใหม่ด้วย Query=.AND.
Query=.AND.(STMAS->SUPCOD#'S0001'.OR.STMAS->SUPCOD#'S0002')
Query=.AND.(STMAS->SUPCOD#'S0003'.OR.STMAS->SUPCOD#'S0004')

ลงมาได้เรื่อยๆ หลายบรรทัด แต่ตรวจสอบหรือทดสอบ การใช้เงื่อนไข .AND. หรือ .OR. และเครื่องหมายวงเล็บ อีกทีครับ

ยังมีแนวพิศดารอีกหลายแบบ ไม่กล่าวถึง ใช้ประมาณนี้ก็พอ

มีอะไรถามได้ ผมอยู่จันท์ เดี๋ยวขับรถไปดูให้    :) :)

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: พฤหัสฯ. ก.ย. 03, 2015 12:38 pm
โดย ITTI
เข้ามาเก็บความรู้ครับ  :)

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: พฤหัสฯ. ก.ย. 03, 2015 1:58 pm
โดย suchai
อิทธิ ความรู้ที่อิทธิมี พี่ดูแล้วจะไม่มีที่เก็บแล้ว คงไม่ต้องเก็บอะไรเพิ่มอีก

แต่ก็เสนอ ผู้พัฒนาแล้วว่า อิทธิเป็นคนนึงที่มีพัฒนาการก้าวหน้าแบบยิ่งยวด (ไม่รู้ว่าเรื่องโปรแกรมหรือการลดน้ำหนักรักษาหุ่น)หน้าจะถูกเลือกให้ขึ้นไป วางระบบ Express ERP ที่มีความซับซ้อนในอนาคตอันใกล้ต่อไป (ถาม 64 ด้วยว่าสนใจมั้ย จะได้เชียร์)

:D :D :D

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: พฤหัสฯ. ก.ย. 03, 2015 9:40 pm
โดย ppitaksu
ขอบคุณมากครับ คุณ suchai
[quote=&quot;suchai&quot;]
ทำได้หลายแนวทางครับ

แนวทางที่หนึ่ง ประหยัดคำ
(A->SUPCOD='S001'.OR.A->SUPCOD='S0002'.OR.A->SUPCOD='S0003'.OR.A->SUPCOD='S0004'.OR.A->SUPCOD='S0005'.OR.A->SUPCOD='S0006'.OR.A->SUPCOD='S0007'.OR.A->SUPCOD='S0008'.OR.A->SUPCOD='S0009'.OR.A->SUPCOD='S0010')

[color=purple]ดูเหมือนว่าจะสามารถประหยัดตัวอักษรไปได้ 4 ตัวอักษรทุกๆ 1 บริษัทเงื่อนไขที่มี ผมคิดว่าจะใช้แนวนี้พอได้ จะกรองได้ประมาณ 11 บริษัท ถ้าคำนวณจากตัวอักษรทั้งหมด 256 ตัวที่มีได้ใน1บรรทัด แต่เนื่องจากรายงานตัวนี้ มี MASTER FILE เป็น STCRD ซึ่ง Alias=A และมี STMAS เป็น Relate file ซึ่งมี Alias=B ผมจะลองใช้ B->SUPCOD แทนดูนะครับ
256-7(จากคำว่าFilter=)-5(จาก.NOT.)-2(จากเครื่องหมายวงเล็บเปิดปิด)-17(จากB->SUPCOD='Sxxxx' ชุดแรก) จะเหลือที่ว่างอีก 225 ตัวอักษร หารด้วย 21 (จาก .OR.B->SUPCOD='Sxxxx') ได้ 10.71 ชุด ซึ่งหมายถึง ว่าเราจะสามารถกรองด้วยรูปแบบนี้ได้มากถึง 11 บริษัท(ชุดแรก+10ชุดที่ต่อกันด้วย.OR.) เลยครับ เท่านี้ก็คงจะพอแล้ว


แนวทางที่สอง ออกแนวคณิตศาสตร์หน่อย เนื่องเลขลำดับมันเรียง แต่คุณ ppitaksu พิมพ์ 'S001' ตก 0 ไปตัวนึง
Filter=.NOT.VAL(SUBSTR(STMAS->SUPCOD,4,2))<=10    (อันนี้ผมยังไม่ได้ลองทดสอบ แต่ผมชอบหาอะไรแปลกทำ)

แนวที่สองนี้ ผมใช้ไม่ได้เพราะตัวอย่างเป็นเลขสมมติต่อเนื่อง แต่ของจริงเป็นเลขสุ่ม ไม่ต่อเนื่อง ไม่เรียงลำดับครับ แต่ก็ให้ไอเดียที่ดีครับ

แนวทางอีกแนวหนึ่งที่เรียบง่าย คือใช้ Query=  ต้องดูว่ามีบรรทัดก่อนหรือไม่ ถ้ามีขึ้นบรรทัดใหม่ด้วย Query=.AND.
Query=.AND.(STMAS->SUPCOD#'S0001'.OR.STMAS->SUPCOD#'S0002')
Query=.AND.(STMAS->SUPCOD#'S0003'.OR.STMAS->SUPCOD#'S0004')
ลงมาได้เรื่อยๆ หลายบรรทัด แต่ตรวจสอบหรือทดสอบ การใช้เงื่อนไข .AND. หรือ .OR. และเครื่องหมายวงเล็บ อีกทีครับ

แนวที่สามนี้ ผมทดสอบมาก่อนแล้ว แต่มันใช้ Query ไม่ได้เนื่องจาก STMAS ไม่ใช่ MASTER File ของรายงานนี้ ตอนทำรายงาน มันฟ้อง Error Relation ครับ

ยังมีแนวพิศดารอีกหลายแบบ ไม่กล่าวถึง ใช้ประมาณนี้ก็พอ

มีอะไรถามได้ ผมอยู่จันท์ เดี๋ยวขับรถไปดูให้    :) :)[/color]

แวะมาเยี่ยมได้ครับ ผมอยู่ที่ร้านชัยพฤกษ์สี่แยกเขาไร่ยา อยากจะตั้งวงร่วมสนทนากับคุณสุชาย และน้องชายของผม(คุณฮอล/wongzaputt) จริงๆครับ โดยเฉพาะประเด็นของระบบปฏิบัติการปัจจุบันกับการใช้งานโปรแกรมเอ็กซ์เพรส และปัญหาในระยะยาว พร้อมข้อเสนอแนวทางออก ร่วมกัน ตัวผมเองไม่สันทัดการเขียนโปรแกรม แต่เรียนจบบริหารการเงินก็เลยพอมีความรู้บัญชีแบบงูๆปลาๆ แต่คุณฮอลเค้าค้องเรื่องการเขียนโปรแกรม ก็เลยช่วยงานกันได้ลงตัว ถ้าได้คุยกันในแบบ interactive น่าจะมีไอเดียดีๆแลกเปลี่ยนกันได้นะครับ[/quote]

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: พฤหัสฯ. ก.ย. 03, 2015 9:48 pm
โดย ppitaksu
จากการทดสอบใช้ ปรากฏว่า Alias B ใช้ไม่ได้ครับ โปรแกรมฟ้อง นิพจน์ผิด น่าจะเกิดจากการที่ ระบบยังไม่รับรู้การมีอยู่ของ Alias B ในช่วงประกาศ Master file ซึ่งเกิดก่อนการประกาศ relate file

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: ศุกร์ ก.ย. 04, 2015 11:07 am
โดย suchai
ให้ใช้วิธีที่ 3 ครับ Query= สามารถใช้ได้กับ Master File และ Relate File  ถ้าเป็น Master File สามารถใช้ชื่อฟิลด์ได้เลย หรือจะใช้เต็มยศก็ไม่ได้ว่าอะไร เช่น Master File คือ STCRD ใน Query=.AND.DOCNUM='XXX' หรือ Query=.AND.STCRD->DOCNUM='XXX' ไม่ว่ากัน  แต่ถ้าเป็น Relate File ต้องเต็มยศครับ STMAS->STKDES 

ส่วน Alias ผมลองแกล้งใส่เข้าไปในโปรแกรม แล้วดูผล โดนมันด่าเอาครับ แสดงว่ามันไม่ชอบ ไม่ต้องใส่

ส่วนที่เขาไร่ยา ผมเพิ่งไปเย็นวันพุธ เจอตลาดนัดใหญ่ เข้าไปแทบออกไม่ได้ เกือบชั่วโมง รถติดไร้สาระมากเลย พอพ้น 20 เมตรไฟแดง ถนนเหงาไม่มีรถเลย

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: ศุกร์ ก.ย. 04, 2015 12:54 pm
โดย Kamol1809
ไป UPDATEโปรแกรมใหม่  ตอนนี้ความกว้างได้ 500 ตัวครับ  ทุกเวชั่น

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: ศุกร์ ก.ย. 04, 2015 10:07 pm
โดย ppitaksu
[quote=&quot;Kamol1809&quot;]
ไป UPDATEโปรแกรมใหม่  ตอนนี้ความกว้างได้ 500 ตัวครับ  ทุกเวชั่น
[/quote]

Version ที่ผมใช้อยู่เป็น version พิเศษที่คุณ CK จัดมาให้ทดลอง features ใหม่ๆ ที่ผมได้เสนอไป พวก shortcut คีย์ลัด hotkeys เมนูหลักที่เข้าถึงด้วยตัวเลข อะไรพวกนั้นน่ะครับ

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: ศุกร์ ก.ย. 04, 2015 10:37 pm
โดย ppitaksu
[quote=&quot;suchai&quot;]
ให้ใช้วิธีที่ 3 ครับ Query= สามารถใช้ได้กับ Master File และ Relate File  ถ้าเป็น Master File สามารถใช้ชื่อฟิลด์ได้เลย หรือจะใช้เต็มยศก็ไม่ได้ว่าอะไร เช่น Master File คือ STCRD ใน Query=.AND.DOCNUM='XXX' หรือ Query=.AND.STCRD->DOCNUM='XXX' ไม่ว่ากัน  แต่ถ้าเป็น Relate File ต้องเต็มยศครับ STMAS->STKDES   
[color=maroon]**ใช้คิวรี่ได้แต่การเขียน เซทของกลุ่มข้อมูลที่ต้องการ มันจะไม่ตรงกับ .Not.(.....) ที่ใช้ในฟิลเตอร์นะครับ ผมทดลองดูโดยใช้เงื่อนไขรูปแบบที่คุณสุชายยกตัวอย่างไว้ดังนี้แล้ว

Query=.AND.(STMAS->SUPCOD#'S0001'.OR.STMAS->SUPCOD#'S0002')
Query=.AND.(STMAS->SUPCOD#'S0003'.OR.STMAS->SUPCOD#'S0004')
ปรากฏว่า โปรแกรมนิ่งไปพักใหญ่ แล้ว เด้งหลุดออกจากโปรแกรมไปเฉยๆเลยครับ ดูเหมือนว่า (A#'XX'.OR.A#'YY').and.(A#'ZZ'.OR.A#'YZ) ไม่ให้ผลลัพธ์เป็น ซับเซทที่เข้าใจได้โดยโปรแกรม และผมคิดว่ามันไม่ใช่ เซทของกลุ่มข้อมูลเดียวกันกับ .Not.(A='XX'.OR.A='YY'.OR.A='ZZ'.OR.A='YZ') นะครับ ซึ่งปัญหาก็คือผมไม่สามารถใช้ นิพจน์ .NOT. ในระบบคิวรี่ได้ มันต่างจาก Filter นั่นทำให้เป็นปัญหาที่ยังหาทางไปไม่เจอครับ

ส่วน Alias ผมลองแกล้งใส่เข้าไปในโปรแกรม แล้วดูผล โดนมันด่าเอาครับ แสดงว่ามันไม่ชอบ ไม่ต้องใส่

ส่วนที่เขาไร่ยา ผมเพิ่งไปเย็นวันพุธ เจอตลาดนัดใหญ่ เข้าไปแทบออกไม่ได้ เกือบชั่วโมง รถติดไร้สาระมากเลย พอพ้น 20 เมตรไฟแดง ถนนเหงาไม่มีรถเลย[/color]

***เย็นวันพุธ สุดสาหัสครับ ผมจะเลี่ยงขาออกเส้นรักศักดิ์ชมูลทุกวันพุธครับ ขับอ้อมได้ อ้อมเลยครับ เร็วกว่ากันอย่างน้อย ครึ่ง-หนึ่งชั่วโมงเลยทีเดียว ส่วนวันอื่นๆสภาพการจราจรปลอดโปร่งตลอดครับ วันไหนผ่านมาทำงานแวะทักทายได้ครับ แจ้งผมผ่าน LINE ID: TingliChan เพื่อเช็คเวลาอยู่ออฟฟิศได้ครับ
[/quote]

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: จันทร์ ก.ย. 07, 2015 12:08 pm
โดย suchai
เอาอย่างนี้ครับ เดิมคุณ ppitaksu มี Filter ตามข้างล่าง

Filter=.NOT.(STMAS->SUPCOD='S001'.OR.STMAS->SUPCOD='S0002'.OR.STMAS->SUPCOD='S0003'.OR.STMAS->SUPCOD='S0004'.OR.STMAS->SUPCOD='S0005'.OR.STMAS->SUPCOD='S0006'.OR.STMAS->SUPCOD='S0007'.OR.STMAS->SUPCOD='S0008'.OR.STMAS->SUPCOD='S0009'.OR.STMAS->SUPCOD='S0010')

ถ้าอยากจะใช้ Query ก็ให้ใส่วงเล็บครอบหลังเท่ากับ Filter= แล้วเอาขึ้นไปต่อ Query=.AND. ส่วน Filter เดิมก็ลบไปไม่ต้องใช้

Query=.AND.[color=red](
.NOT.(STMAS->SUPCOD='S001'.OR.STMAS->SUPCOD='S0002'.OR.STMAS->SUPCOD='S0003'.OR.STMAS->SUPCOD='S0004'.OR.STMAS->SUPCOD='S0005'.OR.STMAS->SUPCOD='S0006'.OR.STMAS->SUPCOD='S0007'.OR.STMAS->SUPCOD='S0008'.OR.STMAS->SUPCOD='S0009'.OR.STMAS->SUPCOD='S0010'))

อันนี้โปรแกรมเมอร์ แจ้งมา ผมยังไม่ได้ทดสอบ และโปรแกรมเมอร์จะติดต่อแจ้งรายละเอียดการอัพเดดโปรแกรมผ่านทาง Email ที่ติดต่อคุณไปอีกทีครับ[/color]

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: จันทร์ ก.ย. 07, 2015 1:04 pm
โดย CK
Version ที่ผมใช้อยู่เป็น version พิเศษที่คุณ CK จัดมาให้ทดลอง features ใหม่ๆ ที่ผมได้เสนอไป พวก shortcut คีย์ลัด hotkeys เมนูหลักที่เข้าถึงด้วยตัวเลข อะไรพวกนั้นน่ะครับ


สำหรับ features พิเศษ และ hotkeys ต่าง ๆ ที่ผมทำไปให้ลองทดสอบนั้น  ปัจจุบันผมได้เพิ่มเข้าไปในโปรแกรมตัวปกติทุกตัวเรียบร้อยแล้วครับ
ให้อัพเดรทโปรแกรมล่าสุดจากหน้าเว็ปไปใช้ได้เลยนะครับ
:)

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: จันทร์ ก.ย. 07, 2015 1:05 pm
โดย suchai
ผมลองทดสอบแล้ว ให้ผลเหมือนกัน และก็เป็นความรู้ใหม่อีกนิดนึง

[color=red]Filter=.NOT.(STMAS->SUPCOD='S001')


สามารถย้ายไปเป็น

Query=.AND.(.NOT.(STMAS->SUPCOD='S001'))

ผมรู้แล้วว่า ทำไมนิสัยผมถึงไม่ชอบ Filter เพราะผมไม่ชอบคำว่า .NOT. ถ้าเลือกได้ต้อง  .OK. เท่านั้น ดังนั้นการเขียน Query ก็ยังคงเป็น

Query=.AND.STMAS->SUPCOD#'S0001' หรือ Query=.AND.STMAS->SUPCOD<>'S0001'

[/color]

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: จันทร์ ก.ย. 07, 2015 6:14 pm
โดย ppitaksu
[quote=&quot;CK&quot;]
Version ที่ผมใช้อยู่เป็น version พิเศษที่คุณ CK จัดมาให้ทดลอง features ใหม่ๆ ที่ผมได้เสนอไป พวก shortcut คีย์ลัด hotkeys เมนูหลักที่เข้าถึงด้วยตัวเลข อะไรพวกนั้นน่ะครับ


สำหรับ features พิเศษ และ hotkeys ต่าง ๆ ที่ผมทำไปให้ลองทดสอบนั้น   ปัจจุบันผมได้เพิ่มเข้าไปในโปรแกรมตัวปกติทุกตัวเรียบร้อยแล้วครับ
ให้อัพเดรทโปรแกรมล่าสุดจากหน้าเว็ปไปใช้ได้เลยนะครับ
:)
[/quote]

ขอบคุณครับ ผมดาวน์โหลดมาอัพเดทแล้วครับ ฟินเลยทีนี้

Re: Filter ที่ยาวๆ จะต่อเงื่อนไขให้จบได้อย่างไรครับ

โพสต์โพสต์แล้ว: จันทร์ ก.ย. 07, 2015 6:24 pm
โดย ppitaksu
[quote=&quot;suchai&quot;]
ผมลองทดสอบแล้ว ให้ผลเหมือนกัน และก็เป็นความรู้ใหม่อีกนิดนึง

[color=red]Filter=.NOT.(STMAS->SUPCOD='S001')


สามารถย้ายไปเป็น

Query=.AND.(.NOT.(STMAS->SUPCOD='S001'))

ผมรู้แล้วว่า ทำไมนิสัยผมถึงไม่ชอบ Filter เพราะผมไม่ชอบคำว่า .NOT. ถ้าเลือกได้ต้อง  .OK. เท่านั้น ดังนั้นการเขียน Query ก็ยังคงเป็น

Query=.AND.STMAS->SUPCOD#'S0001' หรือ Query=.AND.STMAS->SUPCOD<>'S0001'

[/color]

[/quote]

ขอบคุณสำหรับการติดต่อประสานงานไปยังโปรแกรมเมอร์ และการให้ไอเดียดีๆของคุณสุชาย มากๆเลยครับ เท่ากับว่าเราได้ขยายขอบเขตความสามารถโปรแกรมออกไปได้อีกก้าวนึงเลยครับ

ผมยังคงไม่แน่ใจว่า ถ้าเราใช้
[color=red]Query=.AND.(.NOT.(STMAS->SUPCOD='S001'))

แล้วต่อลงมาด้วย
Query=.AND.(.NOT.(STMAS->SUPCOD='S002'))
ต่อลงไปเรื่อยๆ ในแบบนี้
เซทของข้อมูล จะเป็น เซทเดียวกันกับ Filter บรรทัดเดียวรวดเลยมั๊ยครับ
เดี๋ยวผมจะไปทดลอง แต่ที่แน่ๆตอนนี้ผมมี 500 ตัวอักษรไว้เป็นหลักประกันแล้วที่สามารถใช้ได้
ขอบคุณครับ[/color]