Chuyển dấu phân cách hàng ngàn! (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Tôi có làm thử file in hoá đơn trên access (cũng nhờ các sư phụ làm giúp), nhưng vướng ở chỗ là không thể nào đổi dấu phân cách hàng ngàn từ "," thành ".".
Tôi không muốn set trên control panel.
Nhờ các anh chị chỉ giúp viết code làm thế nào khi out report thì chuyển dấu phân cách thành "."
Report có 2 phần Main và Sub để in hoá đơn GTGT.
Xin cám ơn.
 
Tôi có làm thử file in hoá đơn trên access (cũng nhờ các sư phụ làm giúp), nhưng vướng ở chỗ là không thể nào đổi dấu phân cách hàng ngàn từ "," thành ".".
Tôi không muốn set trên control panel.
Nhờ các anh chị chỉ giúp viết code làm thế nào khi out report thì chuyển dấu phân cách thành "."
Report có 2 phần Main và Sub để in hoá đơn GTGT.
Xin cám ơn.
Anh thử tạo 1 Query tham chiếu đến số đó rồi format trường đó lại thử xem coi được không nhé.
 
Tôi có làm thử file in hoá đơn trên access (cũng nhờ các sư phụ làm giúp), nhưng vướng ở chỗ là không thể nào đổi dấu phân cách hàng ngàn từ "," thành ".".
Tôi không muốn set trên control panel.
Nhờ các anh chị chỉ giúp viết code làm thế nào khi out report thì chuyển dấu phân cách thành "."
Report có 2 phần Main và Sub để in hoá đơn GTGT.
Xin cám ơn.
Trước hết format nó về định dạng #,### sau đó chuyển dấu phẩy thành dấu chấm

Replace(Format([so],"#,###"),",",".")
 
Mình nghĩ chỉ có thể dùng 1 UDF chuyển số thành text theo ý muốn, rồi dùng nó để thể hiện các kết quả sau khi tính toán lên form và lên report. Đã thử format, dùng hàm format, ... đều không được. Làm Query như DomFootwear thì không tính toán được.

Cách sau của Dom hay. Nhưng cũng như cách của ptm0412, nếu tính toán nhiều thì gõ công thức mệt mỏi, vì không thay thế toán hạng trong công thức bằng control Name được.

Nếu Control2 tính từ control1, Control3 tính từ control2, Control4 tính từ control3, ... thì công thức của control4 chẳng hạn không thể ghi = control3*2 mà phải ghi hết công thức tính từ control1 đến control3 rồi mới nhân 2.
 
Lần chỉnh sửa cuối:
Mình nghĩ chỉ có thể dùng 1 UDF chuyển số thành text theo ý muốn, rồi dùng nó để thể hiện các kết quả sau khi tính toán lên form và lên report. Đã thử format, dùng hàm format, ... đều không được. Làm Query như DomFootwear thì không tính toán được.

Cách sau của Dom hay. Nhưng cũng như cách của ptm0412, nếu tính toán nhiều thì gõ công thức mệt mỏi, vì không thay thế toán hạng trong công thức bằng control Name được.

Nếu Control2 tính từ control1, Control3 tính từ control2, Control4 tính từ control3, ... thì công thức của control4 chẳng hạn không thể ghi = control3*2 mà phải ghi hết công thức tính từ control1 đến control3 rồi mới nhân 2.
Em thử làm 1 UDF để replace như sau
PHP:
Function DinhDang(iSo As Double) As String
Dim sStr As String
sStr = Format$(iSo, "#,###")
sStr = Replace(sStr, ",", ".")
DinhDang = sStr
End Function
Nhưng gán vào dòng tổng của Main Report thì OK, cụ thể như: =dinhdang(ChitietHD.Report!sumth)
Nhưng phần detail của report thì không biết làm thế nào.
Và không biết sửa thế nào mà giờ mở file nó không lên gì cả.
Các ơn các anh chị nhiều.
 
Em thử làm 1 UDF để replace như sau
PHP:
Function DinhDang(iSo As Double) As String
Dim sStr As String
sStr = Format$(iSo, "#,###")
sStr = Replace(sStr, ",", ".")
DinhDang = sStr
End Function
Nhưng gán vào dòng tổng của Main Report thì OK, cụ thể như: =dinhdang(ChitietHD.Report!sumth)
Nhưng phần detail của report thì không biết làm thế nào.
Và không biết sửa thế nào mà giờ mở file nó không lên gì cả.
Các ơn các anh chị nhiều.

Em đã chỉnh lại cái file của anh rồi. Chạy tốt, nếu anh đồng ý em sẽ đưa lên đây.

Dùng 2 hàm chuyển đổi:

Chuyển sang chấm:

Mã:
Public Function T2N(T As String)

Dim N As Double

N = Replace(T, ".", ",")

T2N = N

End Function

Chuyển sang dấu phẩy:

Mã:
Public Function N2T(N As Double)

Dim T As String

T = Replace(Format(N, "#,###"), ",", ".")

N2T = T

End Function
 
Đây chỉ là vấn đề hiển thị thôi mà, vậy thì trên Report Thu Nghi cho ẩn cái Control ấy đi giả sử nó là [Tien]
Thêm 1 TextBox đi kèm và nhập =dinhdang([tien])

Thực tế mình thử chẳng phải viết UDF mà cứ viết như sau hoàn toàn OK (Bao nhiêu chữ số thập phân là do bạn gõ vào)

=Replace(Replace(Replace(Format([Tien],"#,##0.000"),".","@"),",","."),"@",",")
 
Lần chỉnh sửa cuối:
Đây chỉ là vấn đề hiển thị thôi mà, vậy thì trên Report Thu Nghi cho ẩn cái Control ấy đi giả sử nó là [Tien]
Thêm 1 TextBox đi kèm và nhập =dinhdang([tien])
Phải thêm 1 hàm chuyển đổi từ dấu chấm sang dấu phẩy nữa mới được. Vì nó còn tính toán nữa anh à.
 
Dùng hàm T2Nhoặc N2T như Dom, hoặc dùng replace như Sealand và ThuNghi tôi thấy không hay. Đây là biện pháp chữa cháy cho 1 máy cụ thể đang set control panel dấu phẩy hàng ngàn. Cũng file đó mang sang máy khác có dấu chấm hàng ngàn thì không chạy. CHính tôi đang làm file đó cho Thu Nghi mà không tìm ra cách và cũng không test được 2 hàm của Dom hoặc công thức replace của Sealand.
Từ đó tôi nghĩ ra cách khác để có thể sử dụng trên bất cứ máy nào. Đó là dùng cách chia số thành từng nhóm 3 ký số, nối lại bằng dấu chấm.
Trên report thì không định dạng.
Khi thể hiện thì dùng hàm nối chuỗi.
Khi tính toán thì dùng hàm khác xóa bỏ dấu chấm rồi tính toán.

PHP:
Public Function Num2Text(Num As Double)
Dim GroupCount, i, StrTmp, Tmp
GroupCount = Int(Len(Trim(Num)) / 3)
    If GroupCount = 0 Then Num2Text = Str(Trim(Num)): Exit Function
    StrTmp = Trim(Str(Num))
    For i = 1 To GroupCount
        Tmp = "." & Right(StrTmp, 3) & Tmp
        StrTmp = Left(StrTmp, Len(StrTmp) - 3)
    Next
    If Len(StrTmp) > 0 Then Tmp = StrTmp & Tmp
    If Left(Tmp, 1) = "." Then Tmp = Right(Tmp, Len(Tmp) - 1)
Num2Text = Tmp
End Function
PHP:
Public Function Text2Num(Txt As String)
    Text2Num = Val(Replace(Txt, ".", ""))
End Function
Và đã test thành công trên 2 máy có control panel đã set khác nhau dấu hàng ngàn.

Kết quả in là như sau:

report01.jpg

Để in lên tờ hóa đơn in sẵn có cấu trúc sau:

report02.jpg
 
Lần chỉnh sửa cuối:
Hi bác!
Em thấy bài viết này của bác rất hay. Nhưng em test thì thấy nó chỉ đúng với số chẵn, còn số mà có chữ số thập phân trong tiếng việt thì sao được bác? ex: 70,625,162.44 thì phải đổi thành 70.625.162,44 hình như thế này mới đúng việt nam chứ bác. Bác trả lời giúp em nhé! tks bác.
 
Hi bác!
Em thấy bài viết này của bác rất hay. Nhưng em test thì thấy nó chỉ đúng với số chẵn, còn số mà có chữ số thập phân trong tiếng việt thì sao được bác? ex: 70,625,162.44 thì phải đổi thành 70.625.162,44 hình như thế này mới đúng việt nam chứ bác. Bác trả lời giúp em nhé! tks bác.
Nói chung UDF trên chỉ là giải pháp cho việc định dấu phân cách trên report. Còn bạn muốn chuyển trường hợp có 2 số lẻ thì thêm 1 if nữa là OK.
PHP:
Public Function Num2Text(Num As Double)
Dim GroupCount, i, StrTmp, Tmp, sSole As String
If Num - Int(Num) > 0 Then
  sSole = Format((Num - Int(Num)) * 100, "##")
Else
  sSole = ""
End If
Num = Int(Num)
GroupCount = Int(Len(Trim(Num)) / 3)
If GroupCount = 0 Then
  Num2Text = Str(Trim(Num))
  Exit Function
End If
StrTmp = Trim(Str(Num))
For i = 1 To GroupCount
  Tmp = "." & Right(StrTmp, 3) & Tmp
  StrTmp = Left(StrTmp, Len(StrTmp) - 3)
Next
If Len(StrTmp) > 0 Then Tmp = StrTmp & Tmp
If Left(Tmp, 1) = "." Then Tmp = Right(Tmp, Len(Tmp) - 1)
If Len(sSole) > 0 Then
  Num2Text = Tmp & "," & sSole
Else
  Num2Text = Tmp
End If
End Function
 
sSole = Format((Num - Int(Num)) * 100, "##")

Nên định dạng "00" thay vì "##", khi lên báo cáo mới ngay ngắn. Như vậy code sẽ gọn hơn, khỏi dùng 2 cái If:

PHP:
Public Function Num2Text(Num As Double) 
Dim GroupCount, i, StrTmp, Tmp, sSole As String 
  sSole = Format((Num - Int(Num)) * 100, "00") 
Num = Int(Num) 
GroupCount = Int(Len(Trim(Num)) / 3) 
If GroupCount = 0 Then   Num2Text = Str(Trim(Num)) & "," & sSole :  Exit Function 
StrTmp = Trim(Str(Num)) 
For i = 1 To GroupCount 
  Tmp = "." & Right(StrTmp, 3) & Tmp 
  StrTmp = Left(StrTmp, Len(StrTmp) - 3) 
Next 
If Len(StrTmp) > 0 Then Tmp = StrTmp & Tmp 
If Left(Tmp, 1) = "." Then Tmp = Right(Tmp, Len(Tmp) - 1) 
  Num2Text = Tmp & "," & sSole 
End Function
Hàm đổi ngược lại:

PHP:
Public Function Text2Num(Txt As String)
    Text2Num = Val(Replace(Replace(Txt, ".", ""), ",", "."))
End Function
 
Lần chỉnh sửa cuối:
;;;;;;;;;;; Dear all, mình cũng gặp vấn đề này trong xuất báo cáo, Mình muốn ở mục VND đóng khung đỏ phân cách hàng ngàn = "." & mục USD vẫn giữ phân cách hàng ngàn = dấu ","
Mình mới học còn gà nên đọc hướng dẫn ở trên vẫn chưa biết cách khắc phục !$@!! mong mọi người hướng dẫn chi tiết hơn tí giúp mình ! Many thanks !

#### Cho mình hỏi muốn chép đoạn "PHP Code" được nhắc đến ở trên thì phải chép vào đâu & ntn ? -+*/ ####

Vì hình như bạn chủ Topic gỡ file ví dụ rùi nên mình up lên file ví dụ của mình để tiện trao đổi

;;;;;;;;;;;
10,000 VND & 5,000 USD -> muốn thành 10.000 VND & 5,000.00 USD ;;;;;;;;;;;
 

File đính kèm

Lần chỉnh sửa cuối:
View attachment 59434

Dear all, mình cũng gặp vấn đề này trong xuất báo cáo, Mình muốn ở mục VND đóng khung đỏ phân cách hàng ngàn = "." & mục USD vẫn giữ phân cách hàng ngàn = dấu ","
Mình mới học còn gà nên đọc hướng dẫn ở trên vẫn chưa biết cách khắc phục !$@!! mong mọi người hướng dẫn chi tiết hơn tí giúp mình ! Many thanks !

#### Cho mình hỏi muốn chép đoạn "PHP Code" được nhắc đến ở trên thì phải chép vào đâu & ntn ? -+*/ ####

Vì hình như bạn chủ Topic gỡ file ví dụ rùi nên mình up lên file ví dụ của mình để tiện trao đổi

Mở file -> (Shift + Enter)
Report cần chỉnh sửa -> Rpt_InvoicesBill

View attachment 59436 ;;;;;;;;;;;

!$@!! Hjx không bác nào hướng dẫn giúp mình sao ?? **~**
 
View attachment 59434

Dear all, mình cũng gặp vấn đề này trong xuất báo cáo, Mình muốn ở mục VND đóng khung đỏ phân cách hàng ngàn = "." & mục USD vẫn giữ phân cách hàng ngàn = dấu ","
Mình mới học còn gà nên đọc hướng dẫn ở trên vẫn chưa biết cách khắc phục !$@!! mong mọi người hướng dẫn chi tiết hơn tí giúp mình ! Many thanks !

#### Cho mình hỏi muốn chép đoạn "PHP Code" được nhắc đến ở trên thì phải chép vào đâu & ntn ? -+*/ ####

Vì hình như bạn chủ Topic gỡ file ví dụ rùi nên mình up lên file ví dụ của mình để tiện trao đổi

Mở file -> (Shift + Enter)
Report cần chỉnh sửa -> Rpt_InvoicesBill

View attachment 59436 ;;;;;;;;;;;
Bạn xoá hết các form và report khác chỉ để lại 1 repro bạn cần chỉnh dấu phân cách thôi và đưa file lên.
Nhìn vào file chả biết sửa cái report nào. Và nhớ là bỏ start up.
 
Bạn xoá hết các form và report khác chỉ để lại 1 repro bạn cần chỉnh dấu phân cách thôi và đưa file lên.
Nhìn vào file chả biết sửa cái report nào. Và nhớ là bỏ start up.

--=0 thanks bạn đã góp ý. Hj hèn chi hỏi bữa giờ k ai thèm trả lời hết !$@!!

P/S: file ví dụ cũ Mình không biết cách bỏ start up & khi xóa các form & report khác nó báo lỗi tham chiếu tùm lum !$@!! nên mình up lại file ví dụ khác dễ nhìn hơn. rất mong được hướng dẫn. Many thanks!
 

File đính kèm

--=0 thanks bạn đã góp ý. Hj hèn chi hỏi bữa giờ k ai thèm trả lời hết !$@!!

P/S: file ví dụ cũ Mình không biết cách bỏ start up & khi xóa các form & report khác nó báo lỗi tham chiếu tùm lum !$@!! nên mình up lại file ví dụ khác dễ nhìn hơn. rất mong được hướng dẫn. Many thanks!
Chép UDF của Bác PTM vào module thôi.
 

File đính kèm

Chép UDF của Bác PTM vào module thôi.

--=0 Many thanks. Hj tại bữa h mình không biết "module" !$@!! là cái gì nên không biết chép nó vào đâu cả ;;;;;;;;;;;

Mình không biết về code câu lệnh mong bạn chỉ giúp cách bỏ số lẻ thập phân ở VND ra & thêm 2 số lẻ ở USD thì use UDF nào ?
để chuyển 10.000,00 VND -> 10.000 VND

5,000 USD -> 5,000.00 USD .


Many thanks !

--=0 Many thanks. Hj tại bữa h mình không biết "module" là cái gì nên không biết chép nó vào đâu cả ;;;;;;;;;;;

Mình không biết về code câu lệnh mong bạn chỉ giúp cách bỏ số lẻ thập phân ở VND ra & thêm 2 số lẻ ở USD thì use UDF nào ?
để chuyển 10.000,00 VND -> 10.000 VND

5,000 USD -> 5,000.00 USD .


Many thanks !
Mình vọc vọc chỉnh được rùi . Hj thanks bạn nhiều hen.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Web KT

Bài viết mới nhất

Back
Top Bottom