chúc các bạn ngày tốt lành và làm việc hiệu quả ngôn ngữ pythonopenerpcài đặt openerpcấu trúc openerp 7Mục đích nghiên cứu Đề tài được thực hiện, nhằm tìm hiểu về ngôn ngữ lập trình Python, hệ thống kiến trúc của OpenERP và triển khai cài đặt hệ thống.Nội dung, phạm vi tìm hiểu chính•Tìm hiểu khái niệm, kỹ thuật lập trình ngôn ngữ Python.•Tìm hiểu khái niệm, kiến trúc chung của hệ thống phần mềm ERP.•Tìm hiểu cấu trúc hệ thống OpenERP.•Triển khai cài đặt OpenERP source 7.0, và vận hành thử nghiệm một số ứng dụng cơ bản trong quản lý nguồn lực doanh nghiệpPhương pháp nghiên cứuQua các tài liệu, lý thuyết CSDL, hệ thống thông tin, công nghệ phần mềm đã được giảng dạy...Thông qua giáo viên hướng dẫn tại trường và cở sở thực tập, trao đổi với cộng đồng mạng internet và học hỏi những người có kinh nghiệm.Cấu trúc nội dung đề tàiChương 1: Tìm hiểu ngôn ngữ Python. Chương 2: Tổng quan về ERP và OpenERP.Chương 3: Hệ thống OpenERP với ngôn ngữ lập trình Python.
Trang 1LỜI CẢM ƠN
Trong quá trình tham gia thực tập, em đã nhận được sự huớng dẫn, giúp đỡ
và động viên tận tình từ nhiều phía: Cán bộ Sở Thông Tin và Truyền Thông TháiNguyên, quý thầy cô trong khoa Công Nghệ Thông Tin trường Đại Học Công NghệThông Tin và Truyền Thông Thái Nguyên, gia đình và bạn bè Những điều đó, đãtrở thành một động lực rất lớn giúp em có thể hoàn thành quá trình thực tập tốtnghiệp của mình
Đặc biệt, em xin bày tỏ lời cảm ơn tới thầy giáo Th.s Nguyễn Hồng Tâncùng Th.s Lê Hữu Nhân đã tận tình hướng dẫn, định hướng, tạo mọi điều kiện thuậnlợi nhất để em được học tập, củng cố kiến thức và thực hiện đề tài này
Dù đã cố gắng hoàn thiện một cách tốt nhất có thể Nhưng với phạm vi khảnăng nhất định của bản thân, chắc chắn sẽ không tránh khỏi những thiếu sót Chính
vì vậy, những sự góp ý, tận tình chỉ bảo của thầy, cô và các bạn, sẽ là điều vô cùngquý báu cho việc đúc rút kinh nghiệm và hoàn thiện hơn
Em xin chân thành cảm ơn!
Thái Nguyên, ngày … tháng … năm 2015
SINH VIÊN
Nguyễn Tất Duy
Trang 2
MỤC LỤC
LỜI CẢM ƠN i
MỤC LỤC ii
DANH MỤC CÁC THUẬT NGỮ VÀ TỪ VIẾT TẮT v
DANH MỤC BẢNG BIỂU vii
DANH MỤC HÌNH VẼ viii
MỞ ĐẦU ix
CHƯƠNG 1: TÌM HIỂU NGÔN NGỮ PYTHON 1
1.1 Giới thiệu ngôn ngữ lập trình Python 1
1.1.1 Quá trình phát triển của ngôn ngữ 1
1.1.2 Các phiên bản chính của Python 3
1.1.3 Ứng dụng Python trong thực tế 3
1.1.4 Giao diện ngôn ngữ 4
1.2 Các khái niệm và kiểu dữ liệu 4
1.2.1 Lệnh và khối lệnh 4
1.2.2 Hệ thống các từ khóa 5
1.2.3 Trình thông dịch, dấu nhắc dòng lệnh 5
1.2.4 Hệ thống kiểu dữ liệu 6
1.3 Cú pháp và các cấu trúc lập trình cơ bản 10
1.3.1 Toán tử 10
1.3.2 Chú thích 10
1.3.3 Biến và lệnh gán 11
1.3.4 Vào/ ra dữ liệu chuẩn 11
1.3.5 Các cấu trúc điều khiển trong chương trình 12
1.3.6 Hàm range() 14
1.3.7 Câu lệnh break, continue và mệnh đề else trong vòng lặp 15
1.3.8 Lệnh pass 15
1.3.9 Quản lí lỗi và các ngoại lệ 16
Trang 31.4 Hướng đối tượng trong Python 18
1.4.1 Định nghĩa đối tượng (object) 18
1.4.2 Function (hàm) 18
1.4.3 Class (lớp) 19
1.4.4 Module (khối chương trình) 21
CHƯƠNG 2: TỔNG QUAN VỀ ERP VÀ OPENERP 22
2.1 Tìm hiểu về ERP (Enterprise Resource Planning) 22
2.1.1 Khái niệm ERP 23
2.1.2 Lịch sử ERP 24
2.1.3 Mô hình triển khai ERP tổng thể 24
2.1.4 Các yêu cầu chính khi triển khai hệ thống ERP 25
2.1.5 Các phân hệ chính trong ERP 26
2.1.6 Vai trò của ERP trong hoạt động doanh nghiệp 26
2.1.7 Áp dụng ERP cho các doanh nghiệp 28
2.1.8 Ưu điểm và nhược điểm của ERP 29
2.1.9 Thực trạng triển khai ERP 30
2.2 Tổng quan về OpenERP 30
2.2.1 Điểm mạnh của OpenERP 31
2.2.3 Những lợi ích cơ bản của OpenERP 33
2.2.4 Vai trò của OpenERP trong doanh nghiệp qua các phân hệ 33
2.2.5 Đánh giá các phần mềm ERP mã nguồn mở 36
CHƯƠNG 3: HỆ THỐNG OPENERP VỚI NGÔN NGỮ LẬP TRÌNH PYTHON .37
3.1 Kiến trúc hệ thống OpenERP 37
3.1.1 Server - ORM 38
3.1.2 Mô hình MVC trong OpenERP 38
3.1.3 Hoạt dộng của mô hình MVC 39
3.2 Cấu trúc thư mục OpenERP 39
3.3 Module trong OpenERP 40
Trang 43.3.1 Cấu trúc module trong OpenERP 40
3.3.2 Các thành phần trong module 40
3.3.3 Tạo mới một module 41
3.3.4 Tập tin import init .py 42
3.3.5 Tập tin Manifest OpenERP .py 42
3.3.6 Tập tin XML 43
3.4 Đối tượng (Object) 43
3.4.1 Các ORM – mô hình đối tượng quan hệ 43
3.4.2 Các dịch vụ do các ORM khác 44
3.4.3 Object Attributes (các thuộc tính của đối tượng) 44
3.5 Module versioning 46
3.6 Khai báo báo cáo, report declaration 47
3.7 Bảo mật người dùng, nhóm users, goups trong OpenERP 47
3.8 Luồng công việc Workflow 48
3.8.1 Start workflow and stop workflow 49
3.8.2 Subflow, luồng công việc con 49
KẾT LUẬN 50
PHỤ LỤC 1: CÀI ĐẶT OPENERP 7.0 SOURCE TRÊN WINDOWS 51
TÀI LIỆU THAM KHẢO 58
NHẬN XÉT CỦA GIÁO VIÊN 59
Trang 5DANH MỤC CÁC THUẬT NGỮ VÀ TỪ VIẾT TẮT
CEO Chief Executive Officer Tổng giám đốc điều hành tổ chứcCNRI Corporation for National
Broker Architecture
Chuẩn giao tiếp cho hệ thống triểnkhai trên các nền tảng hệ điều hành CRM Customer relationship
GAAP Generally accepted accounting
principles
Bộ tiêu chuẩn quốc tế cho kế toán
GPL General Public License Giấy phép phần mềm tự do
vụ cho xử lý đồ họa
HP Hewlett Packard Tập đoàn công nghệ thông tin HPHRM Human resource management Quản lý nhân sự trong tổ chức
HTML Hyper Text Makeup Language Ngôn ngữ đánh dấu văn bản
IBM International Business
Trang 6Reporting Standards
Mac OS Macintosh Operating System Hệ điều hành của Apple dành cho
máy Macintosh MRP Manufacturing Resources
Planning
Hoạch định nguồn lực sản xuất
MVC Model View Controller Mô hình Model-View-Controller NASA National Aeronautics and
Space Administration
Cơ quan Hàng không và Vũ trụ tại Mỹ
ORM Object Relational Mapping Bản đồ đối tượng quan hệ
Perl Practical Extraction and Report
Language
Ngôn ngữ lập trình Perl
PSF Python Software Foundation Tổ chức phi lợi nhuận của Python RDBMS relational database
management system
Hệ thống quản lý cơ sở dữ liệu quan hệ
RAM Random Acceess Memory Bộ nhớ truy cập ngẫu nhiên
RML Report Makeup Language Ngôn ngữ định dạng báo cáo
SAP System Analysis and Program Công ty phần mềm doanh nghiệp
XML Extensible Markup Language Ngôn ngữ định dạng mở rộng
DANH MỤC BẢNG BIỂU
Bảng 1.1: Các kiểu dữ liệu thông dụng 6
Bảng 1.2: Kiểu dữ liệu Integers 6
Bảng 1.3: Các toán tử trong Python 10
Bảng 3.1: Chức năng của các thành phần trong module 41
Trang 7DANH MỤC HÌNH VẼ
Hình 1.1: Giao diện chạy Python trên cmd 4
Hình 1.2: Khối lệnh trong Python 4
Hình 1.3: Hệ thống các từ khóa 5
Hình 1.4: Dạng từ điển trong module base của OpenERP 7
Hình 1.5: Kiểu danh sách trong thiết lập của OpenERP 8
Hình 1.6: Các kiểu chú thích trong Python 10
Hình 1.7: Dạng vòng lặp for và if trong workflow của OpenERP 13
Hình 1.8: Kế thừa đơn của lớp bank với lớp osv trong OpenERP 20
Hình 1.9: Module register xây dựng trên class và def trong OpenERP 21
Hình 2.1: Các nguồn lực cơ bản của doanh nghiệp trong ERP 22
Hình 2.2: Mô hình tổng thể triển khai hệ thống ERP trong doanh nghiệp 24
Hình 2.3: Các phân hệ chính trong ERP 26
Hình 2.4: Truy cập hệ thống ERP trên điện thoại 29
Hình 2.5: Các phiên bản của hệ thống OpenERP 30
Hình 2.6: Mô hình tích hợp các phân hệ cơ bản trong hệ thống OpenERP 31
Hình 2.7: Mức hỗ trợ của một số giải pháp ERP mã nguồn mở 36
Hình 3.1: Kiến trúc của hệ thống OpenERP 37
Hình 3.2: Mô hình Model-View-Controller 38
Hình 3.3: Tổ chức thư mục của OpenERP 39
Hình 3.4: Cấu trúc của Module 40
Hình 3.5: Các mô tả về module base trong OpenERP 42
Hình 3.6: Dạng đối tượng trong OpenERP 44
Hình 3.7: Mô hình cơ bản của một Workflow 48
Hình PL1.1: Cài đặt thư viện Mako 52
Hình PL1.2: Cấu hình người dùng cho PostgreSQL 53
Hình PL1.3: Cấu hình password cho người dùng PostgreSQL 53
Hình PL1.4: Thiết lập các quyền cho người dùng trong PostgreSQL 53
Hình PL1.5: Tạo Pydev project mới 54
Hình PL1.6: Đặt tên cho PyDev Project 54
Hình PL1.7: Thiết lập Python kết hợp với OpenERP 55
Hình PL1.8: Lựa chọn vị trí trình thông dịch Python được cài đặt 55
Hình PL1.9: Chạy file openerp-server.py 57
Hình PL1.10: Thiết lập cơ sở dữ liệu cho OpenERP 57
Trang 8MỞ ĐẦU
Trên vai trò là một lập trình viên hoặc yêu thích lập trình, thì có lẽ chúng ta
đã từng được nghe nói đến Python, một ngôn ngữ mạnh mẽ với việc hỗ trợ các địnhdạng dữ liệu HTML, XML, các giao thức internet thông dụng như HTTP, làm việctốt trên các nền tảng công nghệ Web sử dụng các Frameworks như Django, viết cácphần mềm game chạy trên mọi hệ điều hành bằng các thư viện như wxPython, GTK,các application cho smartphone trên Window Mobile, Symbian, Android, và xâydựng các hệ thống quản lý, phục vụ cho hoạt động trong các tổ chức
Với sự trợ giúp của công nghệ thông tin, các doanh nghiệp hiện nay, đã ápdụng các phần mềm vào quản trị hệ thống, ngày càng trở nên phổ biến và thiết yếu.Một trong số ứng dụng không thể thiếu mà các nhà quản lý quan tâm đó chính là hệthống hoạch định nguồn lực doanh nghiệp ERP, hệ thống này giúp quản lý tất cảnguồn lực của doanh nghiệp (nhân lực, tài chính, tư liệu sản xuất, phương thức hoạtđộng…), trong đó OpenERP là một trong các giải pháp ERP cần thiết trong môitrường hoạt động của doanh nghiệp
Do vậy, qua thực hiện đề tài “Tìm hiểu ngôn ngữ lập trình Python và triển khai ứng dụng hệ thống thông tin nguồn lực doanh nghiệp OpenERP”, em
mong muốn hiểu biết về phần mềm mã nguồn mở đang ngày càng phổ biến này, và
có những hướng mở cho công việc trong các doanh nghiệp hiện nay
Trang 9Tuy nhiên, tình hình kinh tế khá bất ổn, sản phẩm tiêu thụ chậm, tồn khonhiều, nên nhiều doanh nghiệp phải ngừng hoạt động, giải thể, hoặc chuyển đổihướng phát triển Ðiều này, đặt ra cho các bộ, ngành và địa phương cần có nhữnggiải pháp đồng bộ để tạo điều kiện thuận lợi, nhằm nâng cao năng lực cạnh tranhgiúp duy trì ổn định và phát triển bền vững và một trong số các giải pháp đó phải kểđến hệ thống hoạch định nguồn lực doanh nghiệp mã nguồn mở OpenERP.
Mục đích nghiên cứu
Đề tài được thực hiện, nhằm tìm hiểu về ngôn ngữ lập trình Python, hệthống kiến trúc của OpenERP và triển khai cài đặt hệ thống
Nội dung, phạm vi tìm hiểu chính
Tìm hiểu khái niệm, kỹ thuật lập trình ngôn ngữ Python
Tìm hiểu khái niệm, kiến trúc chung của hệ thống phần mềm ERP
Tìm hiểu cấu trúc hệ thống OpenERP
Triển khai cài đặt OpenERP source 7.0, và vận hành thử nghiệm một
số ứng dụng cơ bản trong quản lý nguồn lực doanh nghiệp
Phương pháp nghiên cứu
Qua các tài liệu, lý thuyết CSDL, hệ thống thông tin, công nghệ phần mềm
đã được giảng dạy
Thông qua giáo viên hướng dẫn tại trường và cở sở thực tập, trao đổi vớicộng đồng mạng internet và học hỏi những người có kinh nghiệm
Cấu trúc nội dung đề tài
Chương 1: Tìm hiểu ngôn ngữ Python
Chương 2: Tổng quan về ERP và OpenERP
Chương 3: Hệ thống OpenERP với ngôn ngữ lập trình Python
Trang 10CHƯƠNG 1: TÌM HIỂU NGÔN NGỮ PYTHON
1.1 Giới thiệu ngôn ngữ lập trình Python
Python, ngôn ngữ được tạo ra bởi Guido Van Rossum (Guido) tạiAmsterdam vào năm 1991, là ngôn ngữ lập trình bậc cao dạng thông dịch, hướngđối tượng, mạnh mẽ, mềm dẻo, cấu trúc rõ ràng, thuận tiện cho người học
Python tương thích trên mọi hệ điều hành từ MS-DOS đến Mac OS,Windows, Linux, các hệ điều hành khác thuộc họ Unix và thiết bị di động Vì làngôn ngữ lập trình dạng thông dịch nên tốc độ thực thi của Python cực kỳ nhanh và
có thể tạo ra những chương trình chạy từ những script nhỏ cho đến những chươngtrình lớn và vô cùng mạnh mẽ, đặc biệt Python là ngôn ngữ hoàn toàn miễn phí chongười dùng
Nó có sẵn nhiều kiểu dữ liệu cấp cao, như các mảng linh hoạt (flexiblearrays) và từ điển (dictionaries) mà ta phải mất nhiều thời gian để hiện thực trên C.Python thích hợp với các chương trình lớn, hơn cả Awk và Perl, được thiết kế để cóphục vụ như là một ngôn ngữ kịch bản để tuỳ biến và mở rộng các ứng dụng lớnhơn, tích hợp sẵn nhiều công cụ và bộ thư viện chuẩn phong phú, cho phép ngườidùng dễ dàng tạo ra các dịch vụ Web, sử dụng các thành phần COM (ComponentObject Model) hay CORBA (Common Object Request Broker Architecture)
Là kiểu ngôn ngữ đa biến hóa, cho phép sử dụng nhiều phương pháp lậptrình khác nhau: Hướng đối tượng, có cấu trúc, chức năng, hoặc chỉ hướng đến mộtkhía cạnh [1] Đặc điểm quan trọng chính là giải pháp tên động, kết nối tên biến vàtên phương thức với nhau trong khi thực thi chương trình
1.1.1 Quá trình phát triển của ngôn ngữ
Mọi ngôn ngữ lập trình, đều gắn liền với quá trình hình thành và phát triểnđặc trưng Python cũng vậy, nó bao gồm các giai đoạn phát triển chính:
Trang 11Giai đoạn 1991-1999
Từ 1991 đến 1995, Guido làm việc tại trung tâm toán-tin học (CentrumWiskunde & Informatica - CWI) Amsterdam, Hà Lan, tại đây, phiên bản Python 1.0được phát hành (phiên bản cuối cùng là 1.2) Năm 1995, thì chuyển sang làm việctại CNRI (Corporation for National Research Initiatives) Reston, Virginia, (phiênbản cuối cùng là 1.6) Sau đó, ông rời bỏ CNRI để làm việc với các lập trình viênchuyên viết phần mềm thương mại Ông có ý tưởng sử dụng Python với các phầnmềm tuân theo chuẩn GPL (General Public License) CNRI và FSF (Free SoftwareFoundation) đã cùng nhau hợp tác, để hoàn thiện bản quyền cho phù hợp với giấyphép GPL, phiên bản 1.6.1 ra đời sau đó (là phiên bản đâu tiền tuân theo GPL)
Giai đoạn đầu những năm 2000
Năm 2000, Guido và nhóm phát triển, thành lập BeOpen PythonLabs team,thực hiện phát hành phiên bản 2.0 Sau khi Guido và các thành viên PythonLabs gianhập Digital Creations, Python 2.1 ra đời Từ đây, ngôn ngữ này thuộc sở hữu của(Python Software Foundation – PSF), phiên bản Python 2.4.3 phát hành vào29/3/2006, tiếp theo là Python 2.5
Giai đoạn từ năm 2006 đến nay
Là giai đoạn gần chúng ta nhất, sự phát triển có bước ngoặt lớn trong giaiđoạn này, các nhà phát triển thảo luận và phát triển phiên bản mới Python 3.0, cácdòng 3.x có một số điểm không hoàn toàn tương thích với dòng 2.x Nhóm phát triển
đã nghiên cứu những điểm còn chưa hoàn thiện trong phiên bản củ và cải thiện tối
ưu hơn Nguyên tắc chủ đạo để phát triển là “bỏ cách làm việc cũ nhằm hạn chếtrùng lặp về mặt chức năng của Python” Dòng Python 3.x hiện nay đã được nângcấp nên phiên bản mới nhất là 3.4.2 (tính tới thời điểm 01/01/2015), dòng phiên bảnnày dần ổn định, hoàn thiện và trong xu thế tương lai sẽ là chuẩn của ngôn ngữ này
Trang 12Python còn có thêm sự kết hợp cùng với các ngôn ngữ phổ biến hiện nay:
CPython: Được viết bằng ngôn ngữ C, có thể chạy trên nhiều nền tảng hệ
điều hành khác nhau
PyPy: Là một bộ compiler mới với khả năng biên dịch trực tiếp không cần
qua bytecode vì vậy nó nhanh hơn CPython và đang được phát triển
JyThon: Viết dành cho ngôn ngữ java, có thể tương tác với các class và sử
dụng được thư viện java khi biên dịch sẽ chuyển qua byte-code của java
IronPython: Tương tác với nền tảng NET Frameworks của Microsoft.
1.1.2 Các phiên bản chính của Python
Các dòng phát triển chính của ngôn ngữ là phiên bản Python 2.x và 3.x,giữa 2 dòng này đa số là giống nhau, tuy vậy, phiên bản 3.x có cấu trúc khác so vớibản 2.x, nhằm nâng cao xử lí vấn đề mà Python gặp phải đó là xử lí floating point, vì
so với java thì trong Python 2.x xử lí kém hơn [1] Đặc biệt trong Python3.x xử línhanh hơn so với Java, đồng thời giản lược các chức năng tương tự và đặc điểm ưuviệt thường có trong các phiên bản sau của ngôn ngữ
1.1.3 Ứng dụng Python trong thực tế
Hệ thống Bit-Torrent peer-to-peer là một Python program NASA (NationalAeronautics and Space Administration) ứng dụng vào scientific programming tasks,Intel, Cisco, HP (Hewlett Packard), IBM (International Business Machines)… ápdụng vào quá trình hardware-testing Hãng phim hoạt hình nổi tiếng Pixar, dùng vàoviệc Production of movie amination Cùng với phát triển hệ thống tổng thể hoạchđịnh nguồn lực doanh nghiệp OpenERP và rất nhiều mảng ứng dụng thực tiễn có sựtham gia của Python Các ứng dựng nổi bật phổ biến nhất, đó là Google sử dụng
Trang 13Python vào web search system cho trang Google.com, và Youtube.com một dịch vụchia sẻ video số 1 thế giới, phần lớn được viết bằng Python.
1.1.4 Giao diện ngôn ngữ
Mở màn hình tương tác dòng lệnh cmd (command prompt), nhập vào lệnh
c:\Python27\Python.exe, để chạy Python, từ đây chúng ta có thể lập trình trực tiếp,
nó sẽ thực thi, cho ra kết quả ngay lập tức như Perl, tạo thuận lợi cho việc test nhanhcác chương trình và đây là điểm mạnh mà các ngôn ngữ lập trình khác không có
Hình 1.1: Giao diện chạy Python trên cmd
Để thoát khỏi phiên làm việc, thì dùng lệnh exit() hoặc quit() hoặc nhấn tổhợp phím ctrl+z Python hỗ trợ trực tiếp việc xây dựng và phát triển cho ngôn ngữtrên trình tương tác IDLE (Integrated DeveLopment Environment), và các công cụ
hỗ trợ phổ biến khác như eclipse hoặc Pycharm
1.2 Các khái niệm và kiểu dữ liệu
1.2.1 Lệnh và khối lệnh
Khối lệnh trong Python được tạo bằng cách thụt vào bên phải với khoảngcách là 4 kí tự, so với câu lệnh cha chứa nó Mỗi câu lệnh trong Python nằm trênmột dòng mã nguồn, khi kết thúc câu lệnh không cần phải dùng bất kì kí tự gì
Trang 14Hình 1.2: Khối lệnh trong Python
1.2.2 Hệ thống các từ khóa
Tên các từ khóa được sử dụng dựa theo nghĩa của các từ tiếng Anh, Trong
đó, nó phân biệt kiểu chữ hoa và chữ thường và không chứa các kí tự đặc biệt (@,
$,! ) trong tên của nó, từ khóa được sử dụng để khai báo các câu lệnh (if, while )
và các đối tượng (def, class…) Giống với C/C++, các từ khóa đều ở dạng chữthường, ta có hệ thống 31 từ khóa chuẩn trong Python 2 [4]:
Hình 1.3: Hệ thống các từ khóa
1.2.3 Trình thông dịch, dấu nhắc dòng lệnh
Python, là ngôn ngữ lập trình dạng thông dịch, giúp tiết kiệm thời gian pháttriển ứng dụng Trình thông dịch có thể được sử dụng để chạy file script, hoặc sửdụng ở chế độ tương tác trên cmd, tương tự shell của các hệ điều hành họ Unix, nócũng được coi là một máy tính khi nhập vào một biểu thức nhấn enter, kết quả trả vềngay lập tức [1] Nó rất hữu ích, giúp nghiên cứu tính năng hoặc để chạy thử mãtrong suốt quá trình phát triển phần mềm
IDLE là trình tương tác với người dùng được tích hợp sẵn trong Python, nócung cấp cho người lập trình môi trường sử dụng để tạo ra các chương trình mộtcách cơ bản nhất và thực hiện chạy trực tiếp trên nó Trong Python có 2 loại dấu
Trang 15nhắc lệnh là “>>>” và “…”, hai ký pháp này thực hiện chờ lệnh từ người dùng vàtruy xuất kết quả
1.2.4 Hệ thống kiểu dữ liệu
Python là ngôn ngữ định kiểu rất mạnh, nó không cho phép các thao táckhông hợp lệ, như cộng kiểu số với kiểu chuỗi [1] Nó sử dụng hệ thống kiểu ducktyping còn gọi là latent typing, tức là chỉ kiểm tra các ràng buộc về kiểu dữ liệu tạithời điểm thực thi, khi đó, nếu một thao tác trên một đối tượng bị thất bại, thì là dokhông sử dụng một kiểu thích hợp Hệ thống kiểu dữ liệu thông dụng:
Int, Long Số nguyên
Float Số thực
Complex Số phức
List Danh sách có thể thay đổi
Tuple Bộ các phần tử không thể thay đổi
Str Chuỗi kí tự không thể thay đổi
Set Một tập không theo thứ tự, mỗi phần tử chỉ xuất hiện một lần
Bảng 1.1: Các kiểu dữ liệu thông dụng
Integers (kiểu nguyên):
Loại kiểu Phạm vi, giá trị Ý nghĩa
Plain integers -2147483648 đến
2147483647
Biểu diễn cho các số nguyên trong khoảng
đã cho
Trang 16Long integer Vô cùng Là dạng không giới hạn của số nguyên (ở
Python 3 nó được sát nhập về kiểu int)Boolean True hay False Đối tượng logic, là một kiểu con của Plain
Integers, giá trị của nó giống như 0 và 1
Bảng 1.2: Kiểu dữ liệu Integers
Floating point numbers (số thực), complex numbers (số phức): Để khai
báo một số thực chỉ việc gán giá trị của số thực cho biến và số phức cũng như vậy
>>> x = 1.0 # floating point numbers.
>>> y = 2+3j # complex numbers.
String (Kiểu chuỗi): Giá trị của chuỗi được đặt trong cặp dấu nháy đơn
hoặc nháy kép
>>> a = ‘sabcdefg’ # biến a được gán giá trị kiểu chuỗi.
>>> a[1] # xuất ra phần tử ở vị trí 1 trong chuỗi, kết quả là: ‘a‘.
Dictionary (Kiểu từ điển): Là kiểu dữ liệu được bao trong cặp ngoặc nhọn,
có quan hệ 1-1 giữa khoá và giá trị, theo đó, các khoá phải khác nhau và là duy nhấttrong từ điển, còn giá trị có thể trùng, ta có dạng của từ điển:
Trang 17Hình 1.4: Dạng từ điển trong module base của OpenERP
List (kiểu danh sách): Làm việc như là một mảng các đối tượng, là kiểu
rất linh động [1] Danh sách được bao bởi cặp dấu ngoặc vuông, các phần tử cáchnhau bởi dấu phẩy
Trang 18Hình 1.5: Kiểu danh sách trong thiết lập của OpenERP
Trong danh sách có các phương thức chính:
append(x): Thêm một thành phần vào cuối của danh sách, tương đương
với: a[len(a):] = [x]
extend(L): Mở rộng danh sách bằng cách thêm tất cả các thành phần trong
danh sách đã nhận Tương đương với a[len(a):] = L
count(x): Trả về số lần x xuất hiện trong danh sách.
index(x): Trả về chỉ số của phần tử có giá trị x đầu tiên danh sách.
insert(i,x): Chèn một phần tử vào một ví trí đã định Đối số đầu tiên i là chỉ
sổ của phần tử trước chỗ sẽ chèn, vì thế a.insert(0, x) chèn tại vị trí đầu của danhsách và a.insert( len(a), x) tương đương với a.append(x)
Trang 19remove(x): Loại bỏ phần tử đầu tiên trong danh sách mà có giá trị là x Nếu
không có phần tử như vậy thì báo lỗi
pop([i]): Loại bỏ phần tử tại vị trí i và trả về nó Nếu không xác định chỉ số,
a.pop( ) sẽ loại bỏ và trả về phần tử cuối cùng trong danh sách
sort( ): Sắp xếp các thành phần của danh sách.
reverse( ): Đảo ngược các phần tử trong danh sách.
Kiểu Tuple: Là một biến thể của danh sách nhưng các phần tử của nó
không thay đổi Các phương thức insert, index, append, extend trên List không thểthực hiện được trên Tuple Tuple nhanh hơn list và được sử dụng khi các phần tửtrong đối tượng là cố định không thay đổi, ví dụ như key trong kiểu từ điển
>>> t = ("a", "b", "mpilgrim", "z", "example")
>>>t[0] # hiện phần tử có chỉ số là 0(bắt đầu từ trái qua phải) của Tuple 'a'
>>>t[−1] # chỉ số -1 trở đi (tính từ phải qua trái)
'example'
Kiểu set: Là một tập không có thứ tự và không có các phần tử trùng lặp,
công dụng cơ bản là để kiểm tra thành viên, và loại trừ các mục lặp Đối tượng setcũng hỗ trợ các phép toán như: Hợp, giao, hiệu, và hiệu đối xứng
1.3 Cú pháp và các cấu trúc lập trình cơ bản
1.3.1 Toán tử
Trang 20– Trừ ^ Phép (xor)
Hình 1.6: Các kiểu chú thích trong Python
1.3.3 Biến và lệnh gán
Trong Python, biến mang kiểu động, ta không phải khai báo biến khi sửdụng, biến được xem là đã khai báo khi được gán một giá trị lần đầu tiên, căn cứ vàomỗi lần gán, Python sẽ tự động xác định kiểu dữ liệu của biến và tự động được giải
Trang 21phóng khi ra khỏi phạm vi của chương trình sử dụng nó Tên biến được ở dạng chữthường, có thể dùng trực tiếp bằng cách sử dụng lệnh gán: tên_biến = biểu_thức
>>> x = 23.8
>>> y = -x ** 2
>>> z1 = z2 = x + y # có thể gán gộp giá trị cho các biến
1.3.4 Vào/ ra dữ liệu chuẩn
Để in ra các giá trị của các đối tượng lên màn hình, sử dụng lệnh print:
>>>print (2 + 3j) * (4 – 6j) # in ra giá trị của biểu thức toán học
>>>print“in ra man hinh mot chuoi” # áp dụng cho kiểu chuỗi
# các trường hợp nội suy chuỗi (string interpolation)
>>>print (“Hello %s” %(“world!”)) # %s thay thế cho kiểu chuỗi
>>>print (“i = %d” %i) # %d thay thế cho kiểu số nguyên
>>>print (“a = %.2f and b = %.3f” %(a,b)) # %f thay thế cho kiểu số thực
Python sử dụng hàm raw_input để nhận dữ liệu nhập từ người dùng, giá trị
nhận được sẽ là giá trị của kiểu chuỗi
>>> a = raw_input (‘ nhap ten cua ban vao day’)
>>> print ‘tên của bạn là: ’, a
1.3.5 Các cấu trúc điều khiển trong chương trình
Cấu trúc rẽ nhánh (if)
Trang 22Không giống với các ngôn ngữ lập trình khác, trong cấu trúc rẽ nhánh,Python thực hiện trên câu lệnh if (không có cấu trúc switch) [3], khi thỏa mãn điềukiện tương ứng thì chỉ nhánh đầu tiên của nó sẽ được thực hiện, và tự động kết thúcquá trình làm việc với if Có 3 dạng cấu trúc của lệnh if:
# khối lệnh (khi mọi điều kiện logic phía trên vi phạm)
Cấu trúc lặp (for và while)
Trang 23Trong Python, chỉ tồn tại 2 loại cấu trúc lặp là for và while [3], nó hoàntoàn giản lược đi các cấu trúc lặp tương tự với 2 loại này, nhằm đáp ứng phù hợp vớiphong cách gọn và đơn giản của ngôn ngữ.
Lệnh for: Thường áp dụng đối với danh sách.
for ten_bien in ten_danh_sach:
# khối lệnh (lặp cho đến hết giá trị trong danh sách)
Hình 1.7: Dạng vòng lặp for và if trong workflow của OpenERP
Lệnh while:
while biểu_thức_đúng:
# khối lệnh (vòng lặp thực hiện đến khi điều kiện bị phạm (nhận giá trịFalse) thì dừng)
Trang 24Python thực hiện đếm từ 0 cho các chỉ số, nên điểm kết thúc đã cho không
nằm trong danh sách được tạo, ở đây range(10) sẽ tạo ra một danh sách 10 giá tri
(không bao gồm 10) hoặc có thể đặt cho range() các vị trí bắt đầu, vị trí bước nhảytrong danh sách
Ví dụ: Lặp qua chỉ số của một chuỗi, sử dụng kết hợp range() và len():
>>> listphim = ['doremon', 'itron']
>>> for i in range(len(listphim)):
print(i, listphim[i])
0 doremon
1 itron
Trang 251.3.7 Câu lệnh break, continue và mệnh đề else trong vòng lặp
Lệnh break: Thoát khỏi quá trình làm việc với vòng lặp có chứa nó.
Lệnh continue: Thoát vòng lặp hiện tại và tiếp tục thực hiện với giá trị lặp
tiếp theo
Ngoài ra, mệnh đề else có thể được sử dụng tùy vào ý đồ người lập trình
Nó thực hiện khi vòng lặp kết thúc (đến cuối của danh sách với for, hoặc khi gặpđiều kiện sai với while), nhưng không được thực hiện khi vòng lặp kết thúc bằnglệnh break Xem xét ví dụ dưới đây để tìm số nguyên tố:
print n,'la so nguyen to'
Trang 26pass # trạng thái chờ ngắt từ bàn phím.
1.3.9 Quản lí lỗi và các ngoại lệ
Lỗi cú pháp: Bản chất là lỗi được phân tích từ trong Python, đây là kiểu lỗi
phổ biến nhất của những người mới học lập trình Python:
>>> while True
print('Hello world') # lỗi thiếu dấu : SyntaxError: invalid syntax
Việc phân tích trên các dòng mắc lỗi, thường thì hiển thị con trỏ đầu tiên tại
vị trí lỗi Bên cạnh đó trong Python còn có các lỗi khi thực thi chương trình (cácngoại lệ) và lỗi ngữ nghĩa
Các ngoại lệ (exception): Mặc dù một câu lệnh hoặc một biểu thức là
chính xác về cú pháp nhưng nó vẫn có thể gây ra lỗi khi chạy nó Các lỗi dò đượctrong quá trình thực hiện được gọi là các ngoại lệ và không thể tránh khỏi tuyệt đốicác lỗi này Hầu hết các ngoại lệ đều không điều khiển được bởi chương trình, tuynhiên có thể chỉ ra các thông báo lỗi:
>>> '2' + 2
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
'2' + 2
TypeError: Can't convert 'int' object to str implicitly
Dòng cuối cùng của thông báo lỗi cho biết đó là một ngoại lệ Các ngoại lệ
có nhiều kiểu khác nhau, được in ở cuối thông báo lỗi Các tên ngoại lệ chuẩn cácđịnh danh có sẵn (không trùng với từ khóa dành riêng) Phần còn lại cung cấp chi
Trang 27tiết dựa trên kiểu của ngoại lệ và nguyên nhân gây ra lỗi Phần đặt trước thông báolỗi chỉ ra ngữ cảnh ngoại lệ, theo cơ chế dò lùi kiểu ngăn xếp.
Điều khiển các ngoại lệ: Có thể viết các chương trình để điều khiển các
ngoại lệ nào đó, xem xét ví dụ mở một file:
for arg in sys.argv[1:]:
Hoạt động: Nếu không có ngoại lệ nào xảy ra, mệnh đề except được bỏ qua
và tiếp tục thực hiện try cho đến khi kết thúc Nếu có một ngoại lệ xảy ra trong khiđang thực hiện mệnh đề try thì phần còn lại của mệnh đề sẽ bị bỏ qua Sau đó nếunhư loại lỗi đó mà tương ứng với tên của ngoại lệ được đặt sau từ khóa except thìmệnh đề except sẽ được thực hiện, và sau đó tiếp tục thực hiện cho đến hết câu lệnhtry Nếu một ngoại lệ xảy ra mà không tương ứng với ngoại lệ đã được đặt sau mệnh
đề except thì nó sẽ bỏ qua thoát ra khỏi câu lệnh try
Một câu lệnh try có thể có nhiều hơn một mệnh đề except, để xác định cácđiểu khiển cho các ngoại lệ khác nhau Điều khiển các ngoại lệ xảy ra tương ứng vớimệnh đề try Một mệnh đề except có thể có nhiều ngoại lệ theo sau được đặt trongdấu ngoặc đơn Câu lệnh try…except có một mệnh đề else mở rộng, được sử dụng
để viết các đoạn mã mà chỉ thi hành khi mệnh đề try không gây ra một ngoại lệ nào
Trang 28Sử dụng mệnh đề else giúp ngăn ngừa được các ngoại lệ gây ra bởi đoạn code nằmtrong try…, nó có thể có một giá trị liên quan, được gọi là đối số của ngoại lệ
1.4 Hướng đối tượng trong Python
1.4.1 Định nghĩa đối tượng (object)
Các dữ liệu và chỉ thị được kết hợp vào một đơn vị đầy đủ tạo nên một đốitượng Đơn vị này tương đương với một chương trình con và vì thế các đối tượng sẽđược chia thành hai bộ phận chính: các phương thức (method) và các thuộc tính(attribute) Trong thực tế, các phương thức của đối tượng là các hàm và các thuộctính của nó là các biến, các tham số hay hằng nội tại của một đối tượng (hay nóicách khác tập hợp các dữ liệu nội tại tạo thành thuộc tính của đối tượng) Cácphương thức là phương tiện để sử dụng một đối tượng trong khi các thuộc tính sẽ
mô tả đối tượng có những tính chất gì
Python là một ngôn ngữ lập trình hướng đối tượng, các chương trình trong
nó được cấu thành từ các định nghĩa đối tượng và định nghĩa hàm, và phần lớn việctính toán đều được diễn đạt trên những thao tác với các đối tượng
1.4.2 Function (hàm)
Nhằm tối ưu hóa, tạo sự thuận tiện cho việc sử dụng lại trong chương trìnhchúng ta cần xây dựng hàm trong Python có cú pháp:
def function_name (argument(s)):
# function code suite
Trong đó: def là từ khóa chỉ ra điểm bắt đầu tên của một hàm, functionname: Tên hàm định nghĩa, arguments: Danh sách các lý lẽ (các tham số của hàmnếu có), “:” là điểm bắt đầu cho khối lệnh định nghĩa về hàm (luôn phải có),function code suite: Tập các lệnh của hàm
Trang 29Python sẽ tự xác định chúng dựa theo giá trị được truyền khi gọi hàm.Không phân biệt truyền tham biến hay truyền tham trị, một định nghĩa hàm đưa tênhàm đó vào một bảng ký hiệu hiện thời.
1.4.3 Class (lớp)
Lớp cần phải được định nghĩa trước khi nó có thể sử dụng, tên của lớp phảibắt đầu bằng các kí tự chữ cái latinh, theo sau là các kí hiệu chữ cái, chữ số, dấugạch nối, đối tượng lớp sẽ được tạo ra ngay sau khi định nghĩa lớp kết thúc, Python
sử dụng một cách thức để định nghĩa một lớp như sau:
class ClassName:
<statement-1> # mô tả các định nghĩa của đối tượng ClassName
<statement-n>
Class: Là từ khóa bắt đầu của lớp ClassName: Tên của lớp
Lớp đối tượng: Có thao tác tham chiếu thuộc tính và thực thể.
Tham chiếu thuộc tính: Cũng như cú pháp chuẩn cho tất cả các tham
chiếu thuộc tính: Obj.name, giá trị tên thuộc tính là các tên mà nằm trong khônggian tên của lớp khi đối tượng được tạo ra
Thực thể lớp: Sử dụng ký hiệu, mô tả đối tượng lớp như một hàm không
tham số và trả về một thực thể mới của lớp:
x = MyClass() # tạo thực thể lớp, gán đối tượng với biến cục bộ x
Việc thao tác một thực thể (gọi một đối tượng lớp) tạo ra một đối tượngrỗng Có nhiều lớp mục đích là để tạo ra các đối tượng với các thực thể thỏa mãnmột trạng thái khởi tạo xác định, vì thế một lớp có thể định nghĩa một phương thức
Trang 30đặc biệt tên là init ( ) [8], đây là hàm khởi tạo đối tượng, khi tạo ra thực thể củalớp, khi đó, thực thể lớp tự động gọi đến hàm init ( ) cho thực thể vừa được tạo
ra Trong Python còn có dạng file init .py đây là một file nhằm khai báo vớiPython đây là đại diện cho các package, nó cho phép nhập các module trong góihoặc lập trình trực tiếp trên nó
Kế thừa đơn: Trong Python không có khái niệm Protected như C++, chỉ có
các hàm, dữ liệu thành phần public hay private, và chúng được phân biệt qua tên,những tên bắt đầu bằng và kết thúc có tối đa 1 dấu _ là private Ví dụ: x, x_, abc là những biến private, y , a, bc, xyz , x_ là những biến public Tương tựnhư vậy với tên hàm Các biến và phương thức private chỉ có thể truy cập nội bộlớp, các biến và phương thức public có thể truy xuất trong toàn bộ chương trình Chỉ
có 1 loại kế thừa là public Cú pháp khai báo một lớp con kế thừa:
class DerivedClassName(BaseClassName):
<statement-1>#khối lệnh mô tả lớp
Hình 1.8: Kế thừa đơn của lớp bank với lớp osv trong OpenERP
Đa kế thừa: Khai báo đa kế thừa bằng cách thêm danh sách các lớp cơ sở
mà lớp đó muốn kế thừa vào trong cặp dấu () sau tên lớp, khi có yêu cầu thừa kếthuộc tính từ các lớp cha, thì cơ chế hoạt động của lớp con sẽ duyệt lần lượt theo
Trang 31chiều từ trái qua phải đối với các lớp cha đó, xong hết lớp này rùi mới tiếp tục duyệtlớp khác đến khi xác định được đối tượng, do Python không tự gọi hàm khởi tạo củacác lớp cha nên thứ tự kế thừa không quan trọng [8]:
class DerivedClassName(Base1, Base2, Base3):
1.4.4 Module (khối chương trình)
Python đặt các định nghĩa hàm, lớp trong một file và sử dụng chúng nhưmột kịch bản tương tác của trình thông dịch, file như vậy gọi là một module Cácđịnh nghĩa từ một module có thể được nhập vào một module khác hoặc vào modulechính, để nhập 1 module: import ten_module
Mục đích sử dụng module: Chia chương trình thành các modules nhỏ với
mục đích dễ quản lý và sử dụng lại trong các chương trình khác Trong Python cungcấp sẵn tập hợp các modules chuẩn có thể sử dụng Module có thể được nhập vàomodule khác, không yêu cầu phải đặt tất cả các câu lệnh import tại vị trí bắt đầu củamodule Tên module được nhập vào, đặt trong bảng kí hiệu toàn cục của việc nhậpmodule đó:
Trang 32Hình 1.9: Module register xây dựng trên class và def trong OpenERP
CHƯƠNG 2: TỔNG QUAN VỀ ERP VÀ OPENERP
2.1 Tìm hiểu về ERP (Enterprise Resource Planning)
ERP là một giải pháp phần mềm ra đời đã khá lâu, nhằm hỗ trợ cho hoạtđộng của tổ chức, doanh nghiệp và thực hiện các quy trình xử lý một cách tự độnghoá và hiệu quả thông qua tích hợp tất cả phòng ban, mọi chức năng lại trong một hệthống máy tính duy nhất để dễ theo dõi hơn, đồng thời đáp ứng nhiều nhu cầu khácnhau Hệ thống được xây dựng, nhằm đảm bảo quản lý tốt các nguồn lực của doanhnghiệp như nhân lực, vật tư, máy móc và tiền bạc có sẵn với số lượng đủ khi cần,bằng cách sử dụng các công cụ hoạch định và lên kế hoạch Đặt điểm nổi bật của
Trang 33ERP là một hệ thống phần mềm linh hoạt, có thể mở rộng và phát triển theo thờigian áp dụng cho từng loại hình doanh nghiệp.
Hình 2.1: Các nguồn lực cơ bản của doanh nghiệp trong ERP
2.1.1 Khái niệm ERP
ERP là viết tắt của từ Enterpire Resource Plainning, trong đó:
E - Enterprise (Doanh nghiệp): Là mục tiêu chính của ERP, nó tích hợp
tất cả chức năng của các phòng ban trong công ty vào chung một hệ thống máy tínhduy nhất, mà nó có thể đáp ứng hoạt động của tất cả các nhu cầu quản lý khác nhaucủa từng phòng ban
Trang 34R - Resource (Tài nguyên): Trong kinh tế, resource là nguồn lực gồm tài
chính, nhân lực, công nghệ, còn trong ERP, resource là tài nguyên (TN) Trong côngnghệ thông tin, TN là bất kỳ phần mềm, phần cứng hay dữ liệu thuộc hệ thống mà
có thể truy cập và sử dụng được Ứng dụng ERP vào quản trị doanh nghiêp (DN) đòihỏi DN phải biến nguồn lực (NL) thành tài nguyên như việc: Phải làm cho mọi bộphận của đơn vị đều có khả năng khai thác NL phục vụ cho DN Phải hoạch định vàxây dựng lịch trình khai thác NL của các bộ phận có sự phối hợp nhịp nhàng, đạthiệu quả cao nhất Phải luôn cập nhật thông tin tình trạng NL DN một cách chínhxác, kịp thời
P - Planning (Hoạch định): Là khái niệm quen thuộc trong quản trị kinh
doanh, nó thực hiện hỗ trợ lên DN lên kế hoạch cho toàn bộ hoạt động của tổ chức
Như vậy, ERP là hệ thống tổng thể hoạch định tài nguyên doanh nghiệp,cho phép tự kiểm soát được nguồn lực của doanh nghiệp Thông qua việc thực hiệnkết hợp toàn bộ các hệ thống riêng lẻ vào một chương trình phần mềm tích hợp, sửdụng chung một cơ sở dữ liệu để các bộ phận có thể dễ dàng chia sẻ thông tin vàtương tác với nhau, từ đó, nhà quản trị có thể lên kế hoạch khai thác các nguồn tàinguyên này hợp lý nhờ vào các quy trình nghiệp vụ thiết lập trong hệ thống
Ngoài ra ERP còn cung cấp cho các doanh nghiệp một hệ thống quản lýđiều hành doanh nghiệp cho lãnh đạo cũng như tác nghiệp của các nhân viên với quytrình hiện đại theo tiêu chuẩn quốc tế
Trang 352.1.2 Lịch sử ERP
ERP xuất hiện lần đầu tiên vào năm 1990 khi tập đoàn Gartner dùng nó để
mở rộng cho MRP (Manufacturing Resources Planning), cũng là một phần mềmquản lý nhưng tập trung cho việc sản xuất hàng hóa, đến khoảng giữa những năm
1990, ERP đã được áp dụng cho hầu hết các mảng của một doanh nghiệp
Các cơ quan chính phủ và tổ chức phi chính phủ cũng bắt đầu ứng dụngERP cho hoạt động của mình Tới khoảng năm 2000, thuật ngữ “ERP II” xuất hiện
và được dùng để chỉ những phần mềm ERP có khả năng dùng giao diện web để truycập và sử dụng ERP II cho phép quản lý nội bộ và hỗ trợ việc hợp tác giữa các công
ty nhằm nâng cao vai trò của thống trong toàn bộ hoạt động của doanh nghiệp
Trang 362.1.3 Mô hình triển khai ERP tổng thể
Hình 2.2: Mô hình tổng thể triển khai hệ thống ERP trong doanh nghiệp
Hình trên là mô hình triển khai tổng thể cho một hệ thống ERP, với các đặcđiểm là ứng dụng dạng Thin Client, Online và tập trung (Centralized) thì căn bản hệthống phải bao gồm các thành phần sau: Trung tâm dữ liệu, các máy chủ ứng dụng
và CSDL được đặt tại đây và là nơi lưu trữ và xử lý các giao dịch của hệ thống ERP;
Hệ thống mạng trung tâm, cho phép người dùng của khu văn phòng trung tâm truycập vào hệ thống ERP thông qua trình ứng dụng ERP Client; Hệ thống mạng WAN,kết nối với các văn phòng ở xa; Hệ thống dự phòng, làm nhiệm vụ phòng ngừa thảmhọa khi có các sự cố bất khả kháng xảy ra (có thể có hoặc không), tùy vào tình hình
cụ thể của doanh nghiệp để có những lựa chọn cho phù hợp
Trang 372.1.4 Các yêu cầu chính khi triển khai hệ thống ERP
Với một hệ thống chứa toàn bộ các dữ liệu của công ty và phục vụ một sốlượng lớn người dùng trên nhiều vị trí công tác và mục đích khác nhau, từ việc chophép các nhân viên thực hiện cập nhật các giao dịch đến việc cung cấp các thông tin
hỗ trợ ra quyết định của các cấp lãnh đạo, ngoài ra hệ thống còn phải phục vụ một sốđối tượng bên ngoài như khách hàng và các đối tác, thì khi triển khai hệ thống chohoạt động của doanh nghiệp cần phải thoả mãn những yêu cầu sau:
Hệ thống phải cung cấp một môi trường làm việc liên tục và có tínhsẵn sàng đáp ứng mọi yêu cầu đặt ra
Đảm bảo được tính an toàn của dữ liệu
Xử lý và trả lại kết quả cho người dùng trong một khoảng thời gianchấp nhận được (không gây cản trở đến công việc và lãng phí thời giancủa người sử dụng)
Dễ dàng trong việc vận hành và bảo trì hệ thống
Có khả năng nâng cấp và mở rộng, và khôi phục được khi có các tìnhhuống bất khả kháng xảy ra
2.1.5 Các phân hệ chính trong ERP
ERP kết nối các ứng dụng của doanh nghiệp thành một phần mềm quản trị
và chỉ sử dụng một cơ sở dữ liệu duy nhất để tất cả mọi người, mọi phòng ban đều
có thể truy cập vào và chia sẻ dữ liệu cho nhau Các phân hệ chính trong ERP: