|
|
|
ขอความช่วยเหลือด้วยครับ สต๊อกคงเหลือไม่ตรงกับที่คำนวณ sql ผิดตรงไหน? |
|
|
|
|
|
|
|
ไม่รู้ code ผิดตรงไหน ทำไมสินค้าคงเหลือไม่ตรงกับที่คำนวณ
สินค้า A รับเข้าทั้งหมด 10 จ่ายออก 8 ต้องเหลือ 2 แต่กลายเป็น 7
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
|
|
|
|
|
|
Date :
2012-04-30 22:38:00 |
By :
jackinfo |
View :
2558 |
Reply :
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จ่ายออกดูไงอ่ะ ไอ qtyout ก็ 3 นิ
|
|
|
|
|
Date :
2012-04-30 22:42:28 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หลักการโดยรวมเท่าทีศึกษามา แต่เขียนไม่เป็น
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 ครับ
|
|
|
|
|
Date :
2012-04-30 22:52:03 |
By :
jackinfo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จ่ายออก trantype = 2 product 1 มีจ่ายออก 2 ครั้ง คือครั้งแรก 5 ชิ้น ครั้งที่สอง 3 ชิ้น รวม 8 ชิ้น ครับตามรูปบนสุด(tbstocktrandetail)
|
|
|
|
|
Date :
2012-04-30 22:54:57 |
By :
jackinfo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอโทษด้วยครับ ขอแก้ไขรายละเอียดดังนี้ครับ
รูปแรกตารางชื่อ 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หมุนสกอ ขึ้นๆ ลงๆ ดูตัวเลขแล้วงงๆ
เอางี้ ผมจะลองตัด 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Thanks in advance.
|
|
|
|
|
Date :
2012-04-30 23:37:05 |
By :
jackinfo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมคิดว่าผมเดาปัญหาเจอแล้วคับ เพราะว่า 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ปกติ docno ใน tbstocktranheader จะเริ่มจาก 1 ทั้งสองธุรกรรม( trantype) คือรับเข้าและจ่ายออกครับ รับเข้าเริ่มจาก docno=1 แต่อาจมีหลายบรรทัด(docline) ครับ เอกสารรับใบเดียวรับหลายรายการสินค้า one to many
จ่ายออกก็หลักการเดียวกันครับ ใบจ่ายเดียวแต่มีมากกว่าหนึ่งรายการสินค้าได้เช่นกัน จ่ายออกก็เริ่มจาก docno=1 running ไปเรื่อยๆ
|
|
|
|
|
Date :
2012-05-01 00:06:09 |
By :
jackinfo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
one to many? ทำไม มี ซ้ำกันล่ะ
คุณรู้หรือยังว่าทำไมได้ค่า 7 ลองเชื่อ No 8 ผมดู
|
|
|
|
|
Date :
2012-05-01 00:12:50 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|