Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Cách lấy giá bán theo mốc thời gian trong Form
#1
Mình có danh mục sản phẩm như với ví dụ sau:
Tên sp | Giá | Áp dụng từ ngày
Bánh mì | 2000| 01/01/2013
3000| 01/03/2013
4000| 01/4/2013

Khi lấy giá vào Form, căn cứ vào ngày hiện tại để lấy Giá phù hợp.
Mong mọi người giúp đơ ^^!
Chữ ký của hatashibl
Reply
Những người đã cảm ơn
#2
(04-04-13, 06:38 PM)hatashibl Đã viết: Mình có danh mục sản phẩm như với ví dụ sau:
Tên sp | Giá | Áp dụng từ ngày
Bánh mì | 2000| 01/01/2013
3000| 01/03/2013
4000| 01/4/2013

Khi lấy giá vào Form, căn cứ vào ngày hiện tại để lấy Giá phù hợp.
Mong mọi người giúp đơ ^^!

Chào bạn!
Nếu bạn muốn lấy giá bán update mới nhất thì dùng Max của ngày áp dụng
Nhìn vào bạn mô tả có vẽ giống bảng giá đó áp cho chương trình khuyến mãi trong 1 giai đoạn.
nếu như vậy thì bạn thêm 1 cột nữa "đến ngày"
và bạn xem line này để áp dụng ( ở phần bán hàng, có khuyến mãi), mình nghĩ cái này đúng ý bạn đó. Vì phần mềm đó có lấy giá bán lên từ bảng giá, và có khuyến mãi.., bạn xem thử có áp dụng dc ko nhé.
http://thuthuataccess.com/forum/thread-4585.html
Còn bạn muốn phần mềm Vip hơn thì mời bạn xem line này
http://thuthuataccess.com/forum/thread-5764.html
Chữ ký của muaphonui_2010 "Cần cù bù thông minh"
Reply
Những người đã cảm ơn hatashibl
#3
@muaphonui_2010: cảm ơn bạn vì đã hướng dẫn giúp mình.
Mình cũng hiểu là nếu thêm Field denngay thì dùng hàm Dlookup sẽ dễ dàng hơn nhiều vì điều kiện: >= tungay and < denngay.
Nhưng mình thấy như vậy thì mất thời gian hiệu chỉnh khi điều chỉnh giá mới vì phải chỉnh denngay của giá cũ rồi chỉnh tungay và denngay của giá mới mặc dù chưa biết thời gian thay đổi giá.
Vậy nếu bạn hoặc mọi người có cách nào chỉ cần ngày áp dụng và so sánh kiểu >= ngày áp dụng giá cũ và < ngày áp dụng giá mới và xuất giá thỏa điều kiện thì giúp đỡ mình nhé happy
Chữ ký của hatashibl
Reply
Những người đã cảm ơn
#4
(05-04-13, 01:05 AM)hatashibl Đã viết: @muaphonui_2010: cảm ơn bạn vì đã hướng dẫn giúp mình.
Mình cũng hiểu là nếu thêm Field denngay thì dùng hàm Dlookup sẽ dễ dàng hơn nhiều vì điều kiện: >= tungay and < denngay.
Nhưng mình thấy như vậy thì mất thời gian hiệu chỉnh khi điều chỉnh giá mới vì phải chỉnh denngay của giá cũ rồi chỉnh tungay và denngay của giá mới mặc dù chưa biết thời gian thay đổi giá.
Vậy nếu bạn hoặc mọi người có cách nào chỉ cần ngày áp dụng và so sánh kiểu >= ngày áp dụng giá cũ và < ngày áp dụng giá mới và xuất giá thỏa điều kiện thì giúp đỡ mình nhé happy

Như vậy mình sẽ làm điều kiện là : Ngày hiện tại < ngày áp dụng, sau đó tiếp điều kiện Max của ngày áp dụng
Như vậy khi đó điều kiện đầu sẽ lấy ra tất cả giá bán của mã hàng A và ngày áp dụng nhỏ hơn ngày hiện tại.
Và sau đó lấy max theo ngày áp dụng để lấy được giá bán gần nhất.
Mình suy luận như vậy, còn code và query thì bạn tự viết nhé.
Mình nghĩ bạn ko giỏi code thì bạn chỉ cần 2 query là đã ra được kết quả rồi. (query 1 lọc điều kiên 1, query 2 lấy nguồn là query 1 tiếp tục lọc điều kiện 2)
Thân chào
Chữ ký của muaphonui_2010 "Cần cù bù thông minh"
Reply
Những người đã cảm ơn hatashibl
#5
(04-04-13, 06:38 PM)hatashibl Đã viết: Mình có danh mục sản phẩm như với ví dụ sau:
Tên sp | Giá | Áp dụng từ ngày
Bánh mì | 2000| 01/01/2013
3000| 01/03/2013
4000| 01/4/2013

Khi lấy giá vào Form, căn cứ vào ngày hiện tại để lấy Giá phù hợp.
Mong mọi người giúp đơ ^^!

Bạn tham khảo bài viết này của tôi và áp dụng vào bài của bạn nhé
http://thuthuataccess.com/forum/thread-6002.html
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn hatashibl
#6
@Xuan Thanh: cảm ơn bạn đã hướng dẫn nhưng sau khi xem mình vẫn chưa hiểu thuật toán của bạn lấy giá trị như thế nào.

Hiện giờ mình đang làm kiểu này nhưng vẫn chưa đúng mong mọi ng chỉ chỗ sai nhé.
Mình sẽ căn cứ vào ngaythangGD và masp để tìm ra những Gia của Masp đó có ngayapdung <= NgaythangGD. Sau đó sắp xếp ngayapdung theo thứ tự giảm dần và lấy Gia của Record đầu tiên.

Và đây là đoạn code mình tự viết để gán giá trị cho text box Txtgia:
Mã:
txtgia = "select Dsgia.Gia from (SELECT Sanpham.Masp, Dsgia.Adtungay, Dsgia.Gia FROM Sanpham INNER JOIN Dsgia ON Sanpham.Masp = Dsgia.Masp WHERE ((Dsgia.Adtungay <= " & NgaythangGD & ") and  (Sanpham.Masp ='" & Masp &"'")) ORDER BY Dsgia.Adtungay DESC) where rownum =1 "


Tuy nhiên mình k biết đưa đoạn code trên vào sự kiện nào để khi mở GD cũ hoặc thêm GD mới nó cũng căn cứ vào NgaythangGD và Masp để xuất giá phù hợp. Mong mọi ng giúp đỡ.

Mình đính kèm FOrm cho mọi người dễ xem nhé.
[Hình: sadfab.jpg]
Chữ ký của hatashibl
Reply
Những người đã cảm ơn
#7
Bài của tôi là tìm giá gần nhất với giá đã chọn. Bài của bạn có hơi khác một chút nhưng thuật toán là giống nhau. Bạn phải tìm Ngày áp dụng giá của sản phẩm đã chọn gần nhất với ngày giao dịch để truy xuất ra đơn giá của sản phẩm ứng với ngày áp dụng gần nhất. Bạn theo đó mà làm, có gì khó khăn thì hỏi tiếp. có thế mới...chủ động trong công việc
Bạn nến sử dụng table DSGia để dò tìm
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn hatashibl
#8
@XuanThanh: mình đã viết đoạn code SQL bên trên theo hướng dẫn của bạn và mô tả của mình: tìm những ngày áp dụng <= ngày tháng GD, sau đó sắp xếp giảm dần => ngày áp dụng gần nhất sẽ ở đầu => mình lấy Gia từ DSgia của record đầu tiên. Tuy nhiên khi gán vào control source của 1 textbox thì k đc.
k biết có sai sót j trong mã hay cách làm k đúng hay k?
Bạn hướng dẫn giúp mình cái. Vẫn còn gà quá ^^!
Chữ ký của hatashibl
Reply
Những người đã cảm ơn
#9
1/ Table tblDSGia có các trường STT(Text), MaSP(Text),Gia(Number),NgayApDung(Date/Time)
2/ Trong module tạo hàm GiaTim như sau
Mã PHP:
Function GiaTim(dNgay As DatesSP As String) As Double
    Dim rs 
As Recordset
    Dim Gia 
As Double
    Dim Thay 
As Boolean
    Thay 
False
    Dim CauSQL 
As String 
    CauSQL 
"Select * from tblDSGia Where MaSP = '" sSP "'  Order By NgayApDung"
    
Set rs CurrentDb.OpenRecordset(CauSQL)
    If 
rs.RecordCount 0 Then
        rs
.MoveFirst
        
Do Until rs.EOF
            
If rs!NgayApDung dNgay Then
                Gia 
rs!GiaThay True
            
Else
                Exit Do
            
End If
            
rs.MoveNext
        Loop
    End 
If
    
rs.Close
    
If Thay False Then GiaTim Else GiaTim Gia    
End 
Function 

3/ Trong form có 3 textbox : txtNgay, txtMaSP, txtGiaApDung và một Commandbuton : cmdLayGia

Mã PHP:
Private Sub cmdLayGia_Click()
    If 
Me.txtNgay <> "" And Me.txtMaSP <> "" Then
        Me
.txtGiaApDung GiaTim(Me.txtNgayMe.txtMaSP)
    
End If
End Sub 

Bạn vận dụng vào bài của mình cho phù hợp. Khi GiaTim = 0 là không có giá phù hợp (Ngày chứng từ < giá trị NgayApDung nhỏ nhất trong table)
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn hatashibl
#10
(10-04-13, 09:54 PM)Xuân Thanh Đã viết: 1/ Table tblDSGia có các trường STT(Text), MaSP(Text),Gia(Number),NgayApDung(Date/Time)
2/ Trong module tạo hàm GiaTim như sau
Mã PHP:
Function GiaTim(dNgay As DatesSP As String) As Double
    Dim rs 
As Recordset
    Dim Gia 
As Double
    Dim Thay 
As Boolean
    Thay 
False
    Dim CauSQL 
As String 
    CauSQL 
"Select * from tblDSGia Where MaSP = '" sSP "'  Order By NgayApDung"
    
Set rs CurrentDb.OpenRecordset(CauSQL)
    If 
rs.RecordCount 0 Then
        rs
.MoveFirst
        
Do Until rs.EOF
            
If rs!NgayApDung dNgay Then
                Gia 
rs!GiaThay True
            
Else
                Exit Do
            
End If
            
rs.MoveNext
        Loop
    End 
If
    
rs.Close
    
If Thay False Then GiaTim Else GiaTim Gia    
End 
Function 

3/ Trong form có 3 textbox : txtNgay, txtMaSP, txtGiaApDung và một Commandbuton : cmdLayGia

Mã PHP:
Private Sub cmdLayGia_Click()
    If 
Me.txtNgay <> "" And Me.txtMaSP <> "" Then
        Me
.txtGiaApDung GiaTim(Me.txtNgayMe.txtMaSP)
    
End If
End Sub 

Bạn vận dụng vào bài của mình cho phù hợp. Khi GiaTim = 0 là không có giá ( Khi ngày áp dụng giá < giá trị ngay trong table)
Thân mến
Hình như code trên thiếu 1 điều kiện ngày áp dụng < ngày chứng từ , Vì nếu như vậy thì nó có thể lấy giá lớn hơn ngày chứng từ. Không biết đúng ko nữa.
Chữ ký của muaphonui_2010 "Cần cù bù thông minh"
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Tự động hiện Form khi loading hết thời gian ChiMai 1 34 02-12-16, 08:59 PM
Bài mới nhất: ongke0711
Photo [Hỏi] Mở Form trên access 2007 báo lỗi jason 5 186 22-11-16, 09:23 AM
Bài mới nhất: jason
  Query hiện lên trên form? feeling 4 162 09-11-16, 09:49 PM
Bài mới nhất: toancvp
  Thay đổi hình ảnh theo mã feeling 3 149 04-11-16, 05:18 PM
Bài mới nhất: maidinhdan
  [Help] Chỉnh giúp Form thống kê hoanghai902 2 123 28-10-16, 06:15 PM
Bài mới nhất: hoanghai902

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