8/26/2011

Code แบบ ย่อ


a = "1"
b = "2"

a += b
a = "12"  ความหมายคือ  a = a + b
b = "2"
a -= b    ความหมายคือ a = a-b
a *=b     ความหมายคือ a = a*b
---------------------------------------------------
i++;  คือ ค่า i +1 ไปเรื่อย ๆ แต่ i ต้องมีการประกาศตัวแปร ไว้ก่อน เช่น i = 1 ; เป็นต้น
++i;  คือ + ค่า i ไปทีล่ะ 1 ไม่ต้องมีการประกาศตัวแปร ใช้ได้เลย เช่นใน PHP จะใช้เป็น ++$i; เป็นต้น

---------------------------------------------------
ใน Axapta ใช้บ่อย
a += b ? x1 : x2    ความหมายคือ ? ค่าที่เรายังไม่รู้ถ้ามีค่า ให้เอา X1 แต่ถ้าไม่มี ให้เอาค่าจาก X2

Axapta X++: ยอด Physical Inventory ติดลบ

เพราะว่า มีการ Set ใน Item ติดลบไว้ปกติจะ Set เป็น DEF แต่ถ้า Set เป็น NEG คือติดลบได้

เข้าไปที่ Item ---> General ที่ Inventory model group ตามรูป



set : NEG Tempory Use for Kit Set (ใช้ชั่วคราวใน T&L Phase) ให้ติดลบได้
DEF Defualt Inventory Model Group ห้ามติดลบ


8/24/2011

PHP : หาว่าปีนั้นมีกี่วัน 365 หรือ 366


Format :
$ตัวแปร = date("L");
return = 0 or 1
1=ปีที่มี 366 วัน , 0=ปีที่มี 365 วัน

นำค่าไปใช้
if($ตัวแปร = 0){
$ตัวแปร = 365;
} else {
$ตัวแปร = 366;
}

Exemple :
$DateInYear = date("L");
if($DateInYear = 0){
$DateInYear = 365;
} else {
$DateInYear = 366;
}

8/20/2011

VB.Net : สลับสีใน ListView

Format :
Use code in Loop while :
                       ชื่อListView.View = View.Details
                        ชื่อListView.GridLines = True
                        For i As Integer = 0 To ชื่อListView.Items.Count - 1 Step 1 'Code การสลับสีใน listview
                            If i Mod 2 = 0 Then
                                ชื่อListView.Items(i).BackColor = Color.White
                            Else
                                ชื่อListView.Items(i).BackColor = Color.Linen
                            End If
                        Next i


Exemple :

                       MyLV.View = View.Details
                        MyLV.GridLines = True
                        For i As Integer = 0 To MyLV.Items.Count - 1 Step 1 'Code การสลับสีใน listview
                            If i Mod 2 = 0 Then
                                MyLV.Items(i).BackColor = Color.White
                            Else
                                MyLV.Items(i).BackColor = Color.Linen
                            End If
                        Next i

VB.Net : Switch case in vb.net

format :
Select Case ..... : ตัวแปรที่จะเช็ค
Case .... : เป็นอะไรเช่น 0 1 2 3....
..... : ให้ทำงานนี้
Case 1
..... : ให้ทำงานนี้
Case 2
..... : ให้ทำงานนี้
Case 3
..... : ให้ทำงานนี้
End Select

Exemple :
Select Case DataTab.SelectedIndex
Case 0
Call RefreshGrid(DataGridView1)
Case 1
Call ReloadGrid(SQL)
Case 2
Call ReloadGrid1(SQL)
Case 3
Call ReloadGridSales(SQL)
End Select

8/19/2011

PHP Function of String


ฟังก์ชั่นทางด้านข้อความ

ฟังก์ชั่น ความหมาย
Chop() ตัดช่องว่างท้ายข้อความออกไป
Chr() แปลงค่า ASCII เป็นตัวอักษร
echo() แสดงผลข้อความ
explode() แยกข้อความโดยใช้เครื่องหมายแรก
ereg_replace() แทนที่ข้อความที่พบด้วยคำที่ต้องการ
eregi_replace() แทนที่ข้อความที่พบด้วยคำที่ต้องการ โดยไม่สนใจตัวพิมพ์เล็กพิมพ์ใหญ่
flush() เคลียร์บัฟเฟอร์
htmlspecialchars() แสดงแท็ก HTML ในเว็บเพจ
implode() รวมอาร์เรย์เป็นข้อความ
join() รวมอาร์เรย์เป็นข้อความ
Itrim() ตัดข้อความด้านหน้าข้อความออกไป
Ord() แปลงตัวอักษรเป็นรหัส ASCII
parse_str() รับค่าข้อความไว้ในตัวแปร
print() แสดงผลข้อความ
printf() แสดงผลข้อความที่มีรูปแบบ
setlocale() ปรับค่าข้อมูลท้องถิ่น
similar_text() คำนวณความเหมือนระหว่างข้อความทั้งสอง
sprintf() ให้ค่าข้อความที่มีรูปแบบ
strchr() ตัดข้อความบางส่วนตั้งแต่ตัวแรกที่พบจนถึงท้ายสุดเพื่อนำมาใช้
strip_tags() ตัดแท็ก HTML และ PHP จากข้อความ
stristr() ตัดข้อความบางส่วนตั้งแต่ตัวแรกที่พบจนถึงท้ายสุดเพื่อนำมาใช้โดยไม่สนใจเรื่องตัวพิมพ์เล็กตัวพิมพ์ใหญ่
strlen() ขนาดความยาวข้อความ
strpos() หาตำแหน่งแรกที่ค้นพบข้อความที่ต้องการ
strrchr() ตัดข้อความบางส่วนตั้งแต่ตัวสุดท้ายที่พบจนถึงท้ายสุดเพื่อนำมาใช้งาน
str_repeat() แสดงข้อความซ้ำตามจำนวนครั้งที่ต้องการ
strrev() เรียงสลับข้อความจากหลังไปหน้า
strrpos() หาตำแหน่งสุดท้ายที่ค้นพบข้อความที่ต้องการ
strstr() ตัดข้อความบางส่วนตั้งแต่ตัวแรกที่พบจนถึงท้ายสุดเพื่อนำมาใช้
strtolower() ทำให้ข้อความเป็นตัวพิมพ์เล็ก
strtoupper() ทำให้ข้อความเป็นตัวพิมพ์ใหญ่
str_replace() เปลี่ยนข้อความที่พบด้วยคำที่ต้องการ
strtr() แปลงตัวอักษรที่แน่นอน
substr() ตัดตัวอักษรที่ต้องการใช้ออกมา
substr_replace() เปลี่ยนข้อความภายในส่วนของข้อความ
trim() ตัดช่องว่างด้านหน้าและด้านหลังข้อความ
ucfirst() เปลี่ยนอักษรตัวแรกของข้อความเป็นตัวพิมพ์ใหญ่
ucwords() เปลี่ยนอักษรตัวแรกของแต่ละคำในข้อความ

ตัดช่องว่างหน้า-หลังข้อความด้วย Ltrim(), Chop() และ Trim()
รูปแบบของฟังก์ชั่น
Ltrim(Text)
Chop(Text)
Trim(Text)

  1. <?php
  2. $Text= "   Rajabhat Institute Rambhaibarni   ";
  3. echo "ข้อความ "   Rajabhat Institute Rambhaibarni   "<br><hr>";
  4. echo 'Function Ltrim() :"".Ltrim($Text).""<br>";
  5. echo "Function Chop() :"".Chop($Text).""<br>";
  6. echo "Function Trim() :"".Trim($Text).""<br>";
  7. ?>


แปลงค่าตัวอักษรกับรหัส ASCII ด้วย Chr() และ Ord()
รูปแบบของฟังก์ชั่น
Chr(ascii-value)
Ord(string)
ascii-value เป็นข้อมูลชนิดตัวเลข หมายถึง คารหัส ASCII ที่ต้องการแปลงเป็นตัวอักษร
string เป็นข้อมูลชนิดตัวเลข หมายถึง ข้อความที่ต้องการนำมาแปลงเป็นรหัส ASCII

  1. <?php
  2. echo "รหัส 65 ใช้ฟังก์ชั่น Chr(65) :".chr(65)."<br>";
  3. echo "รหัส 161 ใช้ฟังก์ชั่น Chr(161) :".chr(161)."<br><hr>";
  4. echo "อักษร A ใช้ฟังก์ชั่น Ord(A) :".ord(A)."<br>";
  5. echo "อักษร ก ใช้ฟังก์ชั่น Ord(ก) :".ord(ก)."<br>";
  6. ?>


การแบ่งข้อความออกจากกันด้วย Explode() หรือ Split()
รูปแบบของฟังก์ชั่น
explode(separator, string)
split(separator, string)
separator คือเครื่องหมายแยก
string คือข้อความ

  1. <?php
  2. $cake = "ชิ้นที่ 1  ชิ้นที่ 2  ชิ้นที่ 3  ชิ้นที่ 4  ชิ้นที่ 5";
  3. $pieces = explode ("", $cake);
  4. echo "ฟังก์ชั่น explode() <br>";  //Function explode
  5. For ($I=0; $I<=5; $I++)
  6.      {
  7.           echo $pieces[$I]."<br>";
  8.      }
  9. $pieces1 =split("", $cake);  //Function split
  10. echo "ฟังก์ชั่น split() <br>";
  11. For ($I=0; $I<=5; $I++)
  12.      {
  13.           echo $pieces1[$I]."<br>";
  14.      }
  15. ?>


การรวมข้อความจากอาร์เรย์เป็นข้อความด้วย Implode() หรือ Join()
รูปแบบของฟังก์ชั่น
implode(glue, $array)
join(glue, $array)
glue คือเครื่องหมายที่จะให้ข้อความรวมกัน
array คือตัวแรอาร์เรย์ที่จะนำข้อความมารวมกัน

  1. <?php
  2. $pieces[0] = "เค้กชิ้น 1";
  3. $pieces[1] = "เค้กชิ้น 2";
  4. $pieces[2] = "เค้กชิ้น 3";
  5. $pieces[3] = "เค้กชิ้น 4";
  6. $pieces[4] = "เค้กชิ้น 5";
  7. $cake =implode("", $pieces); //Function Implode
  8. echo "ฟังก์ชั่น Implode() <br>";
  9. echo $cake;
  10. $cake1 =join("", $pieces); //Function join
  11. echo "<Hr>ฟังก์ชั่น Join() <br>";
  12. echo $cake1;
  13. ?>


ตัดข้อความบางส่วนมาใช้ด้วย strchr(), strrchr(), stristr() และ strstr()
รูปแบบของฟังก์ชั่น
strchr(haystack, niddle)
strrchr(haystack, niddle)
stristr(haystack, niddle)
strstr(haystack, niddle)
haystack เป็นข้อมูลชนิดข้อความ หมายถึง ข้อความทั้งหมดซึ่งเราต้องการนำมาค้นหาข้อความย่อย
niddle เป็นข้อมูลชนิดข้อความ หมายถึง ตัวอักษรหรือข้อความย่อยที่จะค้นหาว่าอยู่ที่ตำแหน่งใดใน haystack

  1.  
  2. <?php
  3. $string = "Rajabhat Institute Rambhaibarni";
  4. echo strchr($string,R)."<br>";
  5. echo strrchr($string,R)."<br>";
  6. echo stristr($string,R). "<br>";
  7. echo strstr($string,R)."<br>";
  8. ?>


การหาขนาดความยาวข้อความด้วย strlen()
รูปแบบของฟังก์ชั่น
Strlen(string)

  1. <?php
  2. $string = "Rajabhat Institute Rambhaibarni";
  3. echo "ความยาวของข้อความ $string มีค่าเท่ากับ".strlen($string). "<br>";
  4. ?>


การหาตำแหน่งตัวอักษรที่ค้นพบด้วย strpos() และ strrpos()
รูปแบบของฟังก์ชั่น
strpos(haystack, niddle)
strrpos(haystack, niddle)
haystack เป็นข้อมูลชนิดข้อความ หมายถึง ข้อความทั้งหมดซึ่งเราต้องการนำมาค้นหาข้อความย่อย
niddle เป็นข้อมูลชนิดข้อความ หมายถึง ตัวอักษรหรือข้อความย่อยที่จะค้นหาว่าอยู่ที่ตำแหน่งใดใน haystack

  1. <?php
  2. $string ="Rajabhat Institute Rambhaibarni";
  3. echo "i ตัวแรกที่พบในข้อความ $string อยู่ตำแหน่ง :".strpos($string,i)."<br>";
  4. echo "i ตัวสุดท้ายที่พบในข้อความ $string อยู่ตำแหน่ง :".strrpos($string,i)."<br>";
  5. ?>


การแสดงข้อความซ้ำหลายรอบด้วย str_repeat()
รูปแบบของฟังก์ชั่น
Str_repeat(string, multiplier)
  1. <?php
  2. $string = "Rajabhat Institute Rambhaibarni,";
  3. echo "แสดงข้อความ $string จำนวน 5 ครั้ง<hr>";
  4. echo str_repeat($string,5)."<br>";
  5. ?>


การเรียงสลับข้อความจากหลังไปหน้าด้วย strrev()
รูปแบบของฟังก์ชั่น
Strrev(string)
  1. <?php
  2. $string = "Rajabhat Institute Rambhaibarni";
  3. echo "ข้อความ $string เมื่อใช้ฟังก์ชั่น strrev() <br>";
  4. echo "ผลที่ได้ :".strrev($string);
  5. ?>

  1. การแปลงเป็นตัวพิมพ์เล็กพิมพ์ใหญ่ด้วย strtolower() และ strtoupper()

รูปแบบของฟังก์ชั่น
strtower(string)
strtoupper(string)
string เป็นข้อมูลชนิดข้อความ หมายถึง ข้อมูลทั้งหมดที่ต้องการนำมาแปลง
  1. <?php
  2. $string = "Rajabhat Institute Rambhaibarni";
  3. echo "ข้อความ $string เมื่อใช้ฟังก์ชั่น strtolower()<br>";
  4. echo "ผลที่ได้ ".strtolower($string)."<br>";
  5. echo "ข้อความ $string เมื่อใช้ฟังก์ชั่น strtoupper()<br>";
  6. echo "ผลที่ได้ ".strtolower($string)."<br>";
  7. ?>



การใช้ตัวพิมพ์ใหญ่หน้าข้อความด้วย ucfirst() หรือ ucwords()
รูปแบบของฟังก์ชั่น
Ucfirst(String)
Ucwords(String)
  1. <?php
  2. $string = "rajabhat institute rambhaibarni";
  3. echo "ข้อความ $string เมื่อใช้ฟังก์ชั่น ucfirst()<br>";
  4. echo "ผลที่ได้".ucfirst($string)."<br>";
  5. echo "ข้อความ $string เมื่อใช้ฟังก์ชั่น ucwords()<br>";
  6. echo "ผลที่ได้".ucwords($string)."<br>";
  7. ?>


การแทนที่คำด้วย ereg_replace หรือ eregi_replace() หรือ str_replace()
รูปแบบของฟังก์ชั่น
Ereg_replace(needle, string, haystack)
Eregi_replace(needle, string, haystack)
Str_replace(needle, string, haystack)
  1. <?php
  2. $needle = "ชื่อ :";
  3. $string = "Name :";
  4. $haystack = "สถาบันราชภัฏรำไพพรรณี";
  5. echo "Function ereg_replace() =".ereg_replace($needle, $string, $haystack)."<br>";
  6. echo "Function eregi_replace() =".eregi_replace($needle, $string, $haystack)."<br>";
  7. echo "Function str_replace() =".str_replace($needle, $string, $haystack)."<br>";
  8. ?>


การตัดตัวอักษรที่ต้องการใช้ออกมาด้วย substr()
รูปแบบของฟังก์ชั่น
substr(string, start, [length]);
string เป็นข้อมูลชนิดข้อความ หมายถึงข้อความทั้งหมดที่ต้องการนำมาตัด
start เป็นข้อมูลชนิดตัวเลข หมายถึงตำแหน่งเริ่มตัด (หากค่าตัวเลขเป็นติดลบ หมายถึง นับตำแหน่งจากหลังสุดมาข้างหน้า
length เป็นข้อมูลชนิดตัวเลข หมายถึงจำนวนตัวอักษรที่ต้องการตัด ซึ่งจะระบุหรือไม่ก็ได้ หากไม่ระบุหมายถึงให้ตัดออกมาตั้งแต่ตำแหน่ง start ไปจนจบข้อความ string

  1. <?php
  2. $string = "Rajabhat Institute Rambhaibarni";
  3. echo substr($string,3)."<br>";
  4. echo substr($string,15,3)."<br>";
  5. echo substr($string,18,12)."<br>";
  6. echo substr($string,-6,7)."<br>";
  7. ?>
  8.  

PHP : DateDiff/Time Diff ฟังก์ชั่นเกี่ยวกับการหาค่าต่างของวันที่และเวลา


Use Function :

<?php
     function DateDiff($strDate1,$strDate2)
     {
                return (strtotime($strDate2) - strtotime($strDate1))/  ( 60 * 60 * 24 );  // 1 day = 60*60*24
     }
     function TimeDiff($strTime1,$strTime2)
     {
                return (strtotime($strTime2) - strtotime($strTime1))/  ( 60 * 60 ); // 1 Hour =  60*60
     }
     function DateTimeDiff($strDateTime1,$strDateTime2)
     {
                return (strtotime($strDateTime2) - strtotime($strDateTime1))/  ( 60 * 60 ); // 1 Hour =  60*60
     }
 
     echo "Date Diff = ".DateDiff("2008-08-01","2008-08-31")."<br>";
     echo "Time Diff = ".TimeDiff("00:00","19:00")."<br>";
     echo "Date Time Diff = ".DateTimeDiff("2008-08-01 00:00","2008-08-01 19:00")."<br>";
?>



PHP : เปิดหน้าใหม่ กำหนดขนาดหน้า ตามที่ต้องการ


รูปแบบคำสั่ง

Formate :

<a href='#'  onClick='window.open(" ชื่อไฟล์ที่ต้องการแสดง?ค่าที่ต้องการส่งไป=<!--%VALUES%--& gt;","mywindow","location=0,status=1,scrollbars=1,width=800,height=750" );'><!--%TEXT ที่ต้องการคลิ๊ก%-->


Exemple :

<a href='#'  onClick='window.open("ams_check_spec.php?BARCODE=<!--%AMS_BARCODE%-->","mywindow","location=0,status=1,scrollbars=1,width=800,height=750" );'><!--%AMS_BARCODE%--></a>

PHP : Textarea ให้อ่านได้อย่างเดียว

Formate :
<textarea name="ชื่อ" rows="แถว" cols="กว้าง" readonly="readonly"> ข้อมูลที่ต้องการแสดง </textarea>

Exemple :
<textarea name="Detail" rows="5" cols="50" readonly="readonly"><!--%AMS_SPC%--></textarea>

8/17/2011

OpenOffice Calc : แสดงผลลัพธ์ออกมาเป็นสูตร ไม่ได้แสดงผลเป็นผลลัพธ์การคำนวณ

โปรแกรม Calc แสดงผลลัพธ์ออกมาเป็นสูตร ไม่ได้แสดงผลเป็นผลลัพธ์การคำนวณ จะสามารถแก้ไขได้อย่างไร
การ ที่โปรแกรมไม่แสดงผลออกมาเป็นคำตอบของการคำนวณนั้น เพราะรูปแบบการแสดงผลลัพธ์จากสูตรคำนวณได้ถูกตั้งค่าต่างไปจากค่าเริ่มต้น ของระบบ

ส่วนของการปรับค่าโปรแกรมให้สามารถแสดงผลลัพธ์ของสูตรออกมาเป็นตัวเลขได้เหมือนเดิม สามารถทำได้ดังนี้ ที่เมนูหลักเลือก Tools > Options


เลือก OpenOffice.org Calc - View ที่ Display ให้คลิกเอาเครื่องหมายที่ Formula ออก


ผลลัพธ์ที่ได้

Axapta X++ : การเพิ่มสิทธ์ให้กับ User ใน Groups

1. ที่ใช้ดู และ Add สิทธิ์ ให้กับ User ต่าง ๆ เข้าไปที่
Administration ---> Users ตามรูป

2. ที่ใช้ในการกำหนด สิทธิ์ให้กับ Group นั้น ๆ ว่ามีสิทธิ์ทำอะไรบ้าง เข้าไปที่ Administration ----> Setup ---->User groups ตามรูป 3. การกำหนดสิทธิ์ให้กับ Group ต่าง ๆ ทำได้โดยคลิกที่ Permission แล้วเลือก Menu หรือ Table ที่ต้องการกำหนดสิทธ์ แล้วก็ Set value ด้านขวามือให้เป็น No access or full or view อื่น ๆ ตามรูป

8/16/2011

Axapta X++ : Info in Axapta

เป็นการแสดง log info ใน Axapta เพื่อแสดงข้อมูล นั้นๆ ออกมาในรูปแบบของ Info log ดังรูป


ส่วนมากที่ใช้ จะอยู่นอกเหนือจาก case ที่เรา ไม่ได้ระบุไว้ คือนอกเหนือจากนั้นให้มัน info log ออกมาให้เราดู หรือแสดงข้อมูลที่
ต้องการเปรียบเทียบ ตามแต่วัตถุประสงค์ของการใช้

รูปแบบ
info(strfmt("%1",ค่าที่ต้องการแสดง)); :: เป็นสีน้ำเงิน แสดงข้อมูล
error(strfmt("%1 : %2",ค่าที่ต้องการแสดง1,ค่าที่ต้องการแสดง2)); :: เป็นสีแดง แสดงข้อมูล Error
warning(strfmt("%1 : %2",ค่าที่ต้องการแสดง1,ค่าที่ต้องการแสดง2)); :: เป็นสีเหลือง แสดงข้อมูล อันตรายแจ้งเตือน
setprefix(strfmt("%1 : %2",ค่าที่ต้องการแสดง1,ค่าที่ต้องการแสดง2));  :: แสดงข้อมูล ใน รูปเข็มมุดปักกระดาษ


เช่น switch case เสร็จ
default :
info(strfmt("%1",ข้อมูลที่ต้องการแสดง));
break;

Axapta X++ : SQL Order By Join Table

การสั่งเรียงข้อมูลเมื่อมีการ Join table
สามารถทำได้โดย

   WHILE
    SELECT * FROM Table1
    ORDER BY Field1, Field2
    JOIN  Table2
    ORDER BY Field1, Field2
    WHERE เงื่อนไข
{


}

8/15/2011

VB.Net ศิลปะการใช้ If (Art of If Statement)

1. แบบมี End If (หรือแบบหลายบรรทัด)
1.1) If ... End If
รูปแบบนี้ เราจะตรวจสอบและเขียนคำสั่ง กรณีผลลัพธ์ของเงื่อนไขเป็น True เท่านั้น เช่น

