Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Nhờ viết lisp phát hiện kích thước đã bị thay đổi


  • Please log in to reply
16 replies to this topic

#1 quocphong_ctm

quocphong_ctm

    biết vẽ circle

  • Members
  • PipPip
  • 35 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 16 January 2014 - 05:29 PM

Chào các cao thủ AutoCad,

 

Như tiêu đề topic, mình nhờ các bác viết giúp lisp phát hiện ra các kích thước trong 1 bản vẽ đã bị chỉnh sửa bằng tay. Mình đã search trên diễn đàn và tìm được lisp thực hiện công việc tương tự. Tuy nhiên, với lisp này, mình chỉ có 1 option là chọn tất cả kích thước có trong bản vẽ, sau đó, lisp sẽ trả những kích thước đã bị chỉnh sửa về lại ban đầu. 

 

Trong bản vẽ, có 1 số kích thước người vẽ cố tình thay đổi bằng tay cho phù hợp với bản vẽ, có những kích thước sửa tay nhưng bị sai. Do đó, nếu chỉnh sửa tất cả kích thước bị modify về lại ban đầu như thế, mình sẽ rất khó kiểm soát.

 

Mình muốn 1 lisp hoạt động như chức năng Find and Replace trong word, nghĩa là mình sẽ search từng kích thước, kích thước nào mình nghi là sai, mình sẽ check lại trước khi cập nhật, kích thước nào đúng rồi thì mình pass qua. Ngoài ra, lisp cũng có chức năng cơ bản là  thay đổi tất cả các dim đã bị thay đổi về lại ban đầu (option 2)

 

Rất cảm ơn các bác!!!

 

Chúc các bác năm mới nhiều sức khỏe và thành công!


  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 16 January 2014 - 06:08 PM

Các thấp thủ thì sao bạn :)


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 642 Bài viết
Điểm đánh giá: 224 (khá)

Đã gửi 16 January 2014 - 06:19 PM

MÌnh nghĩ yêu cầu của bạn, là 

  1. Gõ lênh, chọn vùng "nghi ngờ" (chứ không chọn toàn bộ)
  2. List sẽ đổi màu tất cả các Dim bị Fake
  3. Làm gì đó

Nếu vậy trên diễn đàn cũng có rồi, nhớ trước cũng có yêu cầu y như thế. Như vậy đã đủ cho công việc của bạn chưa, chức còn kiểu Search and Replace, nghe có vẻ chậm hơn thì phải.


  • 0

#4 Hoan1111

Hoan1111

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2587 Bài viết
Điểm đánh giá: 692 (tốt)

Đã gửi 16 January 2014 - 06:35 PM

Các thấp thủ thì sao bạn :)

 

Hình như là  các thấp thủ thích dùng thủ công chứ không dám hoang phí tiêu xài lisp lủng! :) :) :)

 

http://www.cadviet.c...ich-thuoc-that/


  • 0

66 Câu Phật Học Cho Cuộc Sống : http://ngocchinh.com...-cho-cuoc-song/

Gió đưa cây cải về trời / Rau răm ở lại chịu lời đắng cay...

 

 


#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 16 January 2014 - 10:17 PM

Lisp thay đổi Dim Overrive theo kiểu Find and Replace "gần giống" trong Word đây.

(defun C:HA( / VPCords pllur lst key)
 (defun VPCords()
  ((lambda (offset) ((lambda (viewctr) (list (mapcar '- viewctr offset) (mapcar '+ viewctr offset))) (getvar "viewctr")))
   ((lambda (halfHeight aspectRatio) (list (* halfHeight aspectRatio) halfHeight))
    (* 0.5 (getvar "viewsize"))
    (apply '/ (getvar "screensize")))))
 (setq pllur (vpcords))
 (command "undo" "be")
 (princ "\nChon cac DIM da bi Override de Convert...")
 (if (setq ss (ssget '((0 . "DIMENSION") (1 . "~"))))
  (progn
   (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
   (initget "All  Individually")
   (setq key (getkword "\nSelect type [All/Individually] <All>: "))
   (if (not key) (setq key "All"))
   (cond
    ((= key "All")
     (foreach ent lst
      (entmod (subst (cons 1 "") (assoc 1 (entget ent)) (entget ent)))))
    ((= key "Individually")
     (foreach ent lst
      (command "zoom" "c" "non" (cdr (assoc 11 (entget ent))) 5)
   (command "ddedit" ent pause))))))
 (command "zoom" "w" "non" (car pllur) "non" (cadr pllur))
 (command "undo" "e")
 (princ))
 


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#6 quocphong_ctm

quocphong_ctm

    biết vẽ circle

  • Members
  • PipPip
  • 35 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 16 January 2014 - 10:24 PM

Cảm ơn bác Hạ,

 

Cho mình hỏi, khi mình chọn lệnh ha theo lisp bác viết, những dim nào đã bị chỉnh tay sẽ được chọn, dưới dòng nhắc lệnh có 2 option, 1 là All (revise lại tất cả) và 1 là Individually (mình chọn thì nó báo lỗi Invalid option keyword). bác hướng dẫn thêm tí được ko a?

 

Cảm ơn cácbác đã giúp đỡ rất nhiều!


  • 0

#7 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 17 January 2014 - 06:44 AM

Cảm ơn bác Hạ,

 

Cho mình hỏi, khi mình chọn lệnh ha theo lisp bác viết, những dim nào đã bị chỉnh tay sẽ được chọn, dưới dòng nhắc lệnh có 2 option, 1 là All (revise lại tất cả) và 1 là Individually (mình chọn thì nó báo lỗi Invalid option keyword). bác hướng dẫn thêm tí được ko a?

 

Cảm ơn cácbác đã giúp đỡ rất nhiều!

Chắc là bạn nhập sai ký tự hay sao đó. Chọn trực tiếp hoặc nhập chữ I (I ngắn)


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 January 2014 - 07:37 AM

Chắc là bạn nhập sai ký tự hay sao đó. Chọn trực tiếp hoặc nhập chữ I (I ngắn)

 

TUE_NV chưa thử Lisp bác viết nhưng đọc thì thấy điều kiện logic là: 

(cond ((= key "All")

;;;;;;

((= key "Individually")

;;;;;

thì Bác biểu bạn chủ topic nhập chữ I (I ngắn) sao được?  


  • 1

#9 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 17 January 2014 - 07:56 AM

Cảm ơn bác Hạ,

 

Cho mình hỏi, khi mình chọn lệnh ha theo lisp bác viết, những dim nào đã bị chỉnh tay sẽ được chọn, dưới dòng nhắc lệnh có 2 option, 1 là All (revise lại tất cả) và 1 là Individually (mình chọn thì nó báo lỗi Invalid option keyword). bác hướng dẫn thêm tí được ko a?

 

Cảm ơn cácbác đã giúp đỡ rất nhiều!

Có thể là do lỗi codeBox hoặc phiên bản Cad đời cũ khi dùng lệnh ZOOM

Cad 2010 chạy tốt, nhưng phần zoom cho thấy toàn bộ đ/tượng Dim thì dễ nhìn hơn (BoundingBox)

@TUE : trước đó có dòng InitGet mà.

15454_error0.jpg


  • 1

#10 quocphong_ctm

quocphong_ctm

    biết vẽ circle

  • Members
  • PipPip
  • 35 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 17 January 2014 - 08:11 AM

Có thể là do lỗi codeBox hoặc phiên bản Cad đời cũ khi dùng lệnh ZOOM

Cad 2010 chạy tốt, nhưng phần zoom cho thấy toàn bộ đ/tượng Dim thì dễ nhìn hơn (BoundingBox)

@TUE : trước đó có dòng InitGet mà.

15454_error0.jpg

Mình dùng cad 2014, khi nhâp chữ "I" tại dòng nhắc Individually thì báo lỗi invaild. Mình làm nhiều lần rồi nhưng vẫn bị lỗi như thế. Các bác kiểm tra lại code giúp mình với!


  • 0

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 17 January 2014 - 09:06 AM

@Gia_bach: có <span> thì cũng không ảnh hưởng. Không biết bị lỗi chỗ nào.

@quocphong_ctm: bạn thử post lại lisp mà bạn đã down lên đây xem quá trình down có lỗi gì không.

Tôi không có cad 2014 nên không test được.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#12 quocphong_ctm

quocphong_ctm

    biết vẽ circle

  • Members
  • PipPip
  • 35 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 17 January 2014 - 09:22 AM

@Gia_bach: zoom bounding box đôi lúc to quá khiến không thể nhận ra Dim đó đang nằm ở đâu mà check sự đúng sai để sửa.

Có <span> thì cũng không ảnh hưởng. Không biết bị lỗi chỗ nào.

@quocphong_ctm: bạn thử post lại lisp mà bạn đã down lên đây xem quá trình down có lỗi gì không.

Tôi không có cad 2014 nên không test được.

@Doan Van Ha: Mình load lisp của bác không báo lỗi gì cả, lisp hoạt động rất ok. TUy nhiên đến lúc chọn theo dòng nhắc lệnh (All or Individually) thì bị báo lỗi Invaild Option Keyword.

 

Thật ra, nếu chỉ dừng ở bước đầu tiên của lisp nghĩa là sau khi chọn đối tượng, các dims đã bị edit sẽ hiện nét đứt là mình có thể control được rồi. Nhưng lỡ nhờ các bác rồi thì nhờ cho trót :). Neu chọn được từng dim (individually) rồi kiểm tra trước khi edit thì hay biết mấy!

 

Có bác nào dùng Autocad 2014 như mình thì nhờ test thử đoạn lisp của bác Hạ xem có bị như mình không nhé!


  • 0

#13 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 17 January 2014 - 10:10 AM

1). Sửa lisp để zoom 2 lần bounding box entity cho dễ nhìn.

2). Bổ sung thêm lệnh HA1 chỉ để dùng cho việc convert từng dim (vì không hiểu tại sao lại lỗi).

;; Doan Van Ha - CadViet.com - 16/01/2014
;; Lisp thay doi Dim Override gan giong Find and Replace trong Word. Co 2 option: All or Individually
(defun C:HA( / VPCords pllur lst key p1 p2 p11 p22)
 (defun VPCords()
  ((lambda (offset) ((lambda (viewctr) (list (mapcar '- viewctr offset) (mapcar '+ viewctr offset))) (getvar "viewctr")))
   ((lambda (halfHeight aspectRatio) (list (* halfHeight aspectRatio) halfHeight))
    (* 0.5 (getvar "viewsize"))
    (apply '/ (getvar "screensize")))))
 (setq pllur (vpcords))
 (command "undo" "be")
 (princ "\nChon cac DIM da bi Override de Convert...")
 (if (setq ss (ssget '((0 . "DIMENSION") (1 . "~"))))
  (progn
   (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
   (initget "All  Individually")
   (setq key (getkword "\nSelect type for convert [All/Individually] <All>: "))
   (if (not key) (setq key "All"))
   (cond
    ((= key "All")
     (foreach ent lst
      (entmod (subst (cons 1 "") (assoc 1 (entget ent)) (entget ent)))))
    ((= key "Individually")
     (foreach ent lst
      (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)
 (setq p1 (safearray-value ll) p2 (safearray-value ur))
 (setq p11 (polar p1 (angle p2 p1) (/ (distance p1 p2) 2)) p22 (polar p2 (angle p1 p2) (/ (distance p1 p2) 2)))
      (command "zoom" "w" "non" p11 "non" p22)
   (command "ddedit" ent pause))))))
 (command "zoom" "w" "non" (car pllur) "non" (cadr pllur))
 (command "undo" "e")
 (princ))
;; Doan Van Ha - CadViet.com - 17/01/2014
;; Lisp thay doi Dim Override gan giong Find and Replace trong Word. Mac dinh chi co 1 option: Individually
(defun C:HA1( / VPCords pllur lst key p1 p2 p11 p22)
 (defun VPCords()
  ((lambda (offset) ((lambda (viewctr) (list (mapcar '- viewctr offset) (mapcar '+ viewctr offset))) (getvar "viewctr")))
   ((lambda (halfHeight aspectRatio) (list (* halfHeight aspectRatio) halfHeight))
    (* 0.5 (getvar "viewsize"))
    (apply '/ (getvar "screensize")))))
 (setq pllur (vpcords))
 (command "undo" "be")
 (princ "\nChon cac DIM da bi Override de Convert tung Dim...")
 (if (setq ss (ssget '((0 . "DIMENSION") (1 . "~"))))
  (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
   (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)
   (setq p1 (safearray-value ll) p2 (safearray-value ur))
   (setq p11 (polar p1 (angle p2 p1) (/ (distance p1 p2) 2)) p22 (polar p2 (angle p1 p2) (/ (distance p1 p2) 2)))
   (command "zoom" "w" "non" p11 "non" p22)
   (command "ddedit" ent pause)))
 (command "zoom" "w" "non" (car pllur) "non" (cadr pllur))
 (command "undo" "e")
 (princ))
 


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#14 quocphong_ctm

quocphong_ctm

    biết vẽ circle

  • Members
  • PipPip
  • 35 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 17 January 2014 - 10:44 AM

1). Sửa lisp để zoom 2 lần bounding box entity cho dễ nhìn.

2). Bổ sung thêm lệnh HA1 chỉ để dùng cho việc convert từng dim (vì không hiểu tại sao lại lỗi).

;; Doan Van Ha - CadViet.com - 16/01/2014
;; Lisp thay doi Dim Override gan giong Find and Replace trong Word. Co 2 option: All or Individually
(defun C:HA( / VPCords pllur lst key p1 p2 p11 p22)
 (defun VPCords()
  ((lambda (offset) ((lambda (viewctr) (list (mapcar '- viewctr offset) (mapcar '+ viewctr offset))) (getvar "viewctr")))
   ((lambda (halfHeight aspectRatio) (list (* halfHeight aspectRatio) halfHeight))
    (* 0.5 (getvar "viewsize"))
    (apply '/ (getvar "screensize")))))
 (setq pllur (vpcords))
 (command "undo" "be")
 (princ "\nChon cac DIM da bi Override de Convert...")
 (if (setq ss (ssget '((0 . "DIMENSION") (1 . "~"))))
  (progn
   (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
   (initget "All  Individually")
   (setq key (getkword "\nSelect type for convert [All/Individually] <All>: "))
   (if (not key) (setq key "All"))
   (cond
    ((= key "All")
     (foreach ent lst
      (entmod (subst (cons 1 "") (assoc 1 (entget ent)) (entget ent)))))
    ((= key "Individually")
     (foreach ent lst
      (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)
 (setq p1 (safearray-value ll) p2 (safearray-value ur))
 (setq p11 (polar p1 (angle p2 p1) (/ (distance p1 p2) 2)) p22 (polar p2 (angle p1 p2) (/ (distance p1 p2) 2)))
      (command "zoom" "w" "non" p11 "non" p22)
   (command "ddedit" ent pause))))))
 (command "zoom" "w" "non" (car pllur) "non" (cadr pllur))
 (command "undo" "e")
 (princ))
;; Doan Van Ha - CadViet.com - 17/01/2014
;; Lisp thay doi Dim Override gan giong Find and Replace trong Word. Mac dinh chi co 1 option: Individually
(defun C:HA1( / VPCords pllur lst key p1 p2 p11 p22)
 (defun VPCords()
  ((lambda (offset) ((lambda (viewctr) (list (mapcar '- viewctr offset) (mapcar '+ viewctr offset))) (getvar "viewctr")))
   ((lambda (halfHeight aspectRatio) (list (* halfHeight aspectRatio) halfHeight))
    (* 0.5 (getvar "viewsize"))
    (apply '/ (getvar "screensize")))))
 (setq pllur (vpcords))
 (command "undo" "be")
 (princ "\nChon cac DIM da bi Override de Convert tung Dim...")
 (if (setq ss (ssget '((0 . "DIMENSION") (1 . "~"))))
  (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
   (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)
   (setq p1 (safearray-value ll) p2 (safearray-value ur))
   (setq p11 (polar p1 (angle p2 p1) (/ (distance p1 p2) 2)) p22 (polar p2 (angle p1 p2) (/ (distance p1 p2) 2)))
   (command "zoom" "w" "non" p11 "non" p22)
   (command "ddedit" ent pause)))
 (command "zoom" "w" "non" (car pllur) "non" (cadr pllur))
 (command "undo" "e")
 (princ))
 

Bác Hạ ơi! Mình cảm ơn bác rất nhiều. TUy nhiên, mình vẫn thấy lisp đầu bác viết hay hơn lisp thứ 2 vì:

 

1. Chọn tất cả các đối tượng sẽ phát hiện dim nào đã bị edit;

2. có 2 option để lựa chọn: 1 là sửa toàn bộ dim về dim gốc; 2 là chỉnh sửa từng dim 1 theo ý người dùng.

 

Bác có thể sửa lỗi ở option 2 1 tí để lisp work properly được không ạ. 

 

Và khi Find and Replace, có cách nào Find next tự động (như word ấy) được không bác!

 

Lúc trước mấy lisp mình nhờ toàn do bác viết, work ngon lành lắm.


  • 0

#15 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 17 January 2014 - 10:53 AM

1). Bạn bị lỗi ở option thứ 2, mà tôi không biết do đâu (hay do bạn?) nên khổ sở để viết thêm lệnh HA1 chứ sung sướng gì đâu.

2). Dùng HA1 có OK không thì bạn cũng không nói. Nếu chưa dùng thì làm sao biết là có Find Next hay không? Nếu dùng rồi thì nó rõ ràng có Find Next đấy chứ, chỉ là nó "gần giống" Word thôi.

3). Chỉ 1 lisp mà có 2 lệnh thì lúc nào cần cái nào ta dùng cái ấy: HA hoặc HA1.

4). Nếu bị lỗi ở lệnh HA thì bạn F2 rồi chụp màn hình dán lên đây cho tôi coi với.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#16 quocphong_ctm

quocphong_ctm

    biết vẽ circle

  • Members
  • PipPip
  • 35 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 17 January 2014 - 11:11 AM

1). Bạn bị lỗi ở option thứ 2, mà tôi không biết do đâu (hay do bạn?) nên khổ sở để viết thêm lệnh HA1 chứ sung sướng gì đâu.

2). Dùng HA1 có OK không thì bạn cũng không nói. Nếu chưa dùng thì làm sao biết là có Find Next hay không? Nếu dùng rồi thì nó rõ ràng có Find Next đấy chứ, chỉ là nó "gần giống" Word thôi.

3). Chỉ 1 lisp mà có 2 lệnh thì lúc nào cần cái nào ta dùng cái ấy: HA hoặc HA1.

 

Sorry bác! lúc này mình có dùng lisp HA1 rồi nhưng do khi mình edit lại dim thì không nhắc lại lệnh nên không biết là có chức năng next.

 

Chân thành cảm ơn sự giúp đỡ rất nhiệt tình của bác! Hôm nào rãnh xin được mời bác buổi coffee. Mình ở TPHCM


  • 0

#17 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 17 January 2014 - 11:15 AM

Sorry bác! lúc này mình có dùng lisp HA1 rồi nhưng do khi mình edit lại dim thì không nhắc lại lệnh nên không biết là có chức năng next.

 

Chân thành cảm ơn sự giúp đỡ rất nhiệt tình của bác! Hôm nào rãnh xin được mời bác buổi coffee. Mình ở TPHCM

Mời coffee thì bao luôn tiền vé máy bay nhé! Thôi, đổi "Like" cho nó nhẹ vậy.


  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.