RSS

Category Archives: Software

Software

3 YẾU TỐ CƠ BẢN TẠO HIỆU ỨNG TRANG SÁCH BẰNG FLASH

3 YẾU TỐ CƠ BẢN TẠO HIỆU ỨNG TRANG SÁCH BẰNG FLASH

1–>> Việc đầu tiên cần làm là hiểu tính đối xứng khi lật trang để từ đó sẽ viết các hiệu ứng cho cách lật trang của mình.

Hình ảnh minh họa các bước khi lậ từ một trang trước sang trang sau:

Vậy là ta có 4 mặt tối thiểu cần tạo. Suy ra cần phải tạo ra 3 trang khác nhau cho một lần lật từ trang này sang trang kia hoặc ngược lại.

2–>> Khi bạn lật một trang này sang trang kia theo cách ta vẫn mở một trang sách thì bạn phải tạo một hiệu ứng  cho một đường line lật trang để tạo cảm giác tờ giấy từ từ cuộn từ trang này sang trang kia.

Bạn có thể nhìn hình minh hoạ dưới đây


Hàm tham khảo cho bạn viết đoạn hiệu ứng này là:  
function pageTurn():Void {
line.onMouseMove = function() {
line._x = _xmouse;
if (line._x>PAGE_EDGE) {
line._x = PAGE_EDGE;
} else if (line._x
line._x = PAGE_SPINE;
}
line._rotation = 45*(line._x-PAGE_SPINE)/page._width;
updateAfterEvent()
};
}
function pageRelease():Void {
delete line.onMouseMove;
}
var PAGE_SPINE:Number = page._x;
var PAGE_EDGE:Number = page._x+page._width;
var lineAngle:Number = 45;
line.hotspot.onPress = pageTurn;
line.hotspot.onRelease = pageRelease;
line.hotspot.onReleaseOutside = pageRelease;
 

3 –>> Tạo 3 trang đầu cho một lần lật : Do trang “a” là trang ban đầu và là trang tĩnh do đó ta chỉ cần một ảnh tĩnh là được.

3.1 Tạo trang “b”:

Tạo trang “c”:


Hình minh họa khi lật từ từ trang a sang trang C

Ứng dụng tạo ra một số hiệu ứng

Khi lật các trang ta chú ý cần tạo một số hiệu ứng để chúng sinh động hơn, đó là các hiệu ứng bóng, ánh sáng, bóng tôi..

 

Bạn có thể click vào những hình vẽ dưới đây để tham khảo một vài cách tạo hiệu ứng lật trang. Nhớ click và drag chuột khi lật trang.

Đây là bài mình sưu tầm trên mạng lâu lắm rồi và mình ứng dụng vào làm một số sản phẩm của mình đều chạy đã ok. Bạn nào dùng quen as 3 thì cố đọc hiểu rồi viết lại nhé! Chúc các bạn thành công.

Tặng các bạn link để tải một file mà nhóm mình đã viết trong chương trình phần mềm Ngữ Văn 6 mà mình đã sử dụng kỹ năng lật trang sách để viết. 

 
Leave a comment

Posted by on October 15, 2011 in Software

 

Web 3D

Xuất phát từ ý tưởng xây dựng một tổ chức sẽ chuyên phát triển các website 3D cho các doanh nghiệp trong tương lai. Trong năm vừa qua nhóm đã chuyển sang nghiên cứu nhiều về mảng web3d, mình muốn post bài này mong rằng có thể nhận được nhiều ý kiến đóng góp từ các bạn yêu web3d để nhóm có thêm nhiều kinh nghiệm hơn trong việc ra mắt các sản phẩm web3d tới được tốt trong thời gian tới.
Dưới đây là một vài hình ảnh trích trong phần models nhóm đang vẽ dở trong một dự án 3D hoá trường “Cao Đẳng Nghề Công Nghệ Cao Hà Nội” hợp tác giữa nhóm và trường. Bản demo này làm trong thời gian ngắn nhóm mình mới chỉ phác thảo qua khung của một ngôi trường, chưa đi vào chi tiết về nội dung cũng như làm vật liệu cho các model muốn gửi tới cho các bạn tham khảo.
 Hình ảnh tổng quan bên ngoài ngôi trường:

Hình ảnh khu vực các tầng nhà A :

 Hình ảnh minh hoạ trong một phòng học thực hành khoa CNTT:

Thiết kế Web 3D với O3D

 
O3D là gì ?
O3D là một web API mã nguồn mở nhằm tạo ra các hiệu ứng tương tác và tăng tốc 3D cho các ứng dụng web.
Khởi đầu là một plug-in hỗ trợ đa nền tảng, nhưng Google  hi vọng, cuối cùng công nghệ  này sẽ được tích hợp trực tiếp  vào trong các trình duyệt. O3D cung cấp một API cho phép các chương trình  JavaScript trên nền Web  của các nhà phát triển  có thể kết nối trực tiếp  tới vi xử lý đồ họa  của máy, giúp cho webgame cũng như các ứng dụng khác chạy mượt mà hơn

Engine Web3D

 

Engine Web3D là gì?

Web3D là công nghệ đồ hoạ 3 chiều dựa vào các phần mềm thiết kế và được triển khai trên nền web.

Mỗi Engine 3D thông thường bao gồm 3 phần chính đó là:
+ Mô hình tĩnh (Render)
+ Mô hình động (Animation)
+ Trí tuệ nhân tạo (Aritifical Intelligence – AI).

Trong công nghệ 3D thì AI thật sự quan trọng khi triển khai Game Engine. Trên ứng dụng nền Web3D Engine thì phần Render là quan trọng nhất. Điều này cho thấy Web3D sẽ sử dụng mô hình tĩnh để từ đó dựng nên mô hình động và xử lý theo lập trình AI trên nền ngôn ngữ lập trình logic.

Điểm khác biệt lớn nhất của Web3D là khả năng cung cấp cho người dùng tính tương tác thật với những hiệu ứng về nghe và nhìn. Do đó, người dùng có thể cảm nhận, khám phá sản phẩm không khác gì trong thực tế.
Với Web3D, những nhà thiết kế thỏa sức sáng tạo mà không còn lo ngại vì tác phẩm của mình quá lớn về dung lượng để triển khai trên web. Người xem cũng thích thú và kinh ngạc trước sự sống động từ các tác phẩm. Không cần cài đặt, tất cả những gì người sử dụng cần để xem sản phẩm 3D chỉ đơn giản là trình duyệt web, con chuột và bàn phím; không cần cài đặt thêm bất cứ chương trình nào vì bản thân Engine 3D đã được tự động trên máy chủ khi cung cấp trực tuyến.

Theo ông Phan Công Chánh, Giám đốc kinh doanh Công ty Cổ phần CloudForces, đơn vị phát triển công nghệ Web3D (www.web3d.com.vn) cho biết, phần chính của công nghệ này là Engine Web3D và được CloudForces xây dựng hơn 3 năm trên các môi trường phát triển như .NET 2.0, Maya, VRay, 3DS Max, Flash…“Điểm mấu chốt của việc triển khai Web 3D tại Việt Nam là do chúng ta chưa có 1 Engine 3D nào đủ sức triển khai các dự án Web 3D trên Internet vừa nhanh lại vừa đáp ứng tốt các yêu cầu về kỹ thuật (chạy ổn định, kiến trúc mở, dễ phát triển, nâng cấp)”, ông Chánh chia sẻ.
Thực tế cho thấy, đến nay hầu như tại Việt Nam vẫn chưa có ứng dụng về Web3D hoàn chỉnh bởi nhiều yếu tố về con người và công nghệ. Và sản phẩm Engine Web3D made in VietNam đã ra đời sau hơn thời gian dài xây dựng và phát triển bởi nhóm những cựu Sinh viên khoa CNTT của Trường Đại học Bách Khoa TP.HCM trong việc ứng dụng các mô hình 3D như khám phá không gian thật.
Để cho ra sản phẩm Engine Web3D, các thành viên đã làm việc đêm ngày để phác thảo, xây dựng, lập trình và đồ họa thông qua những công nghệ mới. Ý tưởng được hiện thực làm cho các thành viên như có thêm một nghị lực về một công nghệ Engine Web3D khi giới thiệu và triển khai tại Việt Nam và Singapore.

Engine Web3D và ứng dụng trong cuộc sống

– Trong các dự án mô hình tòa nhà tương tác, hay bất động sản, nếu được thiết kế và ứng dụng Web3D, khách hàng sẽ dễ hình dung rõ nét từ kiến trúc tổng thể dự án đến chi tiết của từng căn hộ, cũng như bố trí khung cảnh bài trí xung quanh. Hơn thế, khách hàng dễ dàng đến tham quan dự án, phòng khách, phòng ngủ, phòng tắm, cầu thang… đến các chi tiết nhỏ nhất như việc bố trí, trang trí nội thất, tương tác với các thiết bị nghe nhìn… như thể việc tham quan đang diễn ra trước mắt chỉ với trình duyệt Web và click chuột.

Khi có một yêu cầu từ phía khách hàng, mỗi mô hình tĩnh mà khách hàng yêu cầu đều sẽ được mô hình hóa lại trên mô hình động và sử dụng Engine Web3D và các thuật toán lập trình AI nhằm tăng tính tương tác cao hơn cho khách hàng. Khi đó, chỉ cần ngồi ở nơi làm việc là khách hàng có thể xem và góp ý về sản phẩm, giúp tiết kiệm thời gian cho cả đôi bên.

– Engine Web3D còn được ứng dụng nhiều trong các mô hình showroom, mô hình xe hơi, mô hình sản phẩm bởi tính năng tiếp cận hiển thị màu sắc ở mức độ chất lượng cao và chi tiết khi tương tác bằng click chuột.
Ngoài ra, Engine Web3D còn được ứng dụng trong lĩnh vực thiết kế trực tuyến chi tiết sản phẩm để khách hàng có thể đưa thông điệp quảng cáo của mình tới người tiêu dùng thông qua Tooltips. Với tính năng này, mỗi sản phẩm của khách hàng yêu cầu, sau khi được mô hình động, mỗi chi tiết trong sản phẩm này sẽ được hiển thị chi tiết như tương tác thật.

Nói một cách dễ hình dung, khi một dự án phòng ở được sử dụng Engine Web3D để đồ họa và đưa lên trình duyệt Web, người dùng quan tâm chỉ cần khi vào tham quan trực tuyến có thể sử dụng chuột để rê vào mỗi vật dụng. Khi đó, tooltips sẽ giúp truyền tải thông điệp của khách hàng tới người dùng như cho người dùng biết đó là vật dụng gì, xuất xứ ở đâu, do ai sản xuất…

Đối với những Game Online trực tuyến thì Engine Web3D cũng sẽ mang lại nhiều ứng dụng so với Game Engine nhất là về tối ưu tốc độ và chất lượng hiển thị nhân vật. Trong Web Game, việc lập trình AI được dùng cao nhất trong Game Engine thì Web3D Engine cũng sẽ ứng dụng giải thuật này tối ưu nhằm tăng tính tương tác cao cho người chơi trên Web.

Theo : http://ide.edu.vn

 
Leave a comment

Posted by on October 15, 2011 in Software

 

Kỹ năng CNTT của Nhật Bản

Một trong những chuẩn kỹ năng CNTT của Nhật Bản. Có rất nhiều chuẩn kỹ năng, về mọi vấn đề của CNTT như FE, SW, NW, DB ….. Trong đó FE là chuẩn kỹ năng đầu tiên – Kỹ sư CNTT cơ bản (Fundamental IT Engineer),
Đây là một trong những chuẩn kỹ năng quan trọng đối với sinh viên CNTT, gần đây ngày càng có nhiều công ty tuyển nhân sự theo hình thức thi tương tự FE và có nhiều trường đã xem đây như là một chuẩn đầu ra. Ở nước ta thì có VITEC tổ chức thi, mỗi năm 2 lần vào tháng 4 và tháng 10, hình như lệ phí rất rẻ.Về tài liệu ôn thi thì bên VITEC có 4 cuốn tuơng ứng với 4 nội dung là: Computer System, System development and operations, Internal design and programming, Network and database technologies.

Các bạn có thể tham khảo lấy tài liệu về ôn tại đây: http://sites.google.com/site/chuancnttnhatban/cac-chuan-ky-su-cntt-nhat-ban

Nhìn chung là đề thi không quá khó nhưng rất rộng, cần phải có ôn luyện mới đỗ được, không chuẩn bị tử tế là tiêu ngay. Mọi thông tin về kỳ thi, đăng ký thi các bạn xem trên http://www.vitec.org.vn

Chúc các bạn thành công !

Hoan Phan

 
Leave a comment

Posted by on August 5, 2011 in Software

 

VẤN ĐỀ LOCKING ĐỐI VỚI CURSOR

  1. 1.      Có 2 chế độ thực hiện việc khóa và nhả khóa đối với cursor
    Chế độ 1
    : Cursor locking
  • Cách thực hiện khóa và nhả khóa trong chế độ này được xác định thông qua câu lệnh set transaction isolation level hoặc select .. with (…lock).
  • Các thiết lập cũng như về isolation đối với cursor hoàn toàn giống với các câu lệnh select bình thường. Tức là khóa sẽ được giữ kể từ khi các dòng dữ liệu được lấy ra cho đến hết giao tác (nếu isolation level là repeatable read hoặc serializable) hoặc được nhả ra ngay sau khi đã lấy được các dòng dữ liệu (nếu isolation level là các mức còn lại).
  • Vấn đề cần quan tâm đối với cursor là thời điểm mà các dòng dữ liệu thực sự được lấy ra. Thời điểm này sẽ phụ thuộc vào loại cursor được khai báo trong câu lệnh Declare Cursor (xem thêm trong Book Online về câu lệnh này
  • Cú pháp câu lệnh Declare Cursor:

DECLARE cursor_name CURSOR[ LOCAL | GLOBAL ][ FORWARD_ONLY | SCROLL ][ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ][ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ][ TYPE_WARNING ]FOR select_statement[ FOR UPDATE [ OF column_name [ ,…n ] ] ]

  • Nếu loại cursor là static hay keyset thì các dữ liệu thỏa mãn câu lệnh select sẽ thực sự được lấy ra ngay khi ta gọi lệnh Open Cursor. Nghĩa là, ngay sau câu lệnh này thì các dòng dữ liệu bắt đầu bị khóa. Khóa có thể được nhả ngay hoặc được giữ đến cuối giao tác tùy theo isolation level.
  • Nếu loại cursor là Dynamic thì sau câu lệnh Open Cursor dữ liệu vẫn chưa được lấy ra nên vẫn chưa có dòng nào bị khóa. Dữ liệu chỉ được lấy ra sau từng câu lệnh Fetch. Do đó, sau mỗi câu lệnh Fetch, dòng dữ liệu được lấy ra sẽ bắt đầu được khóa. Như vậy, các dòng dữ liệu trong cursor sẽ được khóa 1 cách lần lượt. Việc nhả khóa cũng tương tự như trên.
  • Nếu loại cursor là Fast forward-only thì việc các dòng dữ liệu được lấy ra khi nào là do thành phần query optimizer của sql server quyết định.Do đó, ta không xác định được thời điểm các dòng dữ liệu bị khóa.
  1. Chế độ 2: Cursor concurrency
  • Cách thực hiện khóa và nhả khóa trong chế độ này được xác định thông qua các tùy chọn khi ta khai báo cursor
  • Cú pháp câu lệnh Declare Cursor:

DECLARE cursor_name CURSOR[ LOCAL | GLOBAL ][ FORWARD_ONLY | SCROLL ][ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ][ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ][ TYPE_WARNING ]FOR select_statement[ FOR UPDATE [ OF column_name [ ,…n ] ] ]

  • Nếu thiết lập tùy chọn SCROLL_LOCKS:

Các dòng dữ liệu sẽ lần lượt được khóa bằng update lock ngay sau khi được lấy ra bằng câu lệnh fetch. Thời điểm các dòng dữ liệu được nhả khóa sẽ phụ thuộc vào việc Cursor này có được thao tác bên trong 1 transaction hay không.

  • Nếu như Cursor không được thao tác bên trong 1 transaction thì các dòng dữ liệu sẽ được nhả khóa ngay sau khi dòng kế tiếp được fetch.
  • Nếu như Cursor được thao tác bên trong 1 transaction thì tất cả các dòng dữ liệu chỉ được nhả khóa sau khi kết thúc transaction (bất kể isolation level là gì).
  • Nếu thiết lập tùy chọn  READ_ONLY: Không có dòng dữ liệu nào bị khóa
  • Nếu thiết lập tùy chọn  OPTIMISTIC: Không có dòng dữ liệu nào được khóa. Có thể xem thêm về tác dụng tùy chọn này trong Book Online với từ khóa cursors [SQL Server], concurrency

LOCK ESCALATION

  • Khi 1 transaction yêu cầu đặt lock (shared lock hay exclusive lock) lên 1 số dòng dữ liệu thì sql server sẽ tự động đặt intent lock lên các page hay table chứa các dòng dữ liệu đó (có thể xem intent lock là 1 dạng lock tiềm tàng (potential) vì nó có khả năng nâng lên thành 1 lock bình thường như shared lock hay exclusive lock).
  • Khi số lượng lock bên trong 1 transaction vượt qua 1 nguỡng giới hạn (threshold) thì intent lock trên table sẽ được nâng lên (escalate) thành 1 lock ở cấp cao hơn (intent exclusive hay exclusive). Đồng thời, các lock trên các dòng, page sẽ được giải phóng.
  • Đối với SQL Server 6.x, người dùng có quyền thiết lập threshold.
  • Đối với SQL Server 2000, thông số threshold này được tự động thiết lập.
  • Đối với SQL Server 2005 vấn đề Lock Escalation là rất phức tạp
 
Leave a comment

Posted by on July 29, 2011 in Software

 

ASP.NET cơ sở

Chương 1: LÀM QUEN VỚI ASP.NET
1. Giới thiệu về ASP.NET
– Là một công nghệ mang tính cách mạng dùng để phát triển các ứng dụng về mạng hiện nay cũng như trong tương lai.
– Là một phương pháp tổ chức hay khung tổ chức (framework) để thiết lập các ứng dụng mạnh cho mạng dựa trên CLR (Common Language Runtime) chứ không phải là một ngôn ngữ lập trình.

2. Khác biệt giữa ASP.NET và ASP
– ASP.NET được xây dựng lại từ số không, được thay đổi tận gốc rễ và phát triển phù hợp với yêu cầu hiện nay.
– ASP được thiết kế riêng biệt và nằm ở tầng phía trên hệ điều hành Windows và Internet Information Server, do đó các công dụng của nó hết sức rời rạc và giới hạn; trong khi đó ASP.NET là một cơ cấu trong các cơ cấu của hệ điều hành Windows dưới dạng nền hay khung .NET (.NET framework), do vậy, ASP.NET không những có thể dùng các object của các ứng dụng cũ mà còn có thể sử dụng tất cả mọi tài nguyên mà Windows có.
– Tập tin của ASP.NET có phần mở rộng là .aspx, còn tập tin của ASP có phần mở rộng là .asp
– Tập tin của ASP.NET được phân tích cú pháp (parsed) bởi XSPISAPI.DLL, còn tập tin của ASP được phân tích bởi ASP.DLL
– ASP.NET là kiểu mẫu lập trình phát động bằng sự kiện (event driven), còn ASP được thi hành theo thứ tự tuần tự từ trên xuống dưới.
– ASP.NET sử dụng trình biên dịch (compiled code) nên rất nhanh, còn ASP dùng trình thông dịch (interpreted code) do đó hiệu suất và tốc độ phát triển chậm hơn.
– ASP.NET hỗ trợ gần 25 ngôn ngữ lập trình mới với .NET và chạy trong môi trường biên dịch (compiled enviroment), còn ASP chỉ chấp nhận VBScript và JavaScript nên ASP chỉ là một scripted language trong môi trường thông dịch (in the interpreter environment). Không những vậy, ASP.NET còn kết hợp nhuần nhuyễn với XML để chuyển vận các thông tin qua mạng.
– ASP.NET hỗ trợ tất cả các browser và quan trọng hơn nữa là hỗ trợ các thiết bị lưu động (mobiles devices). Chính các thiết bị lưu động, mà mỗi ngày càng phổ biến, đã khiến việc dùng ASP trong việc phát triển mạng nhằm vươn tới thị trường mới đó trở nên vô cùng khó khăn.

3. Phương pháp làm việc trong mạng
a. Kiểu mẫu Request / Response
Kiểu mẫu này chính là toàn bộ phương pháp làm việc theo kiểu Client / Server hiện dùng với ASP. Gồm 4 bước:
– Client (thông qua Internet Browser) xác định vị trí của Web Server qua 1 URL, ví dụ như: http://www.tuvantinhoc.com
– Client sẽ yêu cầu được tham khảo 1 trang trong mạng đó và thường là trang chủ (home page), ví dụ như: index.html hay default.htm.
– Server đáp ứng bằng cách hoàn trả hồ sơ mà Client đã yêu cầu trước đây.
– Client nhận được hồ sơ gửi về và hiển thị trong browser của mình.
* Lưu ý: một khi Client đã nhận được hồ sơ rồi thì quá trình trao đổi qua lại kết thúc ngay. Sau đó Server và Client không còn liên hệ.

b. Kiểu mẫu event-driven
– Trong kiểu mẫu này, Server sẽ không chờ Client yêu cầu tham khảo 1 trang nào đó trong mạng mà Server đã bố trí và kế hoạch sẵn trước tất cả mọi tình huống để có thể hàng động kịp thời mỗi khi Client quyết định làm 1 điều gì đó. Ta gọi đó là ‘response to your action, còn trong kiểu mẫu trước là ‘response to your request’. Như vậy, ASP.NET có thể phát hiện ra các hành động của Client để phản ứng cho thích hợp.
– Server có thể làm được điều này là dựa vào tiến trình xử lý linh động ở Client (còn gọi là clever client-side processing) để thực hiện kiểu mẫu event-driven này. Tiến trình xử lý ở Client xảy ra khi ta bố trí mã nguồn thích hợp mà Client có thể hiểu được trong các trang ta gửi về cho Client.
* Lưu ý: mặc dù các web page đều nằm ở Server nhưng mã nguồn lại có thể được thực hiện và xử lý hoặc ở Server hoặc ở Client (Server-Side processing và Client-Side processing) tuỳ theo cách bố trí. Các mã nguồn ở Client và Server là hoàn toàn khác biệt và không có tác động hỗ trợ với nhau. Có nghĩa là máy Client sẽ chịu trách nhiệm thi hành các mã nguồn dành cho mình cũng như máy Server chỉ chạy các mã nguồn dành cho Server.
Thông tin hay nội dung cần thiết ở Server sẽ được chuyển đi dưới dạng ‘plain text command’ để thực hiện các hiệu ứng động (dynamic effect) ở máy Client, ví dụ như: thay đổi hình ảnh (image rollover) hay hiển thị một thông điệp (message box). ASP.NET sẽ dùng các ngôn ngữ mới có trình biên dịch (compiled languages) như C# hay VB.NET để soạn các mã nguồn trong các trang Web ở Server.

4. Net Framework
a. CLR (Common Language Runtime)
– CLR là môi trường để quản lý sự thi hành các mã nguồn (manage the execution of code) mà ta đã soạn ra và biên dịch (write and compile code) trong các ứng dụng. Tuy nhiên, khi biên dịch mã nguồn, ta biên dịch chúng ra thành 1 ngôn ngữ trung gian gọi là Microsoft Intermediate Language (MSIL). Chính MSIL trung gian này là ngôn ngữ chung cho tất cả các ngôn ngữ .NET hiện có, do đó ASP.NET cũng được biên dịch (compile) ra MSIL. Trong khi biên dịch như vậy, các ứng dụng cũng sản xuất ra những thông tin cần thiết để tự quảng cáo chính mình, gọi là metadata. Đến khi chạy 1 ứng dụng, CLR sẽ tiếp quản (take-over) và lại biên dịch (compile) mã nguồn 1 lần nữa ra thành ngôn ngữ gốc (native language) của máy tính trước khi thi hành những tác vụ trong mã nguồn đó.

b. Net Framework Classes
Mọi thứ trong .NET đều là object. Ví dụ như: các trang ASP.NET, các hộp thông điệp hay các nút nhấn.
Các object được tổ chức thành từng nhóm riêng biệt nhe trong 1 thư viện để dễ dàng sử dụng, các nhóm như vậy gọi là namespaces, ta sẽ dùng các namespaces này để nhập (import) các class cần thiết cho ứng dụng của mình.

5. Cài đặt ASP.NET
Để thực thi trang ASP.NET cần phải cài đặt:
– Internet Information Services (IIS) và tạo thư mục ảo Virtual Directory.
– MS Visual Studio.NET

Chương 2. XÂY DỰNG TRANG ASP.NET

I. Phân tích trang ASP.NET đầu tiên

CHƯƠNG 2. XÂY DỰNG TRANG ASP.NET
1. Phân tích ví dụ đầu tiên
<%@ Page Language=”vb” AutoEventWireup=”false” Codebehind=”WebForm1.aspx.vb” Inherits=”welcome1.WebForm1″%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<script runat=”server”>
Sub Page_Load(Sender As Object, E As EventArgs)Handles MyBase.Load
lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
</script>
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name=”GENERATOR” content=”Microsoft Visual Studio .NET 7.1″>
<meta name=”CODE_LANGUAGE” content=”Visual Basic .NET 7.1″>
<meta name=”vs_defaultClientScript” content=”JavaScript”>
<meta name=”vs_targetSchema” content=”http://schemas.microsoft.com/intellisense/ie5″&gt;
</HEAD>
<body MS_POSITIONING=”GridLayout”>
<form id=”Form1″ method=”post” runat=”server”>
<asp:Label id=”lblWelcome” style=”Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px” runat=”server”
Width=”328px” Height=”56px”></asp:Label>
</form>
</body>
</HTML>

Ta nhận thấy code của trang này được chia thành 3 phần riêng biệt:
Phần 1: <%@ Page Language=”VB” … %> được gọi là Page Directives. Phần này cung cấp cho ASP.NET những thông tin đặc biệt để ASP.NET biết cách mà xử lý cũng như những thông tin dùng trong tiến trình biên dịch (during the compiling process); trong đó, bạn muốn ASP.NET dùng VB.NET làm ngôn ngữ lập trình mặc định (default programming language) cho trang web.

Phần 2: <script runat=Server>…</Script>: còn gọi là Code Declaration Block giống như mã ở Client Side nhưng khác một chút là có kèm theo Runat=Server, đây chính là chỉ thị cho ASP.NET biết thi hành trang này ở Server Side, kiểm soát mọi công việc cần thiết và mã được biên dịch (compiled) thành MSIL. Có thể đặt phần này ở bất kỳ đâu trong trang web.
Sub Page_Load(sender as Object, e as EventArgs) Handles MyBase.Load
lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
Phần code này tạo ra một Procedure có tên là Page_Load() mặc định cho các trang ASP.NET giống như Form_Load trong lập trình ứng dụng. Khi trang được trình bày, ASP.NET sẽ gắn hàng chữ “Xin chào mừng đến với ASP.NET” vào label lblWelcome.

Phần 3: <html>…<html>: đây là nơi bắt đầu code HTML. Phần này chính là hình thức trình bày nội dung của trang được chế biến bởi code ASP.NET trước khi gửi về và hiển thị trong browser của Client. Ngoài ra, ASP.NET cũng cho phép kèm theo những chỉ thị (instructions) trong Code Render Block bắt đầu bằng <% và chấm dứt bằng %>.
Ví dụ: <%Response.Write(“My first page <p>”)%>
để đưa ra những gì bạn muốn làm vào bên trong lòng mã nguồn của phần HTML

1. Phân định code và nội dung
a. Code Inline Model:
Trong kiểu mẫu này, code được viết và giữ (code section) trong các trang ASP.NET nhưng không trộn lẫn với HTML dành cho phần nội dung (Content section):
<%– This is the code section (ASP.NET Code) –%>
<script runat=Server>
Sub Page_Load(sender as Object, e as EventArgs) Handles MyBase.Load
lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
</script>
<%–This is the content section (HTML Code)–%>
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name=”GENERATOR” content=”Microsoft Visual Studio .NET 7.1″>
<meta name=”CODE_LANGUAGE” content=”Visual Basic .NET 7.1″>
<meta name=”vs_defaultClientScript” content=”JavaScript”>
<meta name=”vs_targetSchema” content=”http://schemas.microsoft.com/intellisense/ie5″&gt;
</HEAD>
<body MS_POSITIONING=”GridLayout”>
<form id=”Form1″ method=”post” runat=”server”>
<asp:Label id=”lblWelcome” style=”Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px” runat=”server”
Width=”328px” Height=”56px”></asp:Label>
</form>
</body>
</HTML>

b. Code Behind Model
Một kiểu mẫu khác được áp dụng để phân định code và nội dung là phần code được sắp xếp trong một tập tin khác riêng biệt ở một chỗ lưu trữ khác hẳn chỗ chứa các trang ASP.NET, dĩ nhiên bạn phân chia như vậy thì phải sắp xếp để 2 tập tin riêng biệt đó có thể làm việc với nhau và được biên dịch cũng giống như kiểu mẫu Code Inline.
Public Class WebForm1
Inherits System.Web.UI.Page
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
End Class

2. Tiến trình xử lý
Khi có yêu cầu tham khảo trang web, trước hết ASP.NET sẽ biên dịch (compile) code ở phần Code Declaration Block trong trang AsP.NET. Code được biên dịch thành MSIL, CLR quản lý và sau đó biên dịch thành ngôn ngữ gốc của máy (native machine language) trước khi trang được gửi về browser của Client. Code trong trang web sẽ được lưu trữ một nơi riêng biệt, CLR sẽ thăm chừng luôn phòng trường hợp có thay đổi mã nguồn thì lập tức CLR sẽ biên dịch lại 1 cách tự động trang web đó.
Sau khi trang web được biên dịch, AsP.NET bắt đầu tiến trình xử lý tất cả nguồn mã kể cả các sự cố (events) ví dụ như bạn gõ vài chữ trong hộp Text box hoặc click vào một nút nào đó thì AsP.NET engine sẽ nghiên cứu, khảo sát biến cố đó để quyết định cách phản ứng và thi hành để đáp ứng lại biến cố theo kế hoạch lập trình đã quy định trước. Tiếp theo, AsP.NET sẽ biến đổi tất cả các Server Control trong trang web ra thành những yếu tố HTML tương đương.
Ví dụ: <asp:Label> control thành HTML <span></span> để hiển thị hàng chữ “Xin chào mừng đến với AsP.NET”
Cuối cùng, AsP.NET sẽ gửi kết quả dưới dạng HTML đến Client Browser, Client Browser chỉ nhận được trang web dưới dạng HTML thuần túy. Như vậy có thể dùng bất cứ một web browser nào (không nhất thiết MSIL) cũng có thể hiển thị các trang AsP.NET.

II. Cấu trúc điều khiển
1. Phát biểu If Then
If condition Then
[statements]
End If
Cho phép thực hiện khối lệnh (statements) trong cấu trúc này khi điều kiện (condition) trong phát biểu If là đúng
Khối phát biểu có một phát biểu không xuống hàng thì không cần End If
Ví dụ:
Dim x=10, y=0
If x>0 Then y+=x

2. Phát biểu điều khiển If…Then…Elseif…End if
If condition Then
[statements]
ElseIf elseifconditions Then
[elseifStatements]
Else
[elseStatements]
End If

3. Phát biểu rẽ nhánh Select…Case
Select Case TestExpression
Case Expressionlist
[Statements]
Case Else
[elseStatements]
End Select

TestExpression: là biểu thức bắt buộc, giá trị thuộc một trong các loại dữ liệu sau: Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, Short, Single, String.
Expressionlist: phát biểu yêu cầu nằm trong Case, trong Case có thể là mệnh đề hay biểu thức, chúng cách nhau dấu “,”. Ngoài ra các biểu thức trong Case còn sử dụng từ khóa To để diễn giải khoảng giá trị, Is là biểu thức so sánh.
Ví dụ1:
Case 1 To 4,5,6,7, To 9,11,13, Is>MaxNumber
Ví dụ 2:
Dim Number As Integer=8
Select Number
Case 1 to 5 Response.write(“Từ 1 đến 5”)
Case 6,7,8 Response.write(“Từ 6 đến 8”)
Case 8 to 10 Response.write(“Từ 8 đến 10”)
Case Else Response.write(“Không tồn tại giá trị”)
End Select

4. Phát biểu lặp Do…Loop

Dạng 1:

Do While condition ‘Lặp trong khi
[statements]
[Exit Do]
Loop
Do Until condition ‘Lặp cho đến khi
[statements]
[Exit Do]
Loop

Dạng 2:
Do
[statements]
[Exit Do]
[statement]
Loop {While/Until} condition
+ while: vòng lặp được thực hiện cho đến khi condition có giá trị False
+ until: vòng lặp được thực hiện cho đến khi condition có giá trị True
+ Exit Do: cho phép thoát khỏi vòng lặp Do…Loop
Ví dụ: Phát biểu Do…Loop
Dim Check As Boolean=True
Dim Counter As Integer=0
‘ Vòng lặp ngoài với biến Check
Do
Do while Counter<20
‘ Vòng lặp trong biến Counter
Counter+=1
If Counter=10 then
Check=False
Exit Do
‘ Thoát khỏi vòng lặp trong
End if
Loop
‘ Kết thúc vòng Do…Loop ngoài với biến Counter
Loop Until Check=False
‘ Kết thúc vòng Do…Loop ngoài với biến Check

5. Phát biểu while…End while
Thực hiện nhiều phát biểu khi điều kiện condition có giá trị True như cú pháp sau:
while condition
[statements]
End while

+ condition: là biểu thức luận lý bắt buộc, có giá trị True hay False, nếu condition=Nothing thì condition tương với False.
+ statements: một hoặc nhiều phát biểu thực hiện trong khối While khi condition có giá trị True.
Ví dụ: Phát biểu while…End while
Dim Counter As Integer=0
while Counter<20
Counter+=1
End while
Debug.writeline(“Giá trị của biến Counter: ” & Counter)

6. Phát biểu with…end with
Phát biểu được sử dụng trong khi tham chiếu đến đối tượng đơn, hay cấu trúc; with…end with thực hiện nhiều phát biểu như cú pháp sau:
with object
[statements]
end with

+ object: là biểu thức bắt buộc, có giá trị với bất kỳ kiểu dữ liệu, bao gồm cả các kiểu cơ bản nhất.
Ví dụ: biến myLabel là một biến kiểu Label, sau đó sử dụng phát biểu with để gán các thuộc tính vào biến:
with myLabel
.Height=2000
.width=1000
.Text=”Login me!”
end with

Trong trường hợp đối tượng có thuộc tính mẹ, có thể sử dụng phát biểu with
Ví dụ:
with myObject
.Height=2000
.width=1000
.Text=”Login me!”
with .Font
.Color=Red ‘ Tương đương myObject.Font.Color=Red
.Bold=True ‘ Tương đương myObject.Font.Bold=True
end with
end with

7. Phát biểu For Each…In …Next: lặp lại một nhóm phát biểu cho mỗi phần tử trong mảng hay tập hợp:
For Each element In group
[statements]
[Exit For]
[statements]
Next [element]
+ element: bắt buộc, sử dụng biến này nhận giá trị của phần tử trong (In) mảng hay tổ hợp, kiểu dữ liệu của element phải cùng kiểu dữ liệu của phương thức trong mảng hay tổ hợp group
+ group: biến đối tượng bắt buộc và được tham chiếu như một mảng hay tổ hợp.
Ví dụ: tìm kiếm đối tượng có Caption là Hello trong tập hợp đối tượng MyCollection
Dim Found As Boolean=False
Dim MyObject, MyCollection As Object
For Each MyObject In MyCollection
If(CStr(MyObject.Text=”Hello”)) Then
Found=True
Exit For
End if
Next

8. Phát biểu For…Next
For counter=start To end [Step step]
[statements]
[Exit For]
[statements]
Next [counter]
+ Counter: bắt buộc, kiểu dữ liệu thông thường là Integer
+ Start: bắt buộc, chính là giá trị xuất phát của biến counter, trong trường hợp này start có cùng kiểu dữ liệu với counter và nằm trong phạm vi cho phép.
+ end: bắt buộc, chính là giá trị kết thúc của counter, trong trường hợp này end có cùng kiểu dữ liệu với counter và nằm trong phạm vi cho phép.
+ step: nếu không cung cấp thì mặc định là 1
Trong trường hợp giá trị start lớn hơn giá trị end phải có giá trị (-).
Ví dụ: vòng lặp For tăng
Dim I As Integer
Dim J As Integer
Dim K As Long
For I=0 To 10
For J=0 To 10
K=I+J
Debug.writeLine(K)
Next J
Next I

Ví dụ 2: Vòng For với biến words có giá trị giảm dần, Digit có giá trị tăng dần
Dim words As Integer
Dim Digit As Integer
Dim MyString As String
For words=10 To 1 Step -1
For Digit=1 To 9
MyString=MyString & CStr(Digit)
Next Digit
MyString=Mystring & ” ”
Next words

III. Các phép toán cơ bản
1. Phép toán trừ bằng (-=)

Cú pháp: variable -= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Debug.writeline(“var1: ” & var1)
Var1 -= Var2
Debug.writeLine(“Var1: ” & Var1)

2. Phép toán cộng bằng (+=)
Cú pháp: variable += expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Dim strSQL As String
Debug.writeline(“var1: ” & var1)
Var1 += Var2
Debug.writeLine(“Var1: ” & Var1)
strSQL =”Select * From tblCustomer”
Debug.writeLine(“strSQL: ” & strSQL)
strSQL +=” where active=1″
Debug.writeLine(“strSQL: ” & strSQL)

3. Phép toán nhân bằng (*=)
Cú pháp: variable *= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Debug.writeline(“var1: ” & var1)
Var1 *= Var2
Debug.writeLine(“Var1: ” & Var1)

4. Phép toán chia bằng (/=)
Cú pháp: variable /= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Debug.writeline(“var1: ” & var1)
Var1 /= Var2
Debug.writeLine(“Var1: ” & Var1)
* Lưu ý: phép chia bằng (/=) có lấy lẻ

5. Phép toán chia bằng (\=) lấy phần nguyên
Cú pháp: variable \= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=3
Debug.writeline(“var1: ” & var1)
Var1 \= Var2
Debug.writeLine(“Var1: ” & Var1)
* Kết quả: var1: 10
var1: 3

6. Chuyển đổi dữ liệu
Cách 1: dùng Ctype
Dim AgeString As String
Dim Age As Integer
AgeString=”25″
Age=Ctype(AgeString, Integer)

Cách 2:
Dim AgeString
Dim Age
AgeString=”25″
Age=Cint(AgeString)

Ví dụ làm một trang web tin tức  :

asp_TinTuc 1

Ta thiết kế 1 CSDL để lưu tin tức
– Làm menu động, lấy dữ liệu từ CSDL

– Ta cần 1 bảng chứ menu
– Tiếp theo là bảng đăng nhập
– 1 Bảng để lưu thông tin bài viết

Vì thời gian ở đây chỉ để hiển thị, ko tính toán gì nên để là nvarchar cho dễ thao tác

—————————
Phần Visual để làm

– Ta add vào server explorer để thao tác cho dễ, đỡ phải mở sql server management lên
0. Connectstring từ web đến CSDL (mở web.config)

<appSettings/>

<connectionStrings>
<add name=”ConnectString” connectionString=”Data Source=MANHHUNG-PC;Initial Catalog=TinTuc;Integrated Security=True”/>
</connectionStrings>

<system.web>

1. Tạo 1 fodel App_Code rồi tạo 1 lớp để thao tác với csdl (class: AccessData)

để lấy được connectstring trong web.cofig, bạn phải khai báo using System.Configuration; (đã có sẵn)
– rồi lấy cái name (như video)
điều này rất thuận lợi khi bạn up lên host, chỉ cần sửa connectstring trong webconfig là xong
– Thêm khai báo using System.Data.SqlClient;

public class AccessData
{
private string ConnectString = ConfigurationManager.ConnectionStrings["ConnectString"].ConnectionString;

public SqlConnection GetConnect()
{
return new SqlConnection(ConnectString);
}

//Hàm trả về 1 datatable
public DataTable GetTable(string sql)
{
SqlConnection con = GetConnect();
SqlDataAdapter ad = new SqlDataAdapter(sql, con);
DataTable dt = new DataTable();
ad.Fill(dt);
con.Close();
return dt;
}

//Hàm thực thi lệnh executenonquery
public void ExeCuteNonquery(string sql)
{
SqlConnection con = GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
con.Close();
cmd.Dispose();
}

//Hàm thực thi lệnh ExecuteScalar để trả về 1 giá trị
public string ExecuteScalar(string sql)
{
SqlConnection con = GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(sql,con);
string kq = cmd.ExecuteScalar().ToString();
con.Close();
cmd.Dispose();
return kq;
}
public SqlDataReader ExecuteReader(string sql)
{
SqlConnection con = GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader reader = cmd.ExecuteReader();
return reader;
}
}

asp_TinTuc 2

– Tạo trang masterpage, nó là cái khung chính của trang mà các trang khác sẽ kế thừa
Như vậy chúng ta sẽ tạo 1 table gồm 4 hàng
add new item mới là masterpage -> nhấn đến mục design -> Tạo bảng với 4 dòng 3 cột, 960 In pixel, Alignment chọn Center
– Nhấn vào td.style2 phần design -> nhấn vào Source -> Nhấn vào Split để dễ làm việc

1. Tìm dòng này

<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
.....
</asp:ContentPlaceHolder> 

cắt đi dán vào <td>
&nbsp;</td> vào phần bị gạch đó

xóa phần khóa của dòng trên đi (tức phần này </asp:ContentPlaceHolder>)
asp:ContentPlaceHolder 

Chính là phần để các trang khác ghi nội dung riêng của mình vào

2. Họ xóa Default.aspx đi (Mình thì thay đổi tên của nó để thử thôi đã vì dung phiên bản khác mà )
Add New Item mới là Web Form lấy tên mặc định là Default.aspx
– lựa chọn Select master page
– Để nguyên tên mặc định là Default.aspx
ta được code

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Untitled Page" %>

<asp:Content ID=”Content1″ ContentPlaceHolderID=”head” Runat=”Server”>
</asp:Content>
<asp:Content ID=”Content2″ ContentPlaceHolderID=”ContentPlaceHolder1″ Runat=”Server”>
</asp:Content>

– Những phần còn lại đã bị cố định, chỉ có ContentPlaceHolder là trang này có thể đánh vào nội dung

3. Hướng dẫn làm Menu

– Xóa từ menu trong trang nền đó đi
– Tạo 1 sitemap đặt tên Menu.sitemap

Demo tạm

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title=""  description="">
<siteMapNode url="Defaul.aspx" title="Trang chủ"  description="" />
<siteMapNode url="google.com.vn" title="Giải trí"  description="" />
<siteMapNode url="dantri.com.vn" title="Game"  description="" />
<siteMapNode url="mp3.zing.vn" title="Ca nhạc"  description="" />
<siteMapNode url="bongda.com.vn" title="Bóng đá"  description="" />
</siteMapNode>
</siteMap

– Vào Navigation chọn Menu nhấn choose a Data Source
+ Nhớ đánh đúng tên sitemap mà mình chọn (ở đây là Menu)
– Nhấn vào SiteMapDataSource – Menu Ở mục SiteMapProvider đặt tên là Menu

4. Chỉnh lại tí trong webconfig

Thêm đoạn code sau (vào web.cofig)

<siteMap defaultProvider="Menu">
<providers>
<add name="Menu" type="System.Web.XmlSiteMapProvider" siteMapFile="~/Menu.sitemap"/>
</providers>

</siteMap>

trước 2 thằng này

</system.web>

<system.codedom>

Là thư mục gốc

5. Nhấn vào Root Node

– phần thuộc tính tìm đến mục Orientation chọn Horizontal là theo chiều ngang
Width chọn 100%
Nhấn vào SiteMapDataSource – Menu trong mục ShowStartingNode chọn False
ShowStartingNode để bằng False nó sẽ không hiện ra nút đầu tiên mà hiện MENU luôn
Nếu để True thì nó xuất hiện nút tam giác, và khi chỉ vào đó thì nó mới hiện MENU

asp_TinTuc 3

Làm Menu cho trang Web, làm Menu 2 lớp lấy từ csdl

thêm code border=”1″ vào

<table align="center" class="style1" border="1"> 

– Giờ ta sẽ tạo trang quản lí Menu, trang này nằm trong quyền của admin nên ta sẽ tạo 1 thư mục Admin để chứa trang này, add vào đây 1 Web Form với tên QuanLiMenu.aspx
* Ta bỏ (không) chọn mục Select master page
– Để làm được Menu 2 lớp bạn thêm trường MenuParent vào
Bản ghi đầu tiên ta để MenuID là 0, ko có tên và ULR
(ảnh)
Như vậy menu game sẽ là con của menu giải trí, khi click vào giải trí sẽ hiện ra menu game cho chúng ta chọn id = 1 tức là game tự ta quy định vậy đi.
Rồi, giờ ta sẽ viết code để nó tự động load lên file sitemap từ đó ta có thể load thành menu
* Nhấn vào Unbound –> Choose Data Source –> <New data source ..> –> Nhấp Database –> OK –> Next –> Next
– Nó sẽ tự tạo 1 connect string mới và lưu vào web.config, lần sau cứ thế sử dụng
Vậy là ta sẽ có 2 connectstring
– Mục Name chọn tbl_Menu –> Tích MenuID và tích MenuName –> Next –>Finish
Mục Select a data field to display in the ListBox –> chọn MenuNam
ô dưới chọn MenuID –> OK
(Ở trên là phần hiện ra cho ta thấy, đặt là MenuNam, ở dưới là giá trị mình chọn)
– Nhấn luôn vào Source để thêm code

AutoPostBack="true" 

WHERE [MenuParent] is NULL 

Ta chỉ chọn các menu mà MenuParent của nó là null vì các menu có MenuParent không null là các menu con, không cần thiết
code
Chọn Menu cha

asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true"
DataSourceID="SqlDataSource1" DataTextField="MenuName" DataValueField="MenuID">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:TinTucConnectionString %>"
SelectCommand="SELECT [MenuID], [MenuName] FROM [tbl_Menu] WHERE [MenuParent] is NULL">
</asp:SqlDataSource> 

– Khi ta thêm 1 menu mới sẽ dựa vào đây để thêm
Dropdowlist ko chọn gì tức ID=0
thì mình sẽ thêm 1 menu cha, còn khi chọn menu thì mình thêm vào chính là menu con của menu đã chọn này

– Nhấn GridView1 mục Choose Data Source chọn New data Source.
Các bước làm cũng tương tự như trên
connectstring vừa tạo lúc nãy giờ cứ thế mà sử dụng
Mục Name vẫn chọn tbl_Menu –> ở đây tích vào ô trên cùng (*)

* Nhấn chuột vào nút thêm bắt đầu viết code

using System.Text;
using System.Data.SqlClient; 

– Ta nhận thấy phần code sau ở Menu.sitemap là không thay đổi nên ta nối vào sb

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title=""  description="">

dấu “” có thể thay bằng

<siteMapNode url="Defaul.aspx" title="Trang chủ"  description="" />
<siteMapNode url="google.com.vn" title="Giải trí"  description="" />
<siteMapNode url="dantri.com.vn" title="Game"  description="" />
<siteMapNode url="mp3.zing.vn" title="Ca nhạc"  description="" />
<siteMapNode url="bongda.com.vn" title="Bóng đá"  description="" /> 

là vùng dữ liệu sẽ thay đổi nên ta phải dùng code
– Còn phần này

</siteMapNode>
</siteMap> 

cũng không thay đổi luôn

đoạn giữa
……

SqlDataReader reader = ac.ExecuteReader("select * from tbl_Menu"); // đầu tiên chúng ta sẽ đọc toàn bộ bảng tbl_Menu
while (reader.Read())
{
//Cứ mỗi lần lướt qua 1 menu, ta tìm xem menu đó có menu con không
DataTable dt=ac.GetTable("select MenuName, URL from tbl_Menu where MenuParent=" + int.Parse(reader[0].ToString()) + "");

if (dt.Rows.Count > 0) //Chèn menu có menu con
{
// Thẻ mở
sb.Append(“\n<siteMapNode url='” + reader[2].ToString() + “‘ title='” + reader[1].ToString() + “‘ description='” + “” + “‘>”);// Lưu ý: Trước title có 1 dấu cách, sau là dấu =
for (int i = 0; i < dt.Rows.Count; i++)
{
//Các menu con
sb.Append(“\n<siteMapNode url='” +dt.Rows[i][1].ToString() + “‘ title='” + dt.Rows[i][0].ToString() + “‘ description='” + “” + “‘/>”);// Lưu ý: cho 2 dấu này “‘ sát nhau
}
sb.Append(“\n</siteMapNode>”); //Thẻ đóng của menu cha đây
}
else // Chèn những menu không có menu con
{
if (int.Parse(reader[0].ToString() !=0 && reader[3].ToString == “”))
sb.Append(“\n<siteMapNode url='” + reader[2].ToString() + “‘ title='” + reader[1].ToString() + “‘ description='” + “” + “‘ />”); // Đóng luôn
}
}

sb.Append(“\n</siteMapNode>”);
sb.Append(“\n</siteMap>”);
// Và cuối cùng chúng ta ghi vào file sitemap đó thôi
File.WriteAllText(Server.MapPath(“Menu.sitemap”).ToString(), sb.ToString());

Thêm code

 using System.IO; 

Giả sử đang ở menu 1, chúng ta sẽ tìm xem có menuParent nào có giá trị là 1 không. Nếu không có thì nó không có menu con
Chúng ta sẽ lấy kết quả tìm được cho vào 1 datatable

DataTable dt=ac.GetTable("select MenuName, URL from tbl_Menu where MenuParent=" + int.Parse(reader[0].ToString()) + ""); 

Nếu rows count>0 tức là có kết quả trả về (có menu con)
Chúng ta sẽ hiện ra theo dúng chuẩn
Sửa lại code. Tạo 3 menu con của menu giải trí

<siteMapNode url="giaitri.aspx" title="Giải trí"  description=""  >
<siteMapNode url="game" title="Game"  description="" />
<siteMapNode url="nhac" title="Ca nhạc"  description="" />
<siteMapNode url="video" title="Bóng đá"  description="" />
</siteMapNode>

Menu giải trí lúc này sẽ có cả thẻ đóng và thẻ mở, không như các menu không có menu con
——————————————————————
Khi thêm 1 menu mới, chúng ta phải lấy được menuID lớn nhất hiện tại để tăng lên 1. Vì vậy chúng ta cần 1 hàm tìm MenuID max

DropDownList1.SelectedValue.ToString() 

là menu cha đang được chọn

public int MaxMenuID()
{
int kq = 0;
string sql = "Select Max(MenuID) from tbl_Menu";
try
{
kq = int.Parse(ac.ExecuteScalar(sql));
}
catch
{
kq = 0;
}
return kq;
}

//Khi click thêm
protected void Button1_Click(object sender, EventArgs e)
{
// Đầu tiên,chúng ta insert menu mới vào csdl sau đó gọi hàm WriteSiteMap để ghi lại vào sitemap
// Chúng ta sẽ có 2 trường hợp
// Đầu tiên là dropdownlits không chọn gì (MenuID=0), khi đó ta se insert 1 menu cha
if (int.Parse(DropDownList1.SelectedValue.ToString()) == 0)
{
int MenuID = MaxMenuID() + 1;
ac.ExeCuteNonquery(“insert into tbl_Menu(MenuID, MenuName, URL) values (” + MenuID + “, ‘” + TextBox1.Text + “‘, ‘” + TextBox2.Text + “‘)”);
WriteSiteMap();
}
else // Insert 1 menu con
{
int MenuID = MaxMenuID() + 1;
ac.ExeCuteNonquery(“insert into tbl_Menu values (” + MenuID + “, ‘” + TextBox1.Text + “‘, ‘” + TextBox2.Text + “‘,”+int.Parse(DropDownList1.SelectedValue.ToString())+” )”);
WriteSiteMap();
}
Response.Redirect(“~\\Default.aspx”); // Chuyển về trang default xem kết quả
// Ok, test thử …
}  định dạng lại tí cho đẹp
vào mục MasterPage.master phần thiết kế
– Nhấn Parent Node chọn -> AutoFormat –> Classic –>OK

asp_TinTuc 4
Hướng dẫn tạo trang thêm tin tức và hiển thị tin tức

– Làm nốt phần xóa menu
trong mục Admin/QuanliMenu.aspx.cs Nhấn đúp chuột vào nút xóa cho ta viết thêm code

protected void Button2_Click(object sender, EventArgs e)
{
ac.ExeCuteNonquery("delete from tbl_Menu where MenuID="+int.Parse(TextBox3.Text)+"");
WriteSiteMap();
Response.Redirect("~\\Default.aspx"); //Chuyển về trang default xem kết quả

Phần thêm bài viết

– Vào thư mục Admin –> Add new Item –>Tạo Web FromThemBaiViet.aspx –> OK (các thứ khác để mặc định vậy)
– Nhấn Design. Phần TextBox2 –> Properties –>TextMode chọn MultiLine
Mục (ID) sửa thành txtTomTat
– Ở TextBox1 sửa (ID) thành txtTieuDe
– Nội dung thì dùng 1 editor có sắn đó là FCK Editor
Copy 2 thư mục fckeditoruserfile vào thư mục gốc tin tức của ta
– Tiếp theo là add file dll vào toolbox (file FredCK.FCKeditorV2.dll) Bằng cách vào toolbox kích phải chuột chọn choose item … rồi browse đến file dll đó
Và bây giờ thì có thể kéo nó vào như các control bình thường thôi. Nó sẽ tự nhảy vào thư mục bin
Sửa Height cho nó giá trị 400px
– Tiếp theo là sửa lại trong Web.config
Copy code này trong file aspSetting (kèm theo):

<!--Thay đổi code ở đây-->
<appSettings>
<add key="FCKeditor:BasePath" value="~/fckeditor/"/>
<add key="FCKeditor:UserFilesPath" value="~/userfiles/"/>
</appSettings> 

dán nó vào web.config phần có dòng

<appSettings/>

Sửa Width cho nó giá trị 600px
OK, giờ bạn có thể soạn thảo như trong Word, khi lưu vào CSDL sẽ lưu ở dạng html
– Tạo Text box tên (ID) txtPath
– Tạo 1 label với tên (ID) lbThongBaoKQ
– Nhấn đúp chuột vào nút Tải lên để viết code cho nó
Tạo 1 folder mới với tên là HinhAnh
FileUpload1.HasFile == false tức là không có file được chọn
file.ContentLength>500000 tức dung lượng file lớn hơn 500 kb (khoảng đó) thì thông báo lỗi

protected void Button1_Click(object sender, EventArgs e)
{
HttpPostedFile file = FileUpload1.PostedFile;
if (FileUpload1.HasFile == false || file.ContentLength > 500000)
{
lbThongBaoKQ.Text = "Vui lòng chọn File < 500 kb";
}
else // Nếu file thỏa mãn
{
try
{
string strPath=Server.MapPath("~/HinhAnh/"+FileUpload1.FileName);
FileUpload1.SaveAs(strPath);
txtPath.Text="~/HinhAnh/" + FileUpload1.FileName.ToString();
lbThongBaoKQ.Text="Upload thành công";
}
catch
{
lbThongBaoKQ.Text="Upload thất bại";
}

– Nháy vào Label xóa tên text đi để trắng

* Vào Phần QuanLiMenu phần Design của nó copy DropDownList1 (phần chọn Menu cha)
dán nó vào phần Design của ThemBaiViet
Copy cả SqlDataSource – SqlDataSource1 vào phần Design của ThemBaiViet nữa

– Chúng ta sẽ viết 1 store procedure để thêm bài viết nữa
Vào tbl_BaiViet nháy chuột phải chọn Open Table Definition Mục đích là xem lại thông số để viết code cho chính xác thôi
Save được nghĩa là câu lệnh của ta đúng, nếu bạn đánh sai nó sẽ không Save được
– Nháy đúp vào nút Thêm bài viết để viết code cho nó
– Viết thêm

using System.Data.SqlClient;

Chúng ta sẽ viết 1 lớp bài viết để thao tác cho nó chuyen nghiệp hơn
– Vào mục App_Code nhấn chuột phải chọn Add New Item … chọn class đặt tên là BaiViet.cs –> Add Rồi ta viết code cho nó luôn

using System.Data.SqlClient;
public class BaiViet
{
// Khai báo các thuộc tính
public int MaBaiViet { get; set; } //Sửa lại ở đây
public string TieuDe { get; set; }
public string TomTat { get; set; }
public string NoiDung { get; set; }
public string HinhAnh { get; set; }
public string NgayTao { get; set; }
public string NguoiTao { get; set; }
public int MenuID { get; set; }

AccessData ac = new AccessData();
//Các phương thức
public void Insert(BaiViet bv)
{
SqlConnection con = ac.GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(“ThemBaiViet”, con);
cmd.CommandType = System.Data.CommandType.StoredProcedure; //Thêm lại ở đây
cmd.Parameters.Add(“@MaBaiViet”, System.Data.SqlDbType.BigInt).Value = bv.MaBaiViet;
cmd.Parameters.Add(“@TieuDe”, System.Data.SqlDbType.NVarChar).Value = bv.TieuDe;
cmd.Parameters.Add(“@TomTat”, System.Data.SqlDbType.NText).Value = bv.TomTat;
cmd.Parameters.Add(“@NoiDung”, System.Data.SqlDbType.NText).Value = bv.NoiDung;
cmd.Parameters.Add(“@HinhAnh”, System.Data.SqlDbType.NVarChar).Value = bv.HinhAnh;
cmd.Parameters.Add(“@NgayTao”, System.Data.SqlDbType.NVarChar).Value = bv.NgayTao;
cmd.Parameters.Add(“@NguoiTao”, System.Data.SqlDbType.NVarChar).Value = bv.NguoiTao;
cmd.Parameters.Add(“@MenuID”, System.Data.SqlDbType.TinyInt).Value = bv.MenuID; //Sửa lại ở đây

cmd.ExecuteNonQuery();
cmd.Dispose();
con.Close();
}
}

Vào Admin/QuanLiMenu copy đoạn code

public int MaxMenuID()
{...} 

dán vào Admin/ThemBaiViet SỬA LẠI 1 CHÚT THÀNH MaxMaBaiViet ….

AccessData ac = new AccessData();
public int MaxMaBaiViet()
{
int kq = 0;
string sql = "Select Max(MaBaiViet) from tbl_BaiViet";
try
{
kq = int.Parse(ac.ExecuteScalar(sql));
}
catch
{
kq = 0;
}
return kq;
}

BaiViet bv = new BaiViet();
protected void Button2_Click(object sender, EventArgs e)
{
bv.MaBaiViet = MaxMaBaiViet() + 1;
bv.TieuDe = txtTieuDe.Text;
bv.TomTat = txtTomTat.Text;
bv.NoiDung = FCKeditor1.Value;
bv.HinhAnh = txtPath.Text;
bv.NgayTao = DateTime.Now.ToShortDateString();
bv.NguoiTao = “abc”;
bv.MenuID = int.Parse(DropDownList1.SelectedValue.ToString());
}

* Vì chưa tạo Form đăng nhập nên sẽ không có session để lấy tên người tạo chúng ta cứ dùng tạm abc
– Tạo thêm 1 Label sau nút Thêm bài viết rồi viết thêm vào code trên tiếp (ĐÂY LÀ SỦA LẠI)

int mbv = MaxMaBaiViet() + 1;
try
{
bv.MaBaiViet = mbv ;
bv.TieuDe = txtTieuDe.Text;
bv.TomTat = txtTomTat.Text;
bv.NoiDung = FCKeditor1.Value;
bv.HinhAnh = txtPath.Text;
bv.NgayTao = DateTime.Now.ToShortDateString();
bv.NguoiTao = "abc";
bv.MenuID = int.Parse(DropDownList1.SelectedValue.ToString());

bv.Insert(bv);
}
catch (SqlException ex)
{
Label1.Text = ex.Message.ToString();
}

Phần Design của Admin/ThemBaiViet Nhấn Source để sửa code thêm

validateRequest="false"

vào dòng đầu tiên

<%@ Page Language="C#" AutoEventWireup="true" validateRequest="false" CodeFile="ThemBaiViet.aspx.cs" Inherits="Admin_ThemBaiViet" %> 

ok. phù… chúng ta chạy thử ! ^^

asp_TinTuc 5

Hướng dẫn làm trang hiển thị tin tức
– Vào tin tức tạo 1 Web Form mới đặt tên BaiViet.aspx Tích vào 2 lựa chọn (chọn cả) –> Add –> OK
– Nhấn Design vào toolbox chọn GridView1 đặt Width cho nó là 100%
Chọn 1 SqlDataSource –> Configure Data Source –> Chọn TinTucConnectionString –> Tích chọn MaBaiViet, TieuDe, TomTat, HinhAnh, NgayTao –> Finish
– Ở SiteMapDataSource – Menu mục Choose Data Source chọn SqlDataSource1. Nhấn Edit Columns –> Mục Selcted fields ta xóa hết chúng đi. Ở mục Available field nhấn chọn TemplateField –> OK
Chọn tiếp Edit Templates

* Mở Website của dân trí .com.vn ta làm tin tức dựa theo dạng như vậy
– Vào Toolbox chọn Image vào đặt thuộc tính cho nó Width là 70px, Height là 70px
– Tiêu đề là 1 cái link. Vào Toolbox lấy 1 HyperLink –> Nhấn Edit DataBingdings –> Nhấn Text –> Mục Bound chọn TieuDe
Nhấn NavigateUrl (Là cái trang mà ta sẽ nhảy tới khi Click vào) –> Mục Bound to: chọn MaBaiViet –> Tích chọn mục Custom bingding –> Viết thêm code ở trong là

Eval("MaBaiViet","noidung.aspx?mbv={0}")
--> OK
 Ta sẽ nhảy tới trang noidung.aspx với mã bài viết được truyền ở querystring {0} đại diện cho 1 số (mã nào đó) ứng với mabaiviet
 * Tiếp theo là tóm tắt
 - Vào toolbox lấy label --> Nhấn Text --> Mục Bound to chọn TomTat -->OK
 - Vào GridView1 chon lại Edit ... đặt lại thuộc tinh ShowHeader cho nó là False

 Các bài viết trong đây sẽ được load tùy theo menu tương ứng, vì vậy chúng ta phải truyền Mã tương ứng cho nó
 - Nhấp chuột vào SqlDataSource --> chọn ConfigureData Source --> Tích lại các cái như cũ là: MaBaiViet, TieuDe, TomTat, HinhAnh, NgayTao --> Nhấn WHERE --> mục columID chọn MenuID, Mục Operator chọn =, Mục Source chọn QueryString, Mục QueryString field chọn mid --> Add --> Next --> Finish

 * Phần Design của BaiViet.aspx nhấn GridView1 chọn Edit ItemTemplace --> Nhấn vào phần Ảnh chọn Edit DataBingdings... Nhấn ImageUrl mục Bound to: chọn HinhAnh --> OK

 ---------------------
 Làm trang hiển thị nội dung
 Vào mục gốc chọn Add new item mới là Web Form với tên Noidung.aspx chọn cả 2 tích --> Add --> vào Design của nó
 - Lấy 1 DataList ở toolbox --> Chọn thuộc tính cho nó với Width là 100%
 - Lấy 1 SqlDataSource --> chọn Cofigure Data Source .. --> Mục tbl_BaiViet tích chon TieuDe, Noi Dung --> Where --> Column chọn MaBaiViet , Mục Source chọn QueryString, Mục QueryString field gõ mbv --> Add --> OK --> Next --> Finish
 (Của mình làm khác: Column chọn MaBaiViet , Mục Source chọn QueryString, Mục QueryString field gõ mid --> Add --> OK --> Next --> Finish ==>Vậy mới hiện được nội dung của bài viết lên Web)
 - Nhấn DataList chọn Data Source là SqlDataSource1 --> Edit Template --> Xóa bên trong Vào toolbox đưa Label vào -->Edit Data bindings.. --> Nhấn Text --> Boundto: TieuDe --> OK
 Vào toolbox Lấy thêm Literal --> Edit Data bindings.. --> Nhấn Text --> Boundto: Noidung --> OK
 - Nhấp vào DataList chọn End Templeyte Editing -->chạy thử
 - Mục Label chọn thuộc tính cho nó Font Chữ đậm, cỡ chữ X-large, mầu xanh




 
Leave a comment

Posted by on July 29, 2011 in Software

 

Gia công phần mềm ứng dụng( Viết cho đồng nghiệp tương lai)

Nói về phần mềm thì rất rộng lớn bao la, bên lãnh vực mạng, website, phần mềm ứng dụng văn phòng, phần mền ứng dụng công nghiệp… nếu một sinh viên vừa mới ra trường, hay một người đã đi làm tầm hai năm mình dám chắc với các bạn rằng họ chưa nắm rõ lãnh giáo về lĩnh vực gia công, công nghệ cao này đâu nhé ! …

Để có kiến thức, trước hết các bạn nên làm bài tập thật nhiều và học lý thuyết các câu hỏi trong trường lẫn ngoài trường. Nên vào thư viện đọc thêm là tốt nhất… Từ đó mới có cơ sở để các bạn vượt qua các nhà tuyển dụng hàng đầu khó tính khắc khe nhất.

Chúc các bạn thành công.

P/s : Mọi thắc các bạn cứ giử mail đến : tommy_86sg@yahoo.com.

Khởi tạo Hoan Phan

 
Leave a comment

Posted by on July 26, 2011 in Software

 

Tổng quan về ERP

Doanh nghiệp của bạn là doanh nghiệp sản xuất, doanh nghiệp của bạn nằm trong các chuyên nghành về cơ giới, về hàng tiêu dùng, thực phẩm & giải khát, công nghệ cao, sản xuất các thiết bị công nghệ, và nếu doanh nghiệp của bạn thuộc nhóm ngành y khoa – QAD sẽ là giải pháp quản trị cho doanh nghiệp của bạn.

Bạn đang tìm kiếm giải pháp ERP với các yêu cầu chính như thế nào? dễ sử dụng, an toàn, tổng thể, độ an toàn cao với khả năng bảo mật dữ liệu là cao nhất, và khả năng customize với mọi yêu cầu thỏa mãn các yêu cầu quản lý của bạn.

Doanh nghiệp của bạn quản lý theo mô hình mẹ-con, và bạn có rất nhiều đơn vị thành viên hạch toán độc lập, họ có khách hàng riêng, nhà cung cấp riêng, sản phẩm riêng, và ngay cả hệ thống tài khoản riêng – làm thế nào để quản lý và đơn giản quá trình đồng bộ hóa dữ liệu giữa các đơn vị thành viên, và với tổng công ty – QAD sẽ là công cụ đắc lực cho bạn.

Với QAD ERP, bạn có trong tay bộ sản phẩm hoàn hỏa quản trị doanh nghiệp của bạn

  • Giải pháp hoạt động trên nền Linux, Unix và cả Windows
  • Hỗ trợ việc thiết kế qui trình làm việc, và thực hiện các nghiệp vụ phát sinh theo đúng qui trình này.
  • Là giải pháp chuyên nghành điều này cung cấp một sản phẩm với kinh nghiệm trong chuyên ngành của mình.
  • Giải pháp hoàn hảo cho các doanh nghiệp với nhiều đơn vị thành viên, mà theo đó, các đơn vị thành viên này hạch toán độc lập
  • Khả năng customize theo mọi yêu cầu chuyên biệt của từng doanh nghiệp

Bộ sản phẩm giải pháp quản trị doanh nghiệp của QAD bao gồm các sản phẩm sau đây

QAD Core Bundle
QAD Core Bundle bao gồm các module cơ bản của hệ thống ERP bao gồm các module quản lý tài chính kế toán, quản lý khách hàng, quản lý chuỗi cung ứng, quản lý sản xuất.

Quản lý tài sản cố định
Module hỗ trợ việc quản lý các tài sản cố đinh của doanh nghiệp, và các nghiệp vụ kế toán quản lý các tài sản cố định này

Enhance Control
Module hỗ trợ nâng cao việc kiểm soát hệ thống như quản lý login, logout của người dùng, ghi nhận các hoạt động của người dùng, và hỗ trợ quản lý chữ ký điện tử

Configurator
Module hỗ trợ quản lý sản xuất theo đơn đặt hàng của khách hàng (Configure-to-Order CTO và Assembly-to-Order ATO)

Pro/Plus
Module hỗ trợ các yêu cầu quản lý lịch giao hàng cho khách hàng, lịch giao hàng của các nhà cung cấp, đánh giá chất lượng phục vụ của các nhà cung cấp, quản lý việc sắp xếp các container và tính toán chi phí vận chuyển (line charge)

Module Planner
Được thiết kế như là nhân viên kế hoạch cho nhà máy, module planner cung cấp việc lập kế hoạch sản xuất với các điều kiện về công suất, năng lực của các thiết bị máy móc,…

Consignment Inventory
Module đáp ứng các yêu cầu quản lý bán hàng ký gởi của các doanh nghiệp

EDI Commerce
Cung cấp giải pháp tích hợp số liệu giữa các hệ thống phần mềm quản trị của các đối tác thương mại

Lean Manufacturing
Module hỗ trợ việc quản trị sản xuất theo mô hình tinh gọn

Product Scheduler
Cung cấp công cụ hữu ích cho việc lập kế hoạch sản xuất, mà theo đó, tất cả các thông tin được đưa vào trong một màn hình, hỗ trợ cho nhân viên lập kế hoạch nhanh chóng nắm bắt được thông tin một các tổng quát nhất.

Release Management
Hỗ trợ quản lý việc phát hành (release) các nghiệp vụ liên quan về giao nhận hàng, và kế hoạch, lịch trình giao nhận hàng.

Trade Management
Cung cấp công cụ hỗ trợ phân tích, đánh giá và giám sát các chương trình khuyến mãi, chính sách giá cả, ngân sách,…

QXtend
Module hỗ trợ việc tích hợp số liệu giữa các hệ thống của các đối tác của doanh nghiệp. QXtend hỗ trợ việc tích hợp giữa các hệ thống QAD và cả các hệ thống khác

Business Intellegence
Sử dụng Cognos như là công cụ tích hợp, phân tích đánh giá các hoạt động của doanh nghiệp

Logistics Accouting
Cung cấp công cụ quản lý chi phí vận chuyển và lưu kho giữa các site của doanh nghiệp

Warehouse Management
Giải pháp hỗ trợ tự động hóa các hoạt động nhập kho, xuất kho, thực hiện đơn hàng, sắp xếp trong kho,.. sử dụng các thiết bị mã barcode và RFID

Marketing Automation
Module hỗ trợ quản lý, và tự động hóa các hoạt động marketing của doanh nghiệp (đây là một phẩn của hệ thống quản trị quan hệ khách hàng CRM của QAD)

Sale Force Automation
Module hỗ trợ quản lý bán hàng của doanh nghiệp (đây là một phần của hệ thống quản lý quan hệ khách hàng  CRM của QAD)

Phần mềm quản trị ERP


Trong công tác quản trị doanh nghiệp, bạn thường xuyên phải đau đầu vì không thể có được thông tin kịp thời và chính xác, không thể có các phân tích hỗ trợ ra quyết định, số liệu báo cáo giữa các bộ phận không khớp nhau, việc bán hàng gặp nhiều trở ngại vì bộ phận bán hàng không thể biết được lượng hàng sẵn sàng vào thời điểm khách hàng yêu cầu, công tác quản lý công nợ và hạn mức tín dụng không được thuận tiện và chặt chẽ do thông tin công nợ không được chia sẻ kịp thời với các bộ phận liên quan, bộ phận mua hàng và bộ phận sản xuất thường xuyên bị động trong kế hoạch mua hàng, kế hoạch sản xuất.Giải pháp phần mềm 1S ERP dành cho doanh nghiệp vừa và nhỏ sẽ giúp bạn tháo gỡ những khó khăn trên, giúp bạn tăng cường khả năng quản lý doanh nghiệp và nâng cao lợi thế cạnh tranh trên thị trường.CÁC PHÂN HỆ CHÍNH

  • Quản trị Tài chính Kế toán
    Phân hệ Quản trị Tài chính Kế toán của 1S sẽ tối ưu hóa các quy trình kế toán và gia tăng khả năng kiểm soát tài chính của doanh nghiệp. Với dữ liệu tích hợp, quá trình xử lý giao dịch thông minh, hạch toán tự động, khả năng báo cáo và phân tích mạnh mẽ, hệ thống cho phép bạn giảm thời gian và công sức trong việc thực hiện các công việc kế toán, đồng thời nâng cao khả năng phân tích tài chính nhằm đưa ra chiến lược phát triển phù hợp cho doanh nghiệp.
  • Quản trị Bán hàng
    Phân hệ Bán hàng cung cấp các công cụ hỗ trợ tốt nhất cho công tác bán hàng, từ việc theo dõi ghi nhận thông tin quá trình thực hiện đơn hàng đến việc quản lý chính sách giá bán và chiết khấu một cách linh hoạt. Chương trình cũng cung cấp các báo cáo phân tích theo rất nhiều góc nhìn khác nhau giúp người quản lý có thể đưa ra các chiến lược bán hàng phù hợp.
  • Quản trị Mua hàng
    Mua nguyên liệu gì, mặt hàng gì, số lượng bao nhiêu, vào thời điểm nào, mua từ nhà cung cấp nào luôn là những bài toán khó đòi hỏi bộ phận cung ứng phải giải quyết. 1S cung cấp đầy đủ tính năng giúp cho bộ phận cung ứng có thể giải các bài toán trên một cách tối ưu nhất để đảm bảo hàng hóa được mua với mức giá tốt nhất tại thời điểm thích hợp nhất. Làm được như vậy không chỉ giúp gia tăng hiệu quả quản lý tồn kho và giảm chi phí mua hàng mà còn có tác dụng trực tiếp đến khả năng thỏa mãn nhu cầu khách hàng của doanh nghiệp.
  • Quản trị Tồn kho
    Quản lý tồn kho là công việc hết sức quan trọng của các doanh nghiệp, đặc biệt là doanh nghiệp có hoạt động sản xuất và bán sỉ. Quản trị tồn kho chính xác ở mức chi phí thấp là yếu tố chính để giúp cho các hoạt động liên quan được diễn ra một cách suôn sẻ. 1S hỗ trợ tối đa nghiệp vụ quản lý tồn kho, từ việc thực hiện các nghiệp vụ quản lý tồn kho cơ bản đến kiểm soát tồn kho, quản lý nhiều kho khác nhau, quản lý hàng theo lô (lot/serials).
  • Quản trị Sản xuất
    Với phân hệ Quản trị Sản xuất của 1S, bạn có thể gia tăng hiệu quả hoạt động và quản lý sản xuất, bao gồm các lệnh sản xuất, cấu trúc định mức nguyên vật liệu (BOM).

CÔNG CỤ PHÁT TRIỂN

  • DATABASE: SQL 2000, SQL 2005, SQL 2008.
  • Ngôn ngữ: Microsoft .NET.

ERP là gì? Tại sao ERP thường thất bại?


1. Nội dung

1. ERP là gì?

2. ERP cải thiện hoạt động kinh doanh của công ty như thế nào?

3. Dự án ERP kéo dài bao lâu?

4. ERP sẽ giải quyết khó khăn nào trong công việc của tôi?

– Tích hợp thông tin tài chính

– Tích hợp thông tin đặt hàng của khách hàng

– Tiêu chuẩn hoá và tăng hiệu suất sản xuất

– Giảm hàng hoá tồn kho

– Tiêu chuẩn hoá thông tin nhân sự

5. Liệu ERP có phù hợp với cách thức làm việc của tôi?

6. Dự án ERP thật sự tốn bao nhiêu tiền?

7. Khi nào thì tôi sẽ thu được lợi từ ERP và bao nhiêu?

8. Các chi phí ẩn của ERP?

– Đào tạo

– Tích hợp và thử nghiệm

– Sữa chữa theo yêu cầu (customization)

– Chuyển đổi dữ liệu

– Phân tích dữ liệu

– Dịch vụ tư vấn

– Nhân sự

– Đội ngũ triển khai có thể không bao giờ ngừng lại

– Chờ đợi hiệu quả đầu tư (ROI)

– Vấn đề gặp phải sau khi cài đặt ERP

9. Tại sao ERP thường thất bại?

10. Làm sao tôi có thể cấu hình được phần mềm ERP?

2. ERP là gì?

Hoạch định khai thác nguồn tài nguyên doanh nghiệp bao gồm các khái niệm và phương pháp kỹ thuật để tích hợp toàn bộ hệ thống quản lý kinh doanh từ việc xem xét, quản lý hiệu quả nguồn tài nguyên đến việc cải tiến hiệu quả hoạt động của doanh nghiệp.

Hoạch Định Tài Nguyên Doanh nghiệp = Enterprise Resource Planning – ERP

Hệ thống ERP được tích hợp (bao gồm tất cả các chức năng kinh doanh) trong phần mềm trọn gói hỗ trợ cho các khái niệm ERP nói trên. Khởi đầu thì ERP nhắm tới ngành sản xuất, chủ yếu bao gồm các chức năng hoạch định và quản lý việc kinh doanh nòng cốt như quản lý bán hàng, quản lý sản xuất, kế toán, tài chính,… Tuy nhiên, những năm trở lại đây, sự thích nghi đó không chỉ dành cho ngành sản xuất mà còn cho các ngành nghề kinh doanh khác nhau và mở rộng triển khai và sử dụng ERP tiếp tục phát triển trên phạm vi toàn cầu.

Phần mềm ERP thiết kế theo mô hình và tự động hoá các qui trình cơ bản của công ty, từ tài chính đến sản xuất với mục tiêu tích hợp thông tin của tất cả các phòng ban trong công ty và loại bỏ các đường truyền kết nối phức tạp, “đắt đỏ” giữa các hệ thống máy tính riêng lẻ không “khớp” với nhau.

Sơ đồ: Thông tin tích hợp qua hệ thống ERP

Phần mềm Hoạch định khai thác nguồn tài nguyên doanh nghiệp hay gọi là ERP, thế nhưng nó không làm theo đúng thứ tự của những từ này. Chúng ta hãy quên đi phần hoạch định – vì nó thật sự không hoạch định nhiều đến như vậy và đừng nhắc đến nguồn tài nguyên. Nhưng hãy luôn nhớ đến phần “doanh nghiệp”. Nó chính là đích đến thật sự của ERP. ERP cố gắng tích hợp tất cả các phòng ban và toàn bộ chức năng của công ty vào chung một hệ thống máy tính duy nhất có thể phục vụ các nhu cầu khác nhau của từng phòng ban.

Quả thật hết sức kho khăn để xây dựng một chương trình phần mềm duy nhất để phục vụ các nhu cầu khác nhau của nhân viên ở bộ phận Tài chính cũng như ở bộ phận Hành Chánh Nhân sự và Kho. Mỗi phòng ban hầu như đều có riêng một hệ thống máy tính để điều hành công việc của mình. Nhưng ERP kết hợp toàn bộ các hệ thống riêng lẻ vào chung một chương trình phần mềm tích hợp, vận hành các cơ sở dữ liệu để các bộ phận có thể dễ dàng chia xẻ và tiếp cận thông tin với nhau. Giải pháp tích hợp này sẽ mang lại nhiều lợi ích nếu các công ty biết thiết lập phần mềm một cách hợp lý.

Chẳng hạn, về khâu Nhận đơn hàng. Thông thường, khi một khách hàng nào đó đặt hàng, đơn hàng đó thường đi theo một lộ trình dài trên mặt giấy tờ. Nào là nhận thông tin, lưu trữ, xử lý thông tin qua các hệ thống máy tính khác nhau của từng bộ phận lòng vòng trong công ty. Cách làm đó thường gây ra trễ hẹn giao hàng cho khách và thiệt hại nhiều đến đơn hàng. Vì bạn có thể hiểu rằng không một ai trong công ty có thể biết rõ tình trạng của đơn hàng vào thời điểm quy định như thế nào? Bởi vì chẳng có cách nào cho bộ phận Tài chính, chẳng hạn, cập nhật vào hệ thống máy tính của bộ phận Kho để xem mặt hàng đó đã gửi hay chưa. “Anh phải gọi cho Kho hỏi thử xem!”– là một điệp khúc kêu ca quen thuộc từ phía khách hàng.

ERP loại bỏ các hệ thống máy tính riêng lẻ ở bộ phận Tài chính, Nhân sự, Sản xuất và Kho. ERP sẽ thay thế chúng bằng một chương trình phần mềm hợp nhất phân chia theo các phân hệ phần mềm khác nhau xấp xỉ gần đúng với các hệ thống riêng lẻ cũ. Tài chính, Sản xuất và Kho vẫn sẽ có phần mềm riêng của họ ngoại trừ giờ đây phần mềm sẽ được nối kết lại để nhân viên ở bộ phận Tài chính có thể nhìn vào phần mềm của Kho để xem đơn hàng đã xuất chưa. Hầu hết các nhà cung cấp phần mềm ERP linh động trong việc cài đặt một số phân hệ theo yêu cầu, ngoại trừ việc mua toàn bộ. Ví dụ, một số công ty chỉ cài đặt một phân hệ Tài chính hay quản lý Nhân sự và các chức năng còn lại sẽ mua sau.

3. ERP cải thiện hoạt động kinh doanh của công ty như thế nào?

Hệ thống lưới ERP

ERP thường được xem như phần mềm hỗ trợ vô hình. Ví dụ như qui trình đặt hàng, ERP nhận đơn hàng từ khách hàng, sau đó cung cấp bản đồ chỉ dẫn đường đi của phần mềm để tự động hoá các bước đi khác nhau cho đến khi kết thúc quy trình. Khi Nhân viên phòng giao dịch nhập đơn hàng vào hệ thống ERP, anh ta sẽ có đầy đủ thông tin cần thiết để hoàn thành đơn hàng (sự xem xét hạn mức tín dụng của khách hàng, nguồn gốc đơn hàng từ phân hệ Tài chính, lượng hàng tồn kho của công ty từ phân hệ Kho và lịch trình giao hàng từ phân hệ Cung ứng, chẳng hạn)

Tất cả các nhân viên ở phòng ban khác nhau đều có thể xem chung thông tin và cập nhật chúng. Khi một bộ phận nào đó thực hiện xong đơn hàng thì thông tin đó sẽ tự động nối kết qua ERP rồi truyền tải đến bộ phận khác. Nếu bạn muốn kiểm tra xem thực hiện đơn hàng đến đâu rồi, bạn chỉ cần kết nối vào hệ thống ERP và theo dõi chúng. Với ERP, quá trình đơn hàng di chuyển như tia sét xuyên suốt hệ thống, khách hàng nhận hàng nhanh hơn và ít xảy ra sai sót hơn trước kia.

Bạn thấy đấy, ít nhất thì đó cũng là “giấc mơ” của ERP, nhưng thực tế thì khắc nghiệt hơn nhiều.

Chúng ta hãy quay lại vấn đề trên một chút. Quá trình hiện tại đó có thể không hiệu quả cao nhưng lại khá đơn giản. Tài chính làm công việc của Tài chính, Kho thì làm nhiệm vụ của mình và nếu có gì sai sót xảy không nằm trong phạm vi của các bộ phận đó thì lại là lỗi của người khác. Với ERP, các nhân viên giao dịch sẽ thôi không còn là nhân viên đánh máy, chỉ biết nhập tên khách hàng vào máy tính. Màn hình ERP sẽ khiến họ vận hành công việc như những nhà doanh nghiệp. ERP sẽ hiển thị những thông tin về hạn mức tín dụng của khách hàng từ bộ phận Tài chính và mức tồn kho hàng hóa từ Kho. Liệu khách hàng có thanh toán đúng hẹn không? Chúng ta có thể xuất hàng đúng kỳ hạn không? Đó là những vấn đề mà bộ phận giao dịch chưa bao giờ phải quyết định trước kia và các câu trả lời có ảnh hưởng rất lớn đến khách hàng và các phòng ban trong công ty. Nhưng nó không chỉ dành cho bộ phận giao dịch. Nhân viên Kho, những người nắm mức tồn kho trong đầu họ hay bằng những mẫu giấy rời giờ đây phải nhập toàn bộ thông tin lên mạng hết. Nếu họ không làm vậy thì bộ phận giao dịch khách hàng khi nhìn trên màn hình máy tính thấy số lượng hàng hoá không đủ, họ thông báo với khách hàng : “xin lỗi, chúng tôi không đủ hàng phục vụ quý khách”. Trách nhiệm, giải trình, trách nhiệm của mỗi cá nhân và trách nhiệm giao tiếp đã chưa bao giờ được thử nghiệm như thế này trước đây.

Mọi người thì không thích thay đổi, và ERP lại yêu cầu họ thay đổi cách làm việc của mình. Phần mềm ít quan trọng hơn việc công ty thay đổi cách thức làm việc. Nếu bạn sử dụng phần mềm ERP để cải tiến phương thức nhận đơn hàng, sản xuất hàng hoá, xuất hàng và thanh toán, bạn sẽ thấy giá trị thật sự của phần mềm. Nếu bạn đơn giản cài đặt phần mềm mà không thay đổi cách thức làm việc của nhân viên bạn, bạn có thể sẽ không thấy được chút giá trị nào của nó. Và thậm chí, phần mềm mới còn làm chậm công việc lại vì họ đã quen với phần mềm củ và không có ai làm việc trên phần mềm mới.

4. Dự án ERP kéo dài bao lâu?

Gồm nhiều bước triển khai ERP

Các công ty cài đặt hệ thống ERP không dễ dàng chút nào. Đừng bị lừa phỉnh khi các nhà cung cấp ERP cam đoan với bạn rằng thời gian thực hiện dự án chỉ mất từ 3 đến 6 tháng. Việc thực thi dự án trong thời gian ngắn đều tùy thuộc vào từng mức độ: công ty triển khai dự án ERP chỉ giới hạn cho những khu vực nhỏ của công ty hay công ty chỉ sử dụng những mảng về Tài chính của hệ thống ERP (trong trường hợp này hệ thống ERP không hơn gì một phần mềm kế toán mắc tiền). Để thực hiện thành công ERP, bạn phải thay đổi cách thức làm việc cũng như cách thức làm việc của nhân viên. Và kiểu thay đổi đó không dễ gì thực hiện. Trừ phi, công việc kinh doanh của bạn đang trôi chảy (đơn hàng xuất đúng hạn, hiệu suất sản xuất cao hơn các đối thủ cạnh tranh khác, khách hàng hoàn toàn hài lòng), trong trường đó thì thậm chí chẳng có lý do gì để xem xét đến dự án ERP.

Điều quan trọng không phải chú tâm đến dự án kéo dài bao lâu – những nỗ lực biến đổi thật sự của ERP thường diễn ra giữa một đến ba năm, trung bình – nhưng đúng hơn điều quan trọng để bạn hiểu tại sao bạn cần nó và bạn sẽ sử dụng nó như thế nào để cải thiện việc kinh doanh của bạn.
5. ERP sẽ giải quyết khó khăn nào trong công việc của tôi?

Năm nguyên do chính để các công ty thực hiện dự án ERP, đó là:

Các nguyên do chính

1. Tích hợp thông tin tài chính

Do Tổng Giám đốc (CEO) cố nắm bắt toàn bộ hoạt động của công ty, ông ta có thể tìm thấy nhiều kiểu sự thật khác nhau. Tài chính có cách thiết lập doanh thu hằng năm riêng, Kinh doanh có kiểu riêng của họ và những đơn vị kinh doanh khác có thể có cách thiết lập riêng tổng thu nhập hằng năm cho công ty. Với ERP, chỉ có một kiểu sự thật; không thắc mắc, không nghi ngờ. Vì sao? vì tất cả phòng ban, nhân viên đều sử dụng chung một hệ thống.

2. Tích hợp thông tin đặt hàng của khách hàng

Với hệ thống ERP, đơn hàng của khách hàng đi theo một lộ trình tự động hoá từ khoảng thời gian nhân viên giao dịch nhận đơn hàng cho đến khi xuất hàng ra cảng và bộ phận Tài chính xuất hoá đơn. Chẳng thà bạn lấy thông tin từ chung một hệ thống còn hơn nhận thông tin rải rác từ các hệ thống khác nhau của từng phòng ban. Hệ thống phần mềm ERP giúp công ty bạn theo dõi đơn hàng một cách dễ dàng, giúp phối hợp với bộ phận Sản xuất, Kho và giao hàng ở các địa điểm khác nhau trong cùng một thời điểm.

3. Tiêu chuẩn hoá và tăng hiệu suất sản xuất

Các công ty sản xuất, đặc biệt là những công ty muốn liên doanh với nhau thường nhận thấy rằng nhiều đơn vị kinh doanh của cùng một công ty đều sử dụng các phương pháp và hệ thống máy tính khác nhau. Hệ thống ERP đem đến những phương pháp tiêu chuẩn để tự động hoá các bước đi của quy trình sản xuất. Việc tiêu chuẩn hoá các quá trình trên và sử dụng cùng một hệ thống máy tính tích hợp riêng biệt có thể tiết kiệm thời gian, tăng hiệu suất sản xuất và giảm việc.

4. Giảm hàng hoá tồn kho

ERP giúp tiến trình sản xuất diễn ra trôi chảy và phát huy tầm nhìn của quá trình thực hiện đơn hàng trong công ty. Điều đó có thể dẫn tới việc giảm lượng nguyên vật liệu tồn kho (bán thành phẩm tồn kho) và giúp người sử dụng hoạch định tốt hơn kế hoạch giao hàng cho khách, giảm thành phẩm tồn kho tại Kho và bến tàu. Để thật sự cải tiến lượng cung cấp hàng hoá, bạn cần cài đặt phần mềm dây chuyền cung cấp hàng và ERP có thể giúp bạn làm được điều đó.

5. Tiêu chuẩn hoá thông tin nhân sự

Đặc biệt ở các công ty có nhiều đơn vị kinh doanh khác nhau, bộ phận Hành chánh nhân sự có thể không có phương pháp chung và đơn giản để theo dõi giờ giấc của nhân công và hướng dẫn họ về các nghĩa vụ và quyền lợi. ERP có thể giúp bạn đảm đương việc đó.

6. Liệu ERP có phù hợp với cách thức làm việc của tôi?

Quả là một vấn đề khó khăn khi các công ty muốn tiên liệu trước đường lối làm việc của họ có “khớp” với bộ tiêu chuẩn của ERP trước khi thực hiện dự án. Nguyên nhân phổ biến nhất khiến các công ty bỏ dự án ERP hàng triệu đô la một cách dễ dàng bởi vì họ phát hiện phần mềm ERP không hỗ trợ được một trong những tiến trình kinh doanh quan trọng của họ. Theo điểm đó, có 2 điều họ có thể làm: họ có thể thay đổi qui trình kinh doanh để thích ứng với phần mềm. Có nghĩa là họ sẽ phải thay đổi cách thức làm việc, cái cách mà họ đã quen làm trong bao nhiêu năm nay. Hay họ có thể thay đổi phần mềm để thích nghi với quá trình kinh doanh, nhưng điều đó cũng đồng nghĩa với sự trì trệ của dự án, gây nhiều bất lợi cho hệ thống phần mềm.

Thêm vào dự thảo ngân sách cho các chi phí của phần mềm, bộ phận kế toán nên lập kế hoạch cho các chi tiêu về tư vấn, thực hiện lại công việc, thử nghiệm tích hợp và một loạt danh sách các khoản chi tiêu cần thiết khác trước khi dự án “biểu lộ” cái lợi của nó.

7. Dự án ERP thật sự tốn bao nhiêu tiền?

Chi phí cho ERP

Meta Group gần đây đã làm một cuộc khảo sát tính toán toàn bộ chi phí quyền sỡ hữu (TCO) của ERP bao gồm phần mềm, phần cứng, các dịch vụ chuyên môn và chi phí nhân sự nội bộ. Các con số của TCO bao gồm cài đặt phần mềm và sau 2 năm với chi phí thực tế về bảo trì, nâng cấp hệ thống. Sau khi nghiên cứu khảo sát 63 công ty bao gồm những cty có quy mô nhỏ, vừa và lớn phân chia theo ngành nghề khác nhau thì TCO trung bình là 15 triệu đô la Mỹ (con số cao nhất là 300 triệu đô và thấp nhất là 400,000 đô).

8. Khi nào thì tôi sẽ thu được lợi từ ERP và bao nhiêu?

Bạn đừng mong cách mạng hoá việc kinh doanh của bạn với dự án ERP. Nó giống như một sự thực hiện chú trọng vào việc cải tiến, phát triển đường lối làm việc bên trong nội bộ hơn là với khách hàng, nhà cung cấp hay cộng sự. Và tất nhiên “cái lợi” của ERP sẽ đến với những ai kiên trì với nó. Công trình nghiên cứu 63 công ty của Meta Group đã cho thấy phải mất hết 8 tháng mới thấy được “cái lợi” của ERP sau khi hệ thống mới được cài đặt (ngốn hết 31 tháng). Nhưng tiền tiết kiệm hằng năm thu được từ hệ thống ERP là 1.6 triệu đô la Mỹ.

9. Các chi phí ẩn của ERP?

Mặc dù các công ty sẽ tìm cho mình những “nguồn” khác nhau để dự thảo ngân sách dự án. Đối với những ai đã thực hiện trọn gói ERP đều đồng ý rằng những chi phí xác định được xem xét và đánh giá thường xuyên hơn những chi phí khác. Các chuyên gia ERP tuyên bố những mảng sau đây thường dẫn đến sự tràn lan về ngân sách.

1. Đào tạo

Vấn đề đào tạo là sự lựa chọn hiển nhiên của những nhà triển khai dự án ERP được xem như khoản ngân sách đánh giá nhiều nhất. Chi phí đào tạo rất cao vì các nhân viên, lúc nào cũng vậy, phải học cách tiếp cận toàn bộ quá trình mới, không chỉ đơn thuần về bề mặt chung của phần mềm. Tệ hơn nữa, các công ty đào tạo bên ngoài nhiều khi lại không có khả năng giúp bạn về vấn đề đó. Họ chỉ nói cho bạn biết sử dụng phần mềm như thế nào, chứ không phải chỉ vẽ hay đào tạo bạn về những cách thức cụ thể trong công việc của bạn. Vì thế, hãy tự chuẩn bị cho mình một danh sách chỉ rõ và giải thích các qui trình kinh doanh khác nhau sẽ chịu ảnh hưởng bởi hệ thống ERP.

Một Giám đốc Công nghệ thông tin (CIO) nọ thuê một giảng viên của trường quản trị doanh nghiệp trong nước để giúp anh ta phát triển và giảng dạy khoá đào tạo kinh doanh ERP cho các nhân viên. Hãy nhớ rằng với hệ thống ERP, nhân viên Tài chính và nhân viên Kho sẽ sử dụng chung phần mềm và họ sẽ nhập thông tin ảnh hưởng, chi phối đến các nhân viên ở phòng ban khác. Để thực hiện chính xác, họ phải có sự am hiểu sâu sắc về đường lối làm việc của những nhân viên khác trong công ty trước khi tiến hành dự án ERP. Sau cùng, nó sẽ tuỳ thuộc vào nhân viên IT và nhân viên giao dịch của bạn để hỗ trợ việc đào tạo. Hãy lấy ngân sách đào tạo ERP và tăng lên 2 hay 3 lần nó trước. Nó sẽ là sự đầu tư hiệu nghiệm nhất mà bạn đã từng làm.

2. Tích hợp và thử nghiệm

Chi phí thử nghiệm các đường truyền kết nối giữa hệ thống trọn gói ERP với đường truyền phần mềm của công ty khác cũng được đánh giá nhiều. Công ty sản xuất có thể nghiên cứu cài đặt thêm đường truyền từ thương mại điện tử (e-commerce) và chuỗi cung cấp hàng (supply chain) ước tính thuế kinh doanh thấp nhất. Tất cả điểm tích hợp này đều kết nối với ERP. Các chuyên gia kỳ cựu khuyên rằng thay vì chạy dữ liệu giả từ ứng dụng này sang trình ứng dụng khác thì hãy cho chạy đơn hàng thật qua hệ thống, từ đầu vào của đơn đặt hàng cho đến khi xuất hàng và thanh toán, tốt nhất là với sự tham gia của các nhân viên thực hiện công việc của dự án.

3. Sữa chữa theo yêu cầu (customization)

Phần cài đặt bổ sung chỉ là phần khởi đầu chi phí tích hợp của ERP. Bạn sẽ còn tốn bộn tiền hơn đấy! Và nếu điều gì có thể tránh được nếu có thể thì bạn hãy nhớ kỹ đó chính là chi phí sữa chữa lõi cốt phần mềm ERP. Điều này xảy ra khi phần mềm ERP không thể giải quyết nổi một trong những qui trình kinh doanh của bạn và bạn chọn cách thay đổi nó theo ý bạn muốn. Nếu thế thì bạn thật sự đang đùa với lửa đấy! Sự sữa chữa tùy biến đó có thể ảnh hưởng đến từng phân hệ của hệ thống ERP vì các phân hệ kết nối rất chặt chẽ với nhau. Nâng cấp trọn bộ ERP – điều đó giống như là ác mộng vì bạn sẽ phải sữa chữa lại toàn bộ hệ thống từ đầu đến đuôi theo một kiểu mới. Có thể bạn làm được đấy!, nhưng nhớ là cũng có thể không. Cho dù có chuyện gì xảy ra chăng nữa thì nhà cung cấp ERP không ở đó mà hỗ trợ bạn đâu. Bạn sẽ phải thuê thêm nhân viên để làm công việc đó và họ sẽ phải làm việc dài dài.

4. Chuyển đổi dữ liệu

Chuyển đổi dữ liệu công ty cũng tốn tiền như sổ sách ghi sổ của khách hàng và nhà cung cấp, dữ liệu thiết kế sản phẩm từ hệ thống cũ sang hệ thống mới của ERP. Mặc dù một số CIO thừa nhận hầu hết dữ liệu trong hệ thống cũ không sử dụng hết được. Các công ty có xu hướng không cho là hệ thống dữ liệu cũ của họ “rối rắm” cho đến khi họ thật sự bắt buộc phải chuyển đổi theo hệ thống phục vụ khách hàng mà ERP yêu cầu. Do vậy, các công ty có thể đánh giá, xem xét trước các chi phí chuyển đổi dữ liệu. Nhưng cũng lưu ý rằng các dữ liệu mới có thể đòi hỏi kiểm tra lại toàn bộ để thích nghi với quá trình thay đổi mới khi thực hiện ERP.

5. Phân tích dữ liệu

Thường thì dữ liệu từ hệ thống ERP phải được phối hợp với dữ liệu từ hệ thống bên ngoài để phân tích. Những người sử dụng với nhu cầu phân tích cao nên đính kèm chi phí của kho dữ liệu trong ngân sách ERP và họ cũng nên làm thêm một số việc cần thiết để thực hiện chúng thật trôi chảy.

6. Dịch vụ tư vấn

Các công ty nên xác định rõ các mục đích chính để các nhà cộng sự tư vấn phải hướng đến mục tiêu đó khi đào tạo nhân viên nội bộ.

7. Nhân sự

Thành công của ERP phụ thuộc nhiều vào việc bố trí nhân viên cho dự án, những nhân viên giỏi nghiệp vụ và các phòng ban IS (information system). Phần mềm đã quá phức tạp cộng thêm việc kinh doanh thay đổi quá rắc rối khiến bạn khó mà giao trọn dự án cho một vài người. Điều nguy hiểm là công ty phải chuẩn bị thay thế các nhân viên đó khi xong dự án. Mặc dù thị trường ERP không còn sức hút như trước kia, các công ty tư vấn và những công ty khác mất đi những nhân tài của họ sẽ săn tìm những nhân tài mới ở công ty bạn với mức lương hấp dẫn và mức thưởng cao. Điều mà bạn khó đáp ứng được cũng như chính sách về nhân sự cho phép. Nên hội ý riêng với Hành chánh nhân sự để thiết lập chế độ lương mới và mức thưởng cho các nhân viên kỳ cựu ERP. Nếu bạn để vuột họ, bạn sẽ còn tốn bộn tiền hơn để chi trả cho những nhà tư vấn khác.

8. Đội ngũ triển khai có thể không bao giờ ngừng lại

Hầu hết các công ty dự định giải quyết việc thực hiện ERP như họ sẽ làm với bất cứ dự án phần mềm nào khác. Ngay khi phần mềm được cài đặt, họ sẽ sắp xếp cho tất cả mọi người trong đội trở về vị trí cũ của mình. Nhưng sau dự án ERP, bạn lại không thể để họ quay về như thế được. Những người thực hiện dự án là những người vô cùng quan trọng vì họ làm việc quá mật thiết với ERP. Họ biết rõ quá trình bán hàng hơn những nhân viên bán hàng, biết nhiều về quy trình sản xuất hơn những nhân viên ở bộ phận sản xuất. Công ty bạn sẽ không thể nào đáp ứng nổi việc sắp xếp nhân viên dự án về lại vị trí công việc lúc trước của họ bởi vì có quá nhiều việc phải làm sau khi cài đặt phần mềm ERP. Nội việc viết báo cáo để lấy thông tin từ hệ thống mới ERP khiến họ bận rộn ít nhất là một năm. Và điều đó đã được phân tích. Có một số người hy vọng công ty sẽ thu được lợi ngay sau khi thực hiện dự án ERP. Nhưng tiếc rằng chỉ một vài phòng ban IS lập kế hoạch cho các hoạt động và qui trình cần thiết sau khi cài đặt ERP. Nhiều người bắt buộc phải xin trợ giúp thêm về tài chính, nhân sự sau thời hạn kéo dài của dự án trước khi ERP “biểu lộ” bất cứ lợi nhuận nào.

9. Chờ đợi hiệu quả đầu tư (ROI)

Một trong những quan điểm sai lầm của ban điều hành dự án là luôn nghĩ sẽ thu được lợi ngay khi cài đặt ERP. Hầu hết các hệ thống không bộc lộ giá trị của mình cho đến khi công ty cho chạy các hệ thống trong một quãng thời gian và có thể tập trung cải tiến các quá trình kinh doanh ảnh hưởng từ hệ thống. Và đội dự án sẽ không được tưởng thưởng cho đến khi cố gắng của họ được đáp trả.

10. Vấn đề gặp phải sau khi cài đặt ERP

Gần đây, công ty tư vấn Deloitte nghiên cứu 64 Fortune 500 công ty thì thấy là một trong 4 công ty thừa nhận là họ bị giảm hoạt động khi chạy chương trình ERP. Tỷ lệ phần trăm sự thật về nó nhiều hơn thế. Nguyên do chung cho những vấn đề trên là mọi cái hoạt động hiện thời khác với những gì nó làm trước kia. Khi mọi người không thể làm việc theo cách quen thuộc mà họ làm trước đây và chưa được huấn luyện cách mới, họ lo lắng, hoang mang, công việc diễn ra tồi tệ.

10. Tại sao ERP thường thất bại?

Nói một cách đơn giản nhất thì ERP là một bộ thực tiễn tốt nhất thực hiện các nhiệm vụ khác nhau trong công ty bạn, bao gồm Tài chính, Sản xuất, Kho. Để thu được kết quả cao nhất từ phần mềm này, bạn phải làm sao để khiến các nhân viên trong công ty tuân thủ đường lối làm việc đã được phác hoạ, vạch sẳn trong phần mềm. Nếu các nhân viên không đồng ý sử dụng quy trình làm việc mới của phần mềm vì họ cho rằng nó không hiệu quả như cái họ đang sử dụng thì họ sẽ từ chối sử dụng phần mềm hay thậm chí yêu cầu bộ phận IT thay đổi phần mềm để phù hợp với cách làm việc cũ của họ. Điểm này là điểm mấu chốt mà dự án ERP thường bị rối loạn. Những cuộc tranh cãi cứ liên tiếp diễn ra, nào là sẽ cài đặt phần mềm như thế nào hay thậm chí là có nên cài đặt nó hay không. Vấn đề sữa chữa theo ý muốn của mọi người sẽ tiếp diễn như một điệp khúc dài. Đừng quên rằng việc sữa chữa sẽ khiến phần mềm không vững chắc và khó bảo trì hơn khi nó thật sự đi vào quy trình.

Nhưng IT có thể giải quyết vấn đề trên nhanh chóng trong hầu hết mọi trường hợp. Ngoài ra một vài công ty lớn có thể tránh vấp phải vấn đề sữa chữa thay đổi ERP theo các kiểu khác nhau – mỗi ngành nghề kinh doanh đều khác nhau và phạm vi của các phương thức làm việc đều quy rằng nhà cung cấp ERP không thể giải thích khi nào mới phát triển phần mềm của nó. Một lỗi lầm chung thường gặp phải là các công ty cứ nghĩ rằng thay đổi thói quen của mọi người sẽ dễ dàng hơn thay đổi phần mềm như mong muốn. Hoàn toàn không phải như vậy!. Việc khiến mọi người trong công ty bạn sử dụng phần mềm mới để cải tiến đường lối làm việc của họ vẫn còn là một thử thách lớn. Nếu công ty bạn do dự trong việc thay đổi thì dự án ERP có khả năng thất bại nhiều hơn.

11. Làm sao tôi có thể cấu hình được phần mềm ERP?

Toàn bộ hệ thống ERP được xây dựng từ bảng dữ liệu, hàng ngàn thứ mà các lập trình viên IS và người sử dụng phải thiết lập ra để phù hợp với quy trình kinh doanh. Mỗi một bảng đều có hướng quyết định phần mềm theo con đường này hay con đường khác. Thuyết trình chỉ một cách để công ty thực hiện từng nhiệm vụ, có thể nói rằng, cho chạy hệ thống trả lương – các đơn vị hoạt động riêng lẻ của công ty và các phòng ban ở xa sẽ tích hợp lại dưới cùng một hệ thống. Nhưng để biết chính xác làm sao thiết lập các “công tắc” trong từng bảng đòi hỏi sự am hiểu sâu sắc các quy trình hiện hữu được sử dụng cho hoạt động kinh doanh. Vì thiết lập bảng đã được quyết định nên các quá trình kinh doanh này sẽ được sắp đặt lại, đó là cách của ERP. Hầu hết các hệ thống ERP đều được cấu hình trước, cho phép hàng trăm việc thiết lập theo thủ tục được lập bởi khách hàng.

Sưa Tầm