Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > ขอความช่วยเหลือด้วยครับ สต๊อกคงเหลือไม่ตรงกับที่คำนวณ sql ผิดตรงไหน?



 

ขอความช่วยเหลือด้วยครับ สต๊อกคงเหลือไม่ตรงกับที่คำนวณ sql ผิดตรงไหน?

 



Topic : 077798



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook



ไม่รู้ code ผิดตรงไหน ทำไมสินค้าคงเหลือไม่ตรงกับที่คำนวณ

สินค้า A รับเข้าทั้งหมด 10 จ่ายออก 8 ต้องเหลือ 2 แต่กลายเป็น 7



tbstocktrandetail

tbstockbalance

Code (PHP)
<?
	if ($_POST[period]==null)
	{
		print("กรุณากรอกรอบบัญชีด้วยค่ะ<br />");
	}
	else
{
	$period=$_POST[period];
	
	$link = mysql_connect("localhost","tipawatc","1234");
	if (!$link)
	{
	 print("ไม่สามารถเชื่อต่อระบบฐานข้อมูล");
	}
	else
 {
	mysql_select_db("tipawatc_mesi",$link);
	mysql_query("SET NAMES UTF8");
		
//clear tbstockbalance
	$sql1 = "TRUNCATE TABLE `tbstockbalance`";
	$res1 = mysql_query($sql1,$link);
	
//insert productcode & qtyin	
	$sql2 = "INSERT into tbstockbalance(period,productcode,qtyin) SELECT '$period' , productcode , qty FROM 	tbstocktrandetail WHERE trantype=1";
	$res2 = mysql_query($sql2,$link);

//update qtyout	
	$sql3 = "SELECT * FROM tbstocktrandetail WHERE trantype=2";
	$res3 = mysql_query($sql3,$link);
	while ($array = mysql_fetch_array($res3))
	{
	$sql4 = "UPDATE tbstockbalance SET qtyout = $array[4] WHERE productcode=$array[3] and period=$period";
	$res4 = mysql_query($sql4,$link);
	}
	
//update balanceqty
	
	$sql5 = "SELECT * FROM tbstockbalance";
	$res5 = mysql_query($sql5,$link);
	while ($qty= mysql_fetch_array($res5))
	{
	$balanceqty=$qty[3]-$qty[4];	
	$sql6 = "UPDATE tbstockbalance SET balanceqty = $balanceqty WHERE productcode=$qty[1] AND period=$period";
	$res6 = mysql_query($sql6,$link);
	}
	
//show stockbalance
	$sql7 = "SELECT tbstockbalance.period, tbstockbalance.qtyin, tbstockbalance.qtyout, tbstockbalance.balanceqty, tbproduct.productname, tbproduct.unitmeasure FROM tbstockbalance LEFT JOIN tbproduct ON tbstockbalance.productcode=tbproduct.productcode;";
	$res7 = mysql_query($sql7,$link);
	
	print "<table border='1'>";
			print "<tr>";
				print "<td>รอบบัญชี</td>";
				print "<td>ชื่อสินค้า</td>";
				print "<td>รับเข้า</td>";
				print "<td>จ่ายออก</td>";
				print "<td>คงเหลือ</td>";
				print "<td>หน่วยนับ</td>";
			print "</tr>";
			
			while ($dbarray=mysql_fetch_array($res7)) 
			{		
			print "<tr>";
				print "<td>".$dbarray[0]."</td>";
				print "<td>".$dbarray[4] ." </td>";
				print "<td align='right'>".$dbarray[1] ." </td>";
				print "<td align='right'>".$dbarray[2] ." </td>";
				print "<td align='right'>".$dbarray[3]." </td>";
				print "<td>".$dbarray[5]." </td>";
				
			print "</tr>";  
			}
	print"</table>";
 }
mysql_close($link);
}
?>




Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2012-04-30 22:38:00 By : jackinfo View : 2558 Reply : 11
 

 

No. 1



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

จ่ายออกดูไงอ่ะ ไอ qtyout ก็ 3 นิ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-04-30 22:42:28 By : pjgunner.com
 


 

No. 2



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

หลักการโดยรวมเท่าทีศึกษามา แต่เขียนไม่เป็น
1. ล้างข้อมูลในตาราง tbstockbalance
2. อ่านข้อมูลจากตาราง tbstocktranheader ทีละ record
3. อ่านข้อมูลจากตาราง tbinventorydetail ทีละ record ด้วยเงื่อนไข docno จากตาราง tbstocktranheader
4. ทำการปรับปรุงยอด qtyin และ qtyout โดยดูจาก trantype ว่าเป็น 1=in ให้ update qtyin 2=out ให้ update qtyout
5. ทำวนจนกระทังครบทุก record


tbstocktranheader ครับ
tbstocktranheader
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-04-30 22:52:03 By : jackinfo
 

 

No. 3



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

จ่ายออก trantype = 2 product 1 มีจ่ายออก 2 ครั้ง คือครั้งแรก 5 ชิ้น ครั้งที่สอง 3 ชิ้น รวม 8 ชิ้น ครับตามรูปบนสุด(tbstocktrandetail)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-04-30 22:54:57 By : jackinfo
 


 

No. 4



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ตอบความคิดเห็นที่ : 2 เขียนโดย : jackinfo เมื่อวันที่ 2012-04-30 22:52:03
รายละเอียดของการตอบ ::
หลักการโดยรวมเท่าทีศึกษามา แต่เขียนไม่เป็น
1. ล้างข้อมูลในตาราง tbstockbalance
2. อ่านข้อมูลจากตาราง tbstocktranheader ทีละ record
3. อ่านข้อมูลจากตาราง tbinventorydetail ทีละ record ด้วยเงื่อนไข docno จากตาราง tbstocktranheader
4. ทำการปรับปรุงยอด qtyin และ qtyout โดยดูจาก trantype ว่าเป็น 1=in ให้ update qtyin 2=out ให้ update qtyout
5. ทำวนจนกระทังครบทุก record

ชื่อตารางรูปแรกและสองล่ะ
ชื่อฟีล ชื่อย่อ งง

ข้อ 1-5 เลยงง

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-04-30 23:00:49 By : pjgunner.com
 


 

No. 5



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ขอโทษด้วยครับ ขอแก้ไขรายละเอียดดังนี้ครับ

รูปแรกตารางชื่อ tbstocktrandetail
รูปสองตารางชื่อ tbstockbalance
รูปสามตารางชื่อ tbstocktranheader

หลักการโดยรวมเท่าทีศึกษามา แต่เขียนไม่เป็น
1. ล้างข้อมูลในตาราง tbstockbalance
2. อ่านข้อมูลจากตาราง tbstocktranheader ทีละ record
3. อ่านข้อมูลจากตาราง tbinventorydetail ทีละ record ด้วยเงื่อนไข docno จากตาราง tbstocktranheader
4. ทำการปรับปรุงยอด tbstockbalance ที่ฟิลด์ qtyin และ qtyout โดยดูจาก trantype ถ้า trantype = 1 ให้ update qtyin ถ้าเป็น trantype=2 ให้ update qtyout
5. ทำวนจนกระทังครบทุก record

6. คงเหลือ (balanceqty) = qtyin-qtyout
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-04-30 23:10:59 By : jackinfo
 


 

No. 6



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

หมุนสกอ ขึ้นๆ ลงๆ ดูตัวเลขแล้วงงๆ

เอางี้ ผมจะลองตัด tbstocktranheader แล้วดูก่อน

ไม่ทราบว่า ข้อมูลในรูป นี่เอามาครบนะครับ

พอเข้าใจแล้วคับ เด๋วดูโค้ดก่อน

qtyout ต้องเป็น 8 คับ ไม่ใช่ 3


ประวัติการแก้ไข
2012-04-30 23:24:32
2012-04-30 23:27:07
2012-04-30 23:28:33
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-04-30 23:23:38 By : pjgunner.com
 


 

No. 7



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

Thanks in advance.
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-04-30 23:37:05 By : jackinfo
 


 

No. 8



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ผมคิดว่าผมเดาปัญหาเจอแล้วคับ เพราะว่า 1 header มี docno ที่ซ้ำกัน ดังนั้นถ้าอ่านจาก header อาจเอาแรคคอร์ดเดิมที่ถูกใช้แล้ว มาใช้อีก

ถูกป่าวหว่า

ดังนั้น ควรอ่านข้อมูลจาก detail เลยจะถูกต้อง


ประวัติการแก้ไข
2012-04-30 23:39:28
2012-04-30 23:45:45
2012-04-30 23:50:47
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-04-30 23:38:48 By : pjgunner.com
 


 

No. 9



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ปกติ docno ใน tbstocktranheader จะเริ่มจาก 1 ทั้งสองธุรกรรม( trantype) คือรับเข้าและจ่ายออกครับ รับเข้าเริ่มจาก docno=1 แต่อาจมีหลายบรรทัด(docline) ครับ เอกสารรับใบเดียวรับหลายรายการสินค้า one to many

จ่ายออกก็หลักการเดียวกันครับ ใบจ่ายเดียวแต่มีมากกว่าหนึ่งรายการสินค้าได้เช่นกัน จ่ายออกก็เริ่มจาก docno=1 running ไปเรื่อยๆ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-01 00:06:09 By : jackinfo
 


 

No. 10



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter



one to many? ทำไม มี ซ้ำกันล่ะ

คุณรู้หรือยังว่าทำไมได้ค่า 7 ลองเชื่อ No 8 ผมดู
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-01 00:12:50 By : pjgunner.com
 


 

No. 11



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

Code (PHP)
<html>
<head>
<title>M.E.S.I. ENGINEERING</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="styleerp.css" rel="stylesheet" type="text/css" />
</head>
ผมทำได้แล้วครับ ขอบคุณทุกท่านมากครับที่ใจดีแนะนำ code ข้างล่างเผื่อเป็นประโยชน์กับคนอื่นๆ ในชุมชนดีแบบนี้ครับ

<body>
<div class="container">
	<div class="content">
	<?
	if ($_POST[period]==null)
	{ 
		print("กรุณากรอกรอบบัญชีด้วยค่ะ<br />");
	}
	else
{
	$period=$_POST[period];
	
	$link = mysql_connect("localhost","tipawatc","1234");
	if (!$link)
	{
	 print("ไม่สามารถเชื่อต่อระบบฐานข้อมูล");
	}
	else
 {
	mysql_select_db("tipawatc_mesi",$link);
	mysql_query("SET NAMES UTF8");
		
//clear tbstockbalance
	$sql0 = "TRUNCATE TABLE `tbstockbalance`";
	$res0 = mysql_query($sql0,$link);
	
	
	$sql1 = "SELECT productcode, begining FROM tbproduct;";
	$res1 = mysql_query($sql1,$link);
	while ($array = mysql_fetch_array($res1))
	{
	echo ("รหัสสินค้า$array[0]"); echo ("สต๊อกเริ่มต้น$array[1]");echo "<br />"; 
	
	$sql2 = "INSERT into tbstockbalance (period,productcode,bfqty) VALUES ('$period','$array[0]','$array[1]');";
	$res2 = mysql_query($sql2,$link);
	}

//before loop
	$sql3 = "SELECT * FROM tbstocktranheader;";
	$res3 = mysql_query($sql3,$link);
	$numrow3 = mysql_num_rows($res3);
	
	echo ("จำนวนแถวของตารางหัวเอกสาร=$numrow3"); echo ("<br />");
	for ($i=1; $i<=$numrow3; $i++)
	{
	$data = mysql_fetch_row($res3);
	echo ("แถวที่ $i. TranType=$data[0], DocNo=$data[1]"); 
	echo ("<br />");
	
	$sql4= "SELECT * FROM tbstocktrandetail WHERE trantype='$data[0]' AND docno='$data[1]';";
	$res4 = mysql_query($sql4,$link);
	$numrow4 = mysql_num_rows($res4);
	echo ("จำนวนบรรทัดของ trantype.$data[0],docno.$data[1],=$numrow4 บรรทัด"); echo ("<br />");
	
		for($j=1;$j<=$numrow4;$j++)
		{
		$data5 = mysql_fetch_row($res4);
		echo ("ประเภทธุรกรรม $data[0],เอกสารเลขที่ $data[1],บรรทัดที่ $j,รหัสสินค้า $data5[3], จำนวนสินค้า$data5[4]"); 
		echo ("<br />");
		
		switch ($data[0])
		{
			case"1":
			{
				$sql5="SELECT qtyin FROM tbstockbalance WHERE period='$period' AND productcode='$data5[3]';";
				$res5 = mysql_query($sql5,$link);
				$qtybeforein = mysql_fetch_row($res5);
				echo ("qtyin เดิมของสินค้ารหัส$data5[3]=$qtybeforein[0]");
				echo ("<br />");
				$qtynewin=$qtybeforein[0]+$data5[4];
				echo ("qtyin ใหม่ของสินค้ารหัส $data5[3]=$qtynewin");
				echo ("<br />");
				$sql7 = "UPDATE tbstockbalance SET qtyin = '$qtynewin' WHERE productcode='$data5[3]' AND period='$period';";
				$res7 = mysql_query($sql7,$link);
				break;
								
			}
			case"2":
			{
				$sql6="SELECT qtyout FROM tbstockbalance WHERE period='$period' AND productcode='$data5[3]';";
				$res6 = mysql_query($sql6,$link);
				$qtybeforeout = mysql_fetch_row($res6);
				echo ("qtyout เดิมของสินค้ารหัส $data5[3]=$qtybeforeout[0]");
				echo ("<br />");
				$qtynewout=$qtybeforeout[0]+$data5[4];
				echo ("qtyout ใหม่ของสินค้ารหัส $data5[3]=$qtynewout");
				echo ("<br />"); 
				$sql8 = "UPDATE tbstockbalance SET qtyout = '$qtynewout' WHERE productcode='$data5[3]' AND period='$period';";
				$res8 = mysql_query($sql8,$link);
				break;
			}
								
			}//switch
		}//loop j
	}//loop i

//update balanceqty
	$sql9 = "SELECT * FROM tbstockbalance;";
	$res9 = mysql_query($sql9,$link);
	while ($qty= mysql_fetch_row($res9))
	{
	$balanceqty=$qty[2]+$qty[3]-$qty[4];	
	$sql10 = "UPDATE tbstockbalance SET balanceqty = '$balanceqty' WHERE productcode='$qty[1]';";
	$res10 = mysql_query($sql10,$link);
	}	
	
	
//show stockbalance
	$sql11 = "SELECT tbstockbalance.period, tbstockbalance.bfqty,tbstockbalance.qtyin, tbstockbalance.qtyout, tbstockbalance.balanceqty, tbproduct.productname, tbproduct.unitmeasure FROM tbstockbalance LEFT JOIN tbproduct ON tbstockbalance.productcode=tbproduct.productcode;";
	$res11 = mysql_query($sql11,$link);
	
	print "<table border='1'>";
			print "<tr>";
				print "<td>รอบบัญชี</td>";
				print "<td>ชื่อสินค้า</td>";
				print "<td>ยกมา</td>";
				print "<td>รับเข้า</td>";
				print "<td>จ่ายออก</td>";
				print "<td>คงเหลือ</td>";
				print "<td>หน่วยนับ</td>";
			print "</tr>";
			
			while ($dbarray=mysql_fetch_array($res11)) 
			{		
			print "<tr>";
				print "<td>".$dbarray[0]."</td>";
				print "<td>".$dbarray[5]." </td>";
				print "<td align='right'>".$dbarray[1] ." </td>";
				print "<td align='right'>".$dbarray[2] ." </td>";
				print "<td align='right'>".$dbarray[3] ." </td>";
				print "<td align='right'>".$dbarray[4] ." </td>";
				print "<td>".$dbarray[6]." </td>";
				
			print "</tr>";  
			}
	print"</table>";
 }
mysql_close($link);
}
?>

<form method="POST" action="test.php">
รอบบัญชี YYYYMM<input type="text" name="period"><br />
<input type="submit" name="Submit" value="สินค้าคงเหลือ">
</form>	

<a href="inventory.php"> กลับสู่หน้าระบบสินค้าคงคลัง</a>
</div><!-- end .content -->
</div><!-- end .container -->
</body>
</html>



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-02 10:13:11 By : jackinfo
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ขอความช่วยเหลือด้วยครับ สต๊อกคงเหลือไม่ตรงกับที่คำนวณ sql ผิดตรงไหน?
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่