'กรณีผลลัพธ์ของเงื่อนไขเป็น False คำสั่งถัดไปจะเป็น End If ทันที
If ValueA > 2 Then
ValueA -= 1
ValueB = 3
End If

1.2) If ... Else ... End If
รูปแบบนี้ เราจะตรวจสอบและเขียนคำสั่ง ที่ผลลัพธ์ของเงื่อนไขเป็นทั้ง True และ False เช่น

If ValueA <> 3 Then
ValueB += 1
Else
ValueB -= 1
End If

1.3) If ... ElseIf ... Else ... End If
รูป แบบนี้จะให้เราใส่เงื่อนไขเข้าไปหลายๆ ตัวได้ คล้ายๆ Select Case ส่วน Else จะใสหรือไม่ก็ได้ แต่ถ้าไม่ใส่จะเป็นการเขียนโปรแกรมที่ไม่ดี เพราะกรณีเงื่อนไขใดๆ ไม่มีผลลัพธ์เป็น True เลย ก็อาจจะเกิดปัญหา logic error หรือ flow ไม่เป็นไปตามต้องการก็ได้ จึงควรเขียนดักไว้ก่อน เพื่อให้ถูกหลักการเขียนโปรแกรมที่ดี (อาจมีเหตุการณ์แปลกๆ ที่ทำให้มี input data แปลกๆ เข้ามาในโปรแกรมเรา กันไว้ดีกว่าแก้ครับ) ตัวอย่างการใช้

If MyCountry = "Thailand" Then
MyCountry = "ประเทศไทย"
ElseIf MyName = "Japan" Then
MyCountry = "ประเทศญี่ปุ่น"
ElseIf MyName = "China" Then
MyCountry = "ประเทศจีน"
Else
MyCountry = "บุคคลไร้สัญชาติ"
End If

2. แบบไม่มี End If (หรือแบบบรรทัดเดียว)
2.1) If ... Then ...
เป็น รูปแบบที่สั้นที่สุด และหวังผลให้ทำงานเฉพาะผลลัพธ์ของเงื่อนไขที่เป็น True เท่านั้น แต่คำสั่งหลัง Then มีได้แค่ 1 statement เท่านั้น ตัวอย่างเช่น

If Number = 10 Then MsgBox("Value is " & Number)

2.2) If ... Then ... Else ...
รูป แบบ If บรรทัดเดียว ที่ทำงานกับผลลัพธ์ชองเงื่อนไข ทั้ง True และ False แต่คำสั่งหลัง Then และ Else ก็ยังต้องมีเพียง 1 statement เท่านั้น เช่น

If Score <= 49 Then Grade = "S" Else Grade = "P"

2.3) If ... Then ... : ... : ...
รูป แบบ If บรรทัดเดียว ที่ทำงานกับผลลัพธ์ชองเงื่อนไขที่เป็น True แต่สามารถเขียนหลายๆ statement หลัง Then ได้ โดยมีเครื่องหมานโคล่อน (:) ระหว่าง statement

If Sex = True Then SexString = "Man" : MsgBox("Sex is " & SexString)

2.4) If ... Then ... : ... : ... Else ... : ... : ...
รูป แบบที่เหมือนข้อ 2.3 แต่ทำงานกับผลลัพธ์ชองเงื่อนไข ทั้ง True และ False และเขียนหลายๆ statement หลังตรวจสอบการเงื่อนไข ได้เหมือนกัน

If Value > 3 Then X *= 2 : Y *= 3 Else X *= 3 : Y *=2 : Z *= 2

3. แบบ IIf (อ่านว่า If and only If)
รูป แบบนี้จะมีการ return ค่าหลังจากตรวจสอบเงื่อนไข ซึ่งเขียนได้ในบรรทัดเดียวด้วย รูปแบบเป็นดังนี้ IIF(เงื่อนไข, ค่าเมื่อเงื่อนไขเป็นจริง, ค่าเมื่อเงื่อนไขเป็นเท็จ) ตัวอย่างเช่น

'คำสั่ง IIf จะทำงานเหมือน call function
Price = IIf(IsMember, Price - (Price * 0.1), Price - (Price * 0.05))

เทคนิคเพิ่มเติม
เพื่อ ให้การเขียนแต่ละบรรทัดไม่ยาวเกินไป เราอาจจะใช้เครื่องหมาย underscore (_) เพื่อขึ้นบรรทัดใหม่ แต่ compiler จะตีความเป็นเหมือนบรรทัดเดียว ทำให้โค้ดมีระเบียบและมีประสิทธิภาพดี เช่น

'โค้ดข้างล่างนี้ มีรูปแบบเหมือนข้อ 2.1
If (CustomerItem => 3) Or (CustomerTotal > 2000) _
Or (CustomerBirthday = Now) Or (IsMember) Then _
Price -= Price * 0.1

Axapta X++ : ตัดค่าตัวเลขของเดือนแต่ล่ะเดือน

You use function mthOfyr

Syntax :
Int MthOfYr (date date)

Description :
Returns the number of the month in which the date specified by date appears.

Example :
MthOfYr(02\02\1998)
returns the value '2'

Note :
January is month number 1
February in month number 2 and other month ... respectively

OpenOffice Calc : ทำตัวอักษรยก หรือตัวห้อย

ใน Calc อยากทำตัวอักษรยก (superscript) หรือตัวห้อย (subscript) ได้หรือไม่

การทำตัวอักษรยกและตัวห้อยให้กำหนดค่าโดยไปที่คำสั่ง

Format >Character ที่ tab Font position เลือก super script สำหรับตัวอักษรยก




















หากต้องการให้เป็นตัวอักษรห้อยให้เลือก subscript แทน





Axapta X++ เก็บค่า string มาต่อกันไปเรื่อย ๆ

            str      sNarration ,sLastName  ประกาศตัวแปร
           
            sNarration = "" ;   Reset ค่าให้เป็นค่ีาว่างก่อน ไม่งั่นมันจะ ยาวไปเรื่อย ๆ
            sLastName = "" ;
                WHILE
                SELECT * FROM ... Table
                WHERE ... เงื่อนไข
                {
                     sNarration = TableVendInvoiceTrans.Name ;   ค่าที่ต้องการเก็บใหม่
                     if( sLastName == "" ){
                        sLastName = strfmt("%1", sNarration);
                     } else {
                        sLastName = strfmt("%1, %2", sLastName, sNarration); เอามาต่อไปเรื่อย ๆ ใช้ , คั่น
                     }
                }

8/10/2011

การ backup email ของ thunderbird

Thunderbird Profile , การ backup email setting ของ thunderbird

สำหรับการ format และลง windows ใหม่ สิ่งที่ต้องทำก่อนคือการ backup ข้อมูลต่างๆ ใน drive C ซึ่งเมล และสิ่งต่างๆ ที่ตั้งค่าไว้ใน setting ตัว thunderbird เองสามารถทำได้ง่ายดายจริงๆ 3 ขั้นตอนจบ

1. copy profile (ก่อน format)
ไปที่เมนู tools->Account
Click ที่ Server Settings , ที่ Local Directory แสดง Path ที่เก็บ Profile

ตัวอย่าง
"C:\Users\Administrator\AppData\Roaming\Thunderbird\Profiles\u0m9vw53.default\ImapMail\imap.gmail.com"

ให้ copy path ตามนี้ "C:\Users\Administrator\AppData\Roaming\Thunderbird\Profiles"
เปิด Mycomputer ขึ้นมาเอา path ไปวางกด enter
แล้วก็ copy "u0m9vw53.default" เก็บไว้
folder นี้คือ profile ทั้งหมด


2. เอาที่ copy ไว้มาวางที่เดิม (หลังลง Windows และติดตั้ง Thunderbird แล้ว)
ถ้าหาไม่เจอ ก็ set mail อะไรก็ได้ ขึ้นมาแล้วก็เข้าไปดูตามขั้นตอนที่หนึ่ง ก็จะได้ profile path แล้ว

3. แก้ไข Profile.ini
ที่ path เราวาง profile ไว้ ให้ถอดออกไป 1 directory จะเจอ profiles.ini ("C:\Users\Administrator\AppData\Roaming\Thunderbird")
edit ด้วย notepad แก้ไข path ใน profile0 ให้ถูกต้อง

ตัวอย่าง
[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=1
Path=Profiles/u0m9vw53.default
แก้เฉพาะตรงตัวหนังสือที่เป็นสีน้ำเงิน เป็นชื่อ Folder ที่เรา Copy มาเท่านี้ทุกอย่างที่เคยใช้งาน ใน Thunderbird ก็จะเหมือนเดิมไม่ต้อง Set อะไรเพิ่มเติม

8/07/2011

วิธี Download www.saveufile.com โดยใช้โปรแกรม FlashGet เร็วกว่าโหลดธรรมดา

ขั้นตอนการ Download  www.saveufile.com โดยใช้โปรแกรม FlashGet เร็วกว่าโหลดธรรมดา
การทำแบบนี้อาจทำได้จาก web downlond อื่น ๆ แต่ยังไม่ได้ลองน่ะครับต้องลองดู อาจจะได้ครับ

1. เข้าไปที่ Link Download ตามปกติ ใส่รหัสที่เห็น คลิ๊ก Download เลือก Save file ขั้นตอนตามปกติ

2. จะขึ้นหน้า Download ของ Firefox หรือ IE ขึ้นมาดังรูป

3. คลิ๊กขวาที่ไฟล์ที่ Download กดหยุดการ Download ดังรูป


4. คลิกขวาที่ชื่อไฟล์ที่ Download เลือก Copy Download Link ดังรูป


5. เปิด FlashGet หรือ Internetdownloadmanager ขึ้นมาเลือก New แล้ววาง URL ที่ Copy มาจาก ข้อ 2 เสร็จแล้ว กด Download เป็นอันเสร็จ


6. ความเร็วที่ได้ เร็วและมากว่าตอนโหลด ธรรมะดามาก เท่า ๆ หรือมากกว่า Mediafire ด้วยบางครั้ง

8/06/2011

Axapta X++ :: เขียนข้อมูลจาก Axapta ลงไฟล์ Text หรือ Csv

เขียนข้อมูลจาก Axapta ลงไฟล์ Text หรือ Csv

1. ประกาศตัวแปร
AsciiIO             myFile;
;

2. ใช้คำสั่งด้านล่างนี้บน SQL ที่ SELECT ข้อมูล  และระบุ ที่เก็บและชื่อไฟล์ที่มันจะสร้างขึ้น
myFile=new AsciiIO("c:\\min.txt","a");

3. ใช้คำสั่งยัดตัวแปรใส่ในไฟล์ ดังนี้
myfile.write(strfmt("%1",..ตัวแปรหรือค่าที่ต้องการเขียน...));
เช่น  myfile.write(strfmt("%1",TableSalesLine.SalesId));

Axapta X++ :: Static Method

คือ method ที่สามารถเรียกใช้งานโดยเรียกผ่านชื่อ Object ได้เลย โดยไม่ต้องประกาศตัวแปร
การเรียกใช้คือ ชื่อตามด้วย :: เช่น InventTable::find
เหมาะสำหรับการทำงานที่ต้องเรียกใช้บ่อย ๆ


ตัวอย่าง static method
static VendDueDate find(VendPaymDayId _Term, TransDate _Date)
{
    VendDueDate vendDueDate;
    ;
    if (_Term && _Date){
         SELECT * FROM vendDueDate
         WHERE  vendDueDate.FromDate <= _Date
             && vendDueDate.ToDate >=  _Date
             && vendDueDate.PaymentTerms ==  _Term;
    }
    return vendDueDate;
}

Axapta X++ :: Run คำสั่ง SQL ตรง ๆ ใน Axapta

static void Job3(Args _args)
{
    LogInProperty   Lp = new LogInProperty();
    OdbcConnection  myConnection;
    Statement       myStatement;
    ResultSet       myResult;
    str             sqlQuery;
;
 
    sqlQuery = 'SELECT TOP 10 * FROM CustTable ORDER BY NewID()';
 
    LP.setServer("Server");
    LP.setDatabase("db");
    Lp.setUsername("user");
    Lp.setPassword("password");
 
    try{
        myConnection = new OdbcConnection(LP);
    }
    catch{
        info("Check username/password.");
        return;
    }
 
    myStatement = myConnection.createStatement();
    myResult = myStatement.executeQuery(sqlQuery);
 
    while (myResult.next()){
        box::info(myResult.getString(1));
    }
}

Axapta X++ :: สำหรับให้ถามเพื่อยืนยัน

void clicked()
{
    DialogButton    result;
    ;
    result = Box::yesNo("คุณแน่ใจหรือไม่ ?",DialogButton::No);
    if(result == DialogButton::Yes) {
      // คำสั่งที่จะให้ทำเมื่อผู้ใช้ตอบยืนยัน
    }
    super();
}



หรือใช้คำสั่งแบบไม่ต้องประกาศตัวแปร


if(box::yesNo("Do you want something to happen?",
      dialogbutton::Yes) == dialogbutton::Yes)
   {        
           somethingHappens = this.callTosSomeReturnMethod();
    }

Axapta X++ :: DynamicHeight Replacement

code สำหรับใช้แทน property DynamicHeight ที่มีไว้สำหรับการแสดงผลหลายบรรทัด (เป็น bug ของ axapta) ใน Reports

void executeSection()
{
    ReportStringControl   ctrlBatchReserved   = this.ControlName('batchReserved');
// Control ต้อง set ให้ AutoDeclare ด้วย
    str                   tmpStr;
    int                   i;
    ;
 
    tmpStr = inventJournalTrans.batchReserved(); //มี \n คั่นสำหรับขึ้นบรรทัดใหม่
    while(true){ // วนลูปนับบรรทัด
        i++;
        if(strLine(tmpStr, i) == '') break;
    }
 
    ctrlBatchReserved.height(i,Units::Char); // กำหนดความสูงตามบรรทัดที่นับได้
}

Axapta X++ :: การใช้ตัวแปรใน SQL Statement ของ Axapta

การรับตัวแปรเพิ่มเข้าไปเป็นเงื่อนไขในส่วนของ SQL เช่น รับค่าจาก Dialog แล้วเอามาเติม Wildcard ก่อนที่จะ query
หากใช้ตัวแปรที่เป็น str ธรรมดาจะมี error message
"Container and unbound string (text) fields are not allowed here in a WHERE expression"


แก้ไขได้โดย กำหนดขนาดของ string ให้แน่นอน หรือประกาศเป็น extended datatype ไปเลย
เช่น

WrkCtrIdBase              tmpStr;
//  str 10                     tmpStr;
   ;
 
    tmpStr = strfmt("%1%2",wrkCtrIdBase,"-LA*");
    SELECT sum(Amount) FROM prodRouteTrans WHERE prodRouteTrans.CategoryId LIKE tmpStr;

Axapta X++ :: Get or Set Checkbox Value

ตัวอย่างการตรวจสอบและเซ็ตสถานะของ checkbox ใน Axapta

public void clicked()
{
    Qty     tmpQty1;
    Qty     tmpQty2;
    FormCheckboxControl formCheckboxControl;
    ;
 
    super(); // ต้องรัน super ก่อน ไม่งั้นค่าไม่เปลี่ยน
    formCheckboxControl = element.design().control(control::ProdParmHistoricalCost_EndJob); // รับค่าจาก design
//   box::info(strfmt("%1",formCheckboxControl.value()));
if(formCheckboxControl.value() == 1){ //ถ้า checked จะเป็น 1
    tmpQty1 = ProdTable::find(ProdParmHistoricalCost.ProdId).QtySched;
    tmpQty2 = ProdTableJour::reportedFinishedGood(ProdParmHistoricalCost.prodId);
 
    if(tmpQty1 != tmpQty2){
       if(box::yesNo(strfmt("¨Ó¹Ç¹·Õè reported (%1) < ¨Ó¹Ç¹·Õè ÊÑ觼ÅÔµ (%2) \n              µéͧ¡ÒôÓà¹Ô¹¡ÒõèÍËÃ×ÍäÁè",tmpQty2,tmpQty1), DialogButton::Yes, "Â×¹Âѹ¡Ò÷ӧҹ") == DialogButton::Yes)
       {
          if(box::yesNo("¤Ø³µéͧ¡ÒÃÂ×¹ÂѹËÃ×ÍäÁè",DialogButton::Yes,"¡ÃسÒÂ×¹Âѹ")== DialogButton::Yes){
            formCheckboxControl.value(true); //สั่งให้ checked
          }else{
            formCheckboxControl.value(false); //สั่งให้  ไม่ checked
          }
       }else{
        formCheckboxControl.value(false);
       }
    }
}
}

8/05/2011

Ubuntu เสียบ Lan ใหม่ไม่เจอ Eth0.. Eth1

Ubuntu เสียบ Lan ใหม่ไม่เจอ Eth0.. Eth1
แก้โดยใช้คำสั่งนี้

- You use command sudo nano /etc/udev/rules.d/70-persistent-net.rules

# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.

# PCI device 0x8086:0x294c (e1000e)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1c:ff:ff:ff:ff", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

- Delete red color
- Save the file (ctrl-o to write the file, ctrl-x to exit the editor), then reboot.


ที่มา http://ubuntuforums.org/showthread.php?t=955990

8/02/2011

PHP : Get Real IP Address

function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}
 
 

PHP BB ให้มีเมนู List ด้านข้าง

1.แก้ template ไฟล์ overall_header.html (ใน \styles\prosilver\template\)
1.1 ด้านล่างสุด เพิ่ม
<table id="mainbody"><tr><td id="left_sidebar" valign="top">
<!-- INCLUDE sidebar.html -->
</td><td id="right_column" valign="top">

1.2 ด้านบน ก่อนปิด </head>
<style>
<!--
table#mainbody{ width:100%; }
td#left_sidebar{width:200px;}
//-->
</style>

2.แก้ template ไฟล์ overall_footer.html (ใน \styles\prosilver\template\)
2.1 ด้านบนสุด เพิ่ม  
  </td>
   </tr>
</table>

3.เพิ่ม template ชื่อ sidebar.html (ใน \styles\prosilver\template\) ให้มีโครงสร้างตามนี้
   <div class="panel">
    <div class="inner">
    <span class="corners-top"><span></span></span>
    <h3>Online Services : ฝซร.</h3>
        <li><a href="/sci/mn1_start.php">แจ้งซ่อม Online</a><br />
        <li><a href="/sci/mn1_make_start.php">แจ้งสร้าง Online</a><br />
    <span class="corners-bottom"><span></span></span>
    </div>
</div>