Mua hàng:0983715689 Diễn đàn   Đặt câu hỏi
Hỗ trợ sử dụng Tư vấn mua hàng
Call 04.5148550
Call 04.5148550
Call 04.5148550
Call 04.5148550
Call 04.5148550
Phản hồi, ý kiến góp ý của bạn với 1VS Phản hồi - góp ý
Hotline:(0988-721-127)
(04) 3514-85-50
(04) 3514-85-51
(04) 3514-84-30
Ý kiến nhận xét

Chị Trần Thị Lâm - Kế toán - Công ty cổ phần Tập đoàn Thái An

"...Lúc bắt đầu sử dụng, bên mình cũng gặp nhiều khó khăn vì chưa quen với phần mềm mới. Tuy nhiên khi đã hiểu các nguyên tắc làm việc của 1C thì mình nhận thấy đây là công cụ đắc lực cho người sử dụng trong việc việc kiểm tra, kiểm soát và đưa ra báo cáo giúp đơn giản hóa công việc của mình...".

Anh Trần Quang Thiện - Chủ Nhà sách cô Hường

"... Mình đặc biệt ưa dùng tính năng tổ chức danh mục phân cấp không giới hạn của phần mềm: hàng hóa và khách hàng được ghi nhận theo từng nhóm nhỏ. Điều này không chỉ hỗ đắc lực cho thu ngân bán hàng chính xác và nhanh chóng mà còn rất tiện dụng khi thiết lập và quản lý các chương trình khuyến mại, chiết khấu cho từng nhóm khách hàng theo một hoặc nhiều nhóm sản phẩm...".

1C:Quản lý tổng thể (ARM)


Đăng ký nhận bài viết

  1. Bạn đang dùng giải pháp 1C nào?
    1. 1C:KẾ TOÁN 8
      1181 (98.83%)
    2. 1C:Bán lẻ 8
      305 (25.52%)
    3. 1C:Quản lý thương mại
      140 (11.72%)
    4. 1C:Quản lý tổng thể (ARM)
      93 (7.78%)
    5. 1C:Quản lý văn bản (ECM)
      72 (6.03%)
    6. 1C:Hóa đơn
      67 (5.61%)
    7. 1C:Hiệu thuốc
      54 (4.52%)
    8. 1C:Cửa hàng điện máy
      52 (4.35%)
    9. 1C:Nhà hàng
      47 (3.93%)

Thông tin công nghệ, giải pháp

Nền tảng "1C:DOANH NGHIỆP" – Bên trong cỗ máy?
17/11/2015 - Số lần đọc: 2139

Trong bài viết này, chúng tôi xin nói về kiến trúc bên trong nền tảng "1C:DOANH NGHIỆP 8" và những công nghệ được dùng khi phát triển.


Đâu là lý do mà chúng tôi cho rằng, đây là vấn đề khá hấp dẫn? Thứ nhất, bởi vì "1C:DOANH NGHIỆP 8" là nền tảng ứng dụng rất lớn (hơn 10 triệu dòng mã nguồn) bằng C ++ (Client, Server…), JavaScript (Web-client) và gần đây có thêm Java. Các dự án lớn luôn hấp dẫn ít ra là do tính quy mô, bởi vì, có nhiều câu hỏi không được đặt nặng trong các dự án nhỏ, nhưng trong các dự án lớn như vậy sẽ được “mổ xẻ rất kỹ. Thứ hai, "1C:DOANH NGHIỆP 8" là sản phẩm dạng "đóng gói" và liên tục được được cập nhật các phiên bản mới, do vậy, có rất ít những bài viết cho giới công nghệ về việc phát triển nền tảng này trên các trang tin. Ngoài ra, có lẽ cũng là điều thú vị, nếu như có thêm những mảng thông tin mới về một nền tảng công nghệ danh tiếng của Nga.  

Nào cùng bắt đầu. Trong bài viết này, chúng tôi đưa ra tổng quan về một số công nghệ được áp dụng bên trong nền tảng, phác họa bối cảnh lớn mà không đi sâu vào việc thực thi cụ thể. Bởi vì đối với nhiều cơ chế làm việc của hệ thống có thể kéo dài thành một bài viết riêng biệt, còn đối với một số cơ chế khác thì có thể kéo dài thành cả một cuốn sách! 

Để bắt đầu, cần xác định một số điều cơ bản nhất: xem nền tảng "1C:DOANH NGHIỆP" là gì và được cấu tạo từ thành phần nào. Trả lời câu hỏi này không hề đơn giản, bởi vì thuật ngữ "Nền tảng" (tiếng Anh là Platform hoặc Frame-work) được hiểu là công cụ tạo dựng giải pháp ứng dụng, đồng thời vừa là môi trường thực hiện và cũng là công cụ lập trình. Về mặt quy ước, có thể xem xét các thành phần sau:

  • liên cung Server; 
  • Client mỏng có thể kết nối đến Server theo HTTP và giao thức nhị phân riêng biệt; 
  • Client để làm việc trong kiến trúc 2 lớp với cơ sở thông tin mà được sắp xếp trên đĩa cứng hoặc thư mục mạng; 
  • Web-client; 
  • công cụ quản trị Server ứng dụng; 
  • môi trường tạo dựng (Bộ thiết kế); 
  • môi trường thực hiện đối với iOS, Android và Windows Phone (nền tảng di động 1C).

Tất cả các phần trên, ngoại trừ Web-client đều được viết trên C++. Ngoài ra, cách đây không lâu hãng 1C có công bố “Bộ thiết kế thế hệ mới” viết trên Java.

Ứng dụng nguyên thủy  

Để tạo dựng ứng dụng nguyên thủy, chúng tôi sử dụng C++03. Trình biên dịch trong Windows được sử dụng là Microsoft Visual C++ 12 (tương thích với Windows XP), đối với Linux và Android sử dụng gcc 4.8, còn đối với iOS sử dụng CLang 5.0. Khi xây dựng nền tảng, chúng tôi sử dụng thư viện chuẩn chung dành cho tất cả hệ điều hành và trình biên dịch đó là STLPort. Giải pháp này cho phép làm giảm khả năng sai sót, đặc biệt là cho việc thực thi STL. Hiện nay, chúng tôi đang có kế hoạch chuyển sang thực thi STL được cung cấp từ CLang, bởi vì STLPort ngừng phát triển và không tương thích với C++11 trong gcc.  

Mã nguồn của Server trong trường hợp này có sử dụng chung khoảng 99%, còn mã nguồn của Client là gần 95%. Hơn nữa, ngay cả nền tảng di động cũng sử dụng mã C++ và cũng rất nhiều, mặc dù tỷ lệ mã riêng có thấp hơn một chút.  

Cũng như phần lớn những người sử dụng C++, chúng tôi không kỳ vọng sử dụng 100% khả năng của ngôn ngữ và các thư viện có sẵn. Chúng tôi hầu như không sử dụng Boost, và trong các khả năng của ngôn ngữ, không sử dụng việc chuyển đổi động các kiểu dữ liệu. Nhưng ngược lại chúng tôi tích cực áp dụng:  

  • STL (string, container và thuật toán); 
  • đa kế thừa (Multiple inheritance), cụ thể là kế thừa việc thực thi; 
  • template; 
  • exclusion; 
  • con trỏ thông minh (sáng chế riêng của 1C). 

Do sử dụng khả năng đa kế thừa của giao diện (hoàn toàn là các lớp trừu tượng – Abract class) nên có thể sử dụng mô hình cấu phần (Component Model) mà sẽ được nói sau đây.

Các cấu phần

Để đảm bảo cho tính toàn vẹn các mô-đun, toàn bộ tính năng được chia thành các cấu phần dưới dạng các thư viện động (*.dll cho Windows, *.so — cho Linux). Tổng số có khoảng 150 cấu phần, dưới đây chúng tôi sẽ mô tả một số cấu phần trong đó:

Backend  Chứa “Nhân siêu dữ liệu” (Metadata driven) của nền tảng
Accnt Các đối tượng được sử dụng để phát triển các giải pháp kế toán doanh nghiệp (hệ thống tài khoản và biểu ghi kế toán)
Bsl Nhân thực hiện ngôn ngữ hệ thống
Nuke Bộ cấp phát bộ nhớ (sáng chế riêng của 1C)
Dbeng8 Nhân cơ sở dữ liệu dạng File-server. Đây là tệp cơ sở dữ liệu đơn giản dựa trên ISAM, bao gồm bộ xử lý SQL đơn giản
Wbase Có các lớp (class) căn bản và các chức năng để mô tả giao diện người sử dụng Windows – các lớp cửa sổ (Windows classes), truy cập GDI…

Việc phân chia thành nhiều cấu phần như vậy có lợi theo một số khía cạnh:  

  • tạo điều kiện thiết kế tốt hơn, cụ thể tách biệt mã nguồn; 
  • từ một bộ gồm nhiều cấu phần có thể đóng gói linh hoạt để tạo thành nhiều gói sản phẩm khác nhau: 
    • ví dụ, cài đặt Client mỏng sẽ có wbase, nhưng không có backend; 
    • còn trên Server có wbase, ngược lại thì không có; 
    • tất nhiên, trong cả hai phương án đều có nuke và bsl. 

Tất cả các cấu phần cần thiết để khởi động theo các phương án làm việc khác nhau đều được kết nhập khi bắt đầu chạy chương trình. Điều này cần thiết khi đăng ký các SCOM-class mà chúng tôi sẽ nói tới dưới đây.

SCOM  

Ở mức độ phân tách thấp hơn, có sử dụng hệ thống SCOM, có thể nói là giống với hệ tư tưởng của thư viện ATL. Đối với những ai chưa từng làm việc với ATL, chúng tôi liệt kê ngắn gọn các tính năng và đặc điểm của hệ thống này.  

Đối với SCOM-class:  

  • cung cấp phương thức mẫu, cho phép tạo ra các class từ cấu phần khác, cho dù chỉ biết tên gọi; 
  • cung cấp cơ sở hạ tầng cho các con trỏ thông minh với bộ đếm tham chiếu. Trong vòng đời của SCOM-class, không cần phải theo dõi thủ công; 
  • cho phép biết xem đối tượng đã thực hiện hoặc chưa thực hiện giao diện cụ thể và tự động chuyển đổi con trỏ của đối tượng thành con trỏ của giao diện; 
  • tạo đối tượng dịch vụ (service-object) mà luôn khả dụng thông qua phương thức get_service…. 
Ví dụ, có thể mô tả class như vậy để đọc JSON trong cấu phần json.dll:


Các class mà có các phiên bản được tạo ra từ các cấu phần khác, cần được đăng ký trong SCOM-machine:


Sau đó, có thể tạo mẫu marco trong cấu phần khác:


Dựa trên Componet Model của SCOM, đã triển khai các lô-gic nghiệp vụ và phần giao diện của "1C:DOANH NGHIỆP".

Giao diện người sử dụng  

Nhân tiện nói về giao diện. Chúng tôi không sử dụng các điều khiển chuẩn (control) của Windows. Các phần tử điều khiển của chúng tôi được thực thi trực tiếp bằng Windows API. Đối với phiên bản Linux có lớp trung gian làm việc thông qua thư viện wxWidgets.  

Thư viện các phần tử điều khiển không phụ thuộc vào các phần khác của "1C:DOANH NGHIỆP" và chúng tôi còn sử dụng thư viện này trong một số tiện ích nhỏ bên trong.  

Trong những năm phát triển 1C:DOANH NGHIỆP, hình dạng bên ngoài của các điều khiển có thay đổi, nhưng thay đổi mang tính nguyên tắc chỉ xảy ra một lần vào năm 2009 cùng với việc phát hành phiên bản 8.2 và sự ra đời của "biểu mẫu được điều khiển". Ngoài những thay đổi của hình dạng bên ngoài, có sự thay đổi lớn nguyên tắc dàn dựng biểu mẫu và bỏ đi cách định vị các phần tử điều khiển theo hướng có lợi khi dàn dựng các phần tử theo cách flow-composition. Hơn nữa, trong mô hình mới, các phần tử điều khiển không làm việc trực tiếp với đối tượng trong mã nguồn và DTO (Data Transfer Objects) chuyên dụng.  

Những thay đổi này đã cho phép tạo ra Web-client trên "1C:DOANH NGHIỆP" mà giống như các lô-gic C++ của phần tử điều khiển trên JavaScript. Chúng tôi cố gắng duy trì sự tương đương các chức năng giữa Client mỏng và Web-client. Trong các trường hợp khi mà điều đó là không thể, ví dụ do hạn chế truy cập từ JavaScript API (khả năng làm việc với tệp rất hạn chế), chúng tôi thường xuyên thực hiện chức năng cần thiết bằng việc mở rộng trình duyệt đã viết trên C++. Vào thời điểm này, chúng tôi duy trì hỗ trợ trên các trình duyệt Internet Explorer và Microsoft Edge (Windows), Google Chrome(Windows), Firefox (Windows và Linux) và Safari (MacOS).  

Ngoài ra, chúng tôi sử dụng công nghệ của các biểu mẫu được điều khiển để tạo mới giao diện các ứng dụng di động trên nền tảng 1C. Trên các thiết bị di động, việc vẽ các điều khiển được thực hiện bằng cách sử dụng các công nghệ "ruột" của hệ điều hành, nhưng đối với lô-gic dàn dựng biểu mẫu và hành vi của giao diện thì cũng sử dụng chính mã nguồn như trong nền tảng "lớn" của 1C:DOANH NGHIỆP.


Giao diện 1C trên hệ điều hành Linux

Giao diện 1C trên thiết bị di động

Mã nguồn mở

Mặc dù chúng tôi không sử dụng thư viện chuẩn dành cho lập trình viên C++ dưới Windows (MFC, điều khiển từ WinAPI) nhưng không có nghĩa là chúng tôi viết tất cả các cấu phần. Ngoài thư viện wxWidgets đã đề cập ở trên, chúng tôi còn sử dụng thêm: 

  • cURL để làm việc với  HTTP và FTP; 
  • OpenSSL để làm việc với mã hóa và cài đặt kết nối TLS; 
  • libxml2 và libxslt để phân tích XML; 
  • libetpan để làm việc với giao thức E-mail (POP3, SMTP, IMAP); 
  • mimetic để phân tích thông điệp E-mail; 
  • sqllite để lưu nhật ký làm việc của người sử dụng; 
  • ICU để quốc tế hóa. 

Danh sách vẫn còn có thể tiếp tục.  

Ngoài ra, chúng tôi sử dụng phiên bản chỉnh sửa lớn Google Test và Google Mock khi tạo dựng các bản thử nghiệm.  

Các thư viện cần thích ứng cho phù hợp với việc tổ chức các cấu phần trong mô hình SCOM. 

Tính phổ dụng của 1C đã làm cho nền tảng trở thành một thử nghiệm tuyệt vời về công năng và độ linh hoạt của các thư viện sử dụng trong đó.  

Tính đa dạng của người dùng cũng như các kịch bản sử dụng cho phép nhanh chóng phát hiện các lỗi ngay cả trong các đoạn mã nguồn ít được sử dụng nhất. Chúng tôi sửa ngay chúng và ngay lập tức cố gắng phản hồi cho tác giả, và quả thực kinh nghiệm tương tác phối hợp với các nhà phát triển trong các trường hợp cũng rất khác nhau.  

Chẳng hạn những người phát triển cURL và Libetpan nhanh chóng hồi đáp cho pull-request, nhưng các bản vá, ví dụ trong OpenSSL, chúng tôi đã không thành công khi gửi phản hồi cho tác giả.  

Lời kết  

Trong bài viết này, chúng tôi đã trình bày một số khía cạnh chính khi phát triển nền tảng "1C:DOANH NGHIỆP". Vì giới hạn bài viết nên chúng tôi chỉ đề cập đến một số khía cạnh mà theo chúng tôi là đáng quan tâm. Ngoài ra, có thể xem mô tả chung về các cơ chế khác nhau của nền tảng tại đây.

Nguyên bản tiếng Nga: http://habrahabr.ru/company/1c/blog/269611/

Xem thêm

Nguyên tắc lập trình phần mềm trên nền tảng "1C:DOANH NGHIỆP" >>>

Kiến trúc 1C:DOANH NGHIỆP như là một sản phẩm của tư duy công nghệ >>>




Tin tức khác


Báo chí viết về 1VS
25/12/2015
Giải đáp vướng mắc trong lập Báo cáo tài chính năm 2015:

"Nội dung chính của sự kiện là tập trung hướng dẫn rà soát từng tài khoản trước khi lập báo cáo tài chính, chỉ ra những điểm cần lưu ý, hay sai sót, và những rủi ro về thuế khi lập báo cáo tài chính năm 2015. Trong đó, có nêu rõ những khác biệt giữa các đơn vị thực hiện theo quyết định 48 và thông tư 200".

10/08/2015
Ứng dụng dịch vụ đám mây cho các giải pháp kế toán và quản lý 1C - Đài Truyền hình Kỹ thuật số VTC (VTC1):
Điện toán đám mây là xu thế tất yếu của nền công nghệ hiện đại. Với việc đưa lên mây nhiều giải pháp như kế toán, bán hàng, quản lý tổng thể doanh nghiệp... dịch vụ đám mây của 1C được nhiều doanh nghiệp ứng dụng để tự động hóa công tác quản lý trong nhiều lĩnh vực. 
01/06/2015
Phần mềm kế toán 1C: Một dữ liệu cho hàng trăm khách hàng - Báo Tài chính điện tử:
"... Thứ nhất, đám mây 1C của chúng tôi sử dụng cơ chế chia tách dữ liệu Multitenancy. Với cơ chế này, 1VS chỉ cần quản lý 1 dữ liệu phần mềm duy nhất dùng chung cho hàng trăm, hàng nghìn khách hàng của mình. Trong đó, có chia tách thành các vùng dữ liệu riêng của mỗi khách hàng, đảm bảo tính riêng tư của từng vùng dữ liệu. Nhờ công nghệ này, chúng tôi giảm được tới mức tối thiểu về thời gian, công sức và chi phí cho việc bảo trì sản phẩm trong đám mây.".