Phát triển công cụ tích hợp giải pháp 1C với gian hàng trực tuyến - Phần 2/3

mamnon76

Thành viên
Tham gia
20/11/2015
Bài viết
12
Xin được tiếp tục câu chuyện về việc tích hợp gian hàng trực tuyến với giải pháp Back-office và phương pháp giải quyết trong dự án tích hợp gian hàng trực tuyến Bitrix với hệ thống "1C:Quản lý thương mại".

Trong bài viết trước, chúng ta đã thảo luận các vấn đề: phân tích nhiệm vụ được đặt ra cho người chủ gian hàng trực tuyến, lựa chọn mô hình trao đổi dữ liệu và xây dựng giao thức trao đổi giữa 1C và gian hàng trực tuyến.

Trong phần tiếp theo, chúng tôi muốn được nói chi tiết hơn về các bước trao đổi và cách tùy chỉnh từ phía 1C cũng như từ phía gian hàng trực tuyến. Ngoài ra, cũng sẽ trình bày về cách giải quyết bài toán tối ưu hóa khi dữ liệu trao đổi lớn.

Xin nhắc lại là về mặt tổng quan, chúng ta đã chọn sơ đồ tích hợp như sau:

1. Website và 1C làm việc độc lập với nhau và trao đổi dữ liệu theo định dạng CommerceML.

2. Website không có truy cập trực tiếp tới 1C

3. Chương trình 1C thường xuyên truy vấn tới Script trên Website để gửi và nhận dữ liệu.

4. Việc khởi xướng trao đổi dữ liệu và kết nối bao giờ cũng xuất phát từ phía 1C.

Chúng ta cùng xem xét cách giải quyết mô hình này bằng thực tế.

Như đã nói ở trên, trong thành phần cấu hình "1C:Quản lý thương mại" đã có sẵn một mô-đun chuyên dụng để trao đổi dữ liệu với Website. Đây là mô-đun đa năng, hoạt động theo giao thức đã mô tả trong bài viết trước và có sử dụng định dạng CommerceML.

Mô-đun có trong bộ đóng gói "1C:Quản lý thương mại", phiên bản 10.3 và 11 (nền tảng 8.2). Ngoài "1C:Quản lý thương mại", cơ chế trao đổi với Website còn có trong các cấu hình khác, bao gồm cả các cấu hình được quốc tế hóa (bản địa hóa) (ND – Các giải pháp 1C được Việt hóa có sẵn mô-đun tích hợp với Bitrix là: 1C:Quản lý thương mại, 1C:BÁN LẺ).

Chúng ta cùng xem tính năng của mô-đun có trong thành phần của "1C:Quản lý thương mại", phiên bản 11.
01_congcutichhop1C_p2.png
Thẻ đầu tiên của giao diện mô-đun có chứa các tùy chỉnh chính để tương tác.

Phần Chế độ trao đổi dữ liệu cho phép chỉ ra chế độ trao đổi mà sẽ được sử dụng trong hồ sơ này. Hoặc nói một cách đơn giản hơn: nhiệm vụ nào sẽ được giải quyết trong phiên trao đổi: kết xuất hàng hóa, trao đổi đơn hàng hay là cả hai.

Trong phần Mục đích cần chỉ ra các tham số của Website mà sẽ tiến hành trao đổi: URL của Script trao đổi, trương mục tài khoản để kết nối trao đổi. Có thể kiểm tra xem kết nối có thực hiện được hay không.

Kiểm soát thay đổi cho phép sử dụng nhật ký nội bộ của 1C mà ghi lại các thay đổi của các đối tượng liên quan việc trao đổi với Website. Cơ chế này chỉ lấy ra các dữ liệu mà đã bị thay đổi trong 1C tính từ thời điểm trao đổi trước đó. Dĩ nhiên, điều này làm giảm bớt dung lượng dữ liệu, giảm bớt mức tải cho cả 1C và cho cả Server của gian hàng trực tuyến.

Trong phần Trao đổi tự động, có thể đặt lịch biểu trao đổi một cách linh động mà theo đó tính năng trao đổi sẽ được khởi động tự động mà không cần có sự can thiệp của người sử dụng.

Chúng ta cùng xem kỹ hơn về nhiệm vụ đầu tiên của tính năng tích hợp – Kết xuất hàng hóa (danh mục mặt hàng) từ 1C lên gian trực tuyến.
Để làm điều này, trong chế độ trao đổi, cần đặt dấu tùy chọn “Kết xuất hàng hóa” và kết quả là sẽ xuất hiện một thẻ cùng tên:
02_congcutichhop1C_p2.png
Chọn hàng hóa để kết xuất và tùy chỉnh kết xuất vào 1C

Một phần rất quan trọng là bảng danh mục, cho phép lập ra những gì sẽ được kết xuất lên Website.

Trong phương án mặc định, sẽ kết xuất toàn bộ danh mục mặt hàng như những gì đã có: tất cả các nhóm (thư mục) và các mặt hàng, không có bất kỳ hạn chế nào cả. Dĩ nhiên, phương án này không phải đều phù hợp cho tất cả mọi người. Chính vì vậy, có một lựa chọn nữa linh hoạt hơn – lọc theo các điều kiện để kết xuất hàng hóa lên Website.
03_congcutichhop1C_p2.png
Ví dụ, có thể chọn nhóm và nhóm con của danh mục, kết xuất hàng hóa mà còn tồn kho, theo dạng giá nhất định (bán lẻ, bán buôn, đại lý), từ kho bãi nhất định...

Tiếp theo, theo mặc định, tất cả hàng hóa sẽ kết xuất ra tệp XML vào một danh mục chung (thẻ <Catalog>). Trong mỗi một danh mục đều có bảng mã hiệu riêng của mình, bao gồm cấu trúc nhóm và nhóm con dành cho hàng hóa, và còn có các thuộc tính dành cho tất cả các mặt hàng thuộc danh mục này.

Nếu như kết xuất các kiểu hàng hóa khác nhau lên Website mà có cấu trúc nhóm riêng (dưới dạng cây phân nhánh) và có bộ thuộc tính riêng (đặc tính), thì nên sử dụng riêng từng kiểu để kết xuất vào danh mục riêng. Như vậy, trong hệ thống Bitrix sẽ tạo riêng các InformationBlock riêng mà trong mỗi khối thông tin này đều có rieng các nhóm, thuộc tính, quyền, tùy chỉnh... Kết quả là trên gian hàng trực tuyến có thể tạo ra nhiều cách trình bày cho nhiều kiểu hàng hóa khác nhau: phân nhánh, lọc theo thuộc tính, so sánh các mặt hàng...

Việc tùy chỉnh danh mục trong trường hợp này sẽ như sau:
04_congcutichhop1C_p2.png
Còn có một khả năng nữa để tạo cấu trúc danh mục mà được kết xuất lên Website – sử dụng dạng mặt hàng. Dạng mặt hàng – về bản chất, đây là một chuyên mục khác để trình bày kiểu hàng hóa. Nếu như cấu trúc nhóm danh mục mặt hàng mà không phù hợp để tùy chỉnh kết xuất lên Website thì có thể tạo ra các nhóm mặt hàng và gắn kết các hàng hóa với các dạng mặt hàng đó, và kết xuất lên Website theo chuyên mục mới.

Việc đặt dấu hộp kiểm 'Kết xuất tệp hình ảnh" và "Kết xuất các tệp khác" chỉ có ý nghĩa, nếu như trong 1C đã có những mô tả chi tiết về hàng hóa, hình vẽ và các tệp liên quan (hướng dẫn sử dụng…). Rất nhiều người chủ gian hàng trực tuyến không lưu các bản mô tả chi tiết hàng hóa, thuộc tính và hình ảnh tại 1C. Bởi vì trong 1C thì những thông tin này là không cần thiết, còn ở trên Website thì thông thường đã có trình soạn HTML để mô tả và rất nhiều công cụ khác nhau để xử lý hình ảnh… Hơn nữa, việc tổ chức công việc từ xa của trình soạn nội dung Web thường thuận tiện khi làm việc với Website hơn là khi chạy bên trong 1C. Nhưng tuy nhiên, vẫn có những người ưa thích lưu toàn bộ các mô tả sản phẩm tại một nơi, đó là tại 1C, còn Website chỉ là công cụ để trực quan hóa sản phẩm. Còn có một nhiệm vụ khác, đó là khi một mặt hàng cần được kết xuất đồng thời lên nhiều Website. Lúc này, phương pháp tốt nhất là tạo ra bản mô tả sản phẩm trong 1C, còn sau đó hệ thống sẽ tự động kết xuất lên nhiều sàn giao dịch trực tuyến.

Việc lựa chọn mô hình quản lý danh mục nào là do chính những người dùng cuối quyết định. Quan trọng là tính năng tích hợp cho phép thực hiện những việc này.

Quá trình kết xuất

Nếu như bây giờ mà khởi động việc kết xuất (bấm vào nút "Thực hiện trao đổi dữ liệu") thì 1C sẽ bắt đầu chuẩn bị các dữ liệu cần kết xuất.

Hệ thống sẽ khởi tạo ra 2 tệp: import.xml và offers.xml (dành cho từng danh mục hàng hóa). Tệp đầu tiên có chứa thông tin về danh mục hàng hóa (cấu trúc, hàng hóa, thuộc tính), còn trong tệp thứ hai là đề xuất thương mại (bảng giá) theo mặt hàng này Nếu nhưu một mặt hàng mà có nhiều phương án mà phụ thuộc vào đặc tính (màu sắc, kích cỡ…) thì tất cả đề xuất được ghi trong tệp offers. Chi tiết hơn có thể xem trong chuẩn CommerceML.

Nếu như hàng hóa có gắn với nhiều hình ảnh hay tệp thì các tệp này sẽ được lưu vào thư mục con import_files, và các tham chiếu đến các tệp này sẽ được ghi trong XML.

Dưới đây là ví dụ về việc kết xuất 2 thư mục hàng hóa từ 1C:
05_congcutichhop1C_p2.png
Bây giờ, cần chuyển các tệp này lên Server. Để làm việc này, trong chuẩn trao đổi đã có sẵn chế độ:
12313877_475417755977931_7142270378143695510_n.jpg

Nếu như dung lượng trao đổi dữ liệu lớn (do kết xuất danh mục hàng hóa ban đầu lớn) thì tất nhiên cần phải tối ưu việc chuyển tệp.

Thứ nhất là sử dụng tệp nén ZIP. Như chúng ta đã biết, trước khi chuyển tệp, 1C sẽ hỏi Website về tham số trao đổi, trong đó bao gồm cả dấu hiệu nén ZIP. Tất cả các tệp được đóng gói trong một tệp nén ZIP và sau đó được gửi đến Website. Nếu như không hỗ trợ việc nén thì các tệp trong thư mục (bao gồm cả hình vẽ) sẽ được chuyển đi lần lượt.

Thứ hai, rất nhiều nhà cung cấp Hosting đều có hạn chế dung lượng chuyển theo truy vấn POST. Và ngay cả tệp ZIP cũng có thể khó chuyển qua, nếu như dung lượng tệp lớn trên vài chục Megabytes. Trong trường hợp này, 1C có thể cắt nhỏ tệp kết xuất ra thành nhiều phần, nếu như kích cỡ của tệp lớn hơn giá trị được phép. Trên phía Website sẽ tiến hành tiếp nhận các phần có đánh số và sau đó hợp lại thành một tệp duy nhất. Chương trình 1C có thể nhận được giá trị kích cỡ lớn nhất của từng phần dữ liệu từ Webstie ở chế độ khởi xướng trao đổi.

Bây giờ, các tệp vừa nhận cần được xử lý ở phía Website và kết nhập vào cơ sở dữ liệu của Website.

Ở đây cũng có một yếu tố hạn chế của Hosting. Việc xử lý (phân tích XML và kết nhập vào cơ sở dữ liệu) được thực hiện bởi Script của PHP mà thời gian làm việc thường bị hạn chế. Tất nhiên, ở phần đầu Script có hàm set_time_limit(0), nhưng không phải lúc nào cũng đều có hiệu lực. Bởi vậy, trong Bitrix có thể chỉ ra thời gian tối đa mà Script có thể xử lý – theo mặc định là 30 giây. Khi đạt đến ngưỡng giá trị này, Script sẽ được khởi động lại và tiếp tục kết nhập từ vị trí trước đó của tệp.

Ngoài ra, Script kết nhập có thể so sánh giá trị kiểm soát của bản XML-description hàng hóa trong tệp cần xử lý với giá trị kiểm soát của hàng hóa này trong cơ sở dữ liệu từ thời điểm kết nhập lần trước. Nếu như giá trị kiểm soát trùng nhau thì hàng hóa sẽ được bỏ qua và sẽ không cập nhật. Điều này cần cho các trường hợp, khi mà danh mục đã được kết xuất lên Website, còn từ 1C thì vẫn thực hiện kết xuất toàn phần. Khi đó, việc kết nhập dữ liệu sẽ được thực hiện nhanh hơn nhiều.

Tất nhiên, chúng tôi luôn khuyến cáo tùy chỉnh trong 1C để kết xuất chỉ những mặt hàng đã thay đổi, trong khi đó, việc kết xuất toàn phần sẽ chỉ thực hiện 1 lần, còn sau đó thì sẽ thực hiện theo từng phần dữ liệu mà sẽ kết nhập vào Website một cách nhanh chóng.

Tùy chỉnh kết nhập dữ liệu từ phía Website

Các tham số kết nhập danh mục từ 1C được tùy chỉnh trong Bitrix ở phần quản trị hệ thống và trong một trang chuyên dụng "Tích hợp với 1C:DOANH NGHIỆP".
06_congcutichhop1C_p2.png
Tạm thời chúng ta không đi sâu vào chi tiết của phần tùy chỉnh kết nhập mà trong đó có rất nhiều thứ: xử lý hình ảnh, xử lý dữ liệu mà không có trong tệp kết nhập, nhưng lại có trên Website và nhiều thứ khác. Nói chung, danh mục từ 1C được phản ánh toàn phần nhất vào các danh mục trên Website.

Các dữ liệu được kết xuất bao gồm:
  • Cấu trúc nhóm danh mục;
  • Danh sách hàng hóa trong nhóm;
  • Thuộc tính hàng hóa (số, xâu ký tự, kiểu “danh sách”, ngày giờ, Boolean);
  • Mô tả hàng hóa (bao gồm cả mô tả theo HTML);
  • Các hình ảnh và tệp liên quan;
  • Bảng giá (bán buôn, bán lẻ, đại lý...);
  • Hàng tồn trong kho;
  • Các đề xuất thương mại theo các hàng hóa mà có khác nhau về đặc tính.
Nhờ có cơ chế tối ưu hóa, hệ thống cho phép giải quyết được vấn đề kết xuất dữ liệu ban đầu và xử lý khối lượng dữ liệu lớn. Ở chế độ kết xuất chỉ theo các dữ liệu đã thay đổi trong 1C, chương trình cho phép chúng ta không cần bận tâm về các lần trao đổi tiếp theo.

Ngoài ra, trong 1C có thể có nhiều hồ sơ tùy chỉnh về việc kết xuất hàng hóa lên Website. Các hồ sơ trao đổi này được xây dựng trên khái niệm được gọi là "Nút trao đổi":
07_congcutichhop1C_p2.png
Điều này cho phép đạt được mức độ linh động cao, bởi vì, ví dụ, có thể nhiều loại hàng hóa được cập nhật vào nhiều lúc khác nhau, việc kết xuất hàng hóa được tiến hành cho nhiều Website và vào nhiều hệ thống CMS… ngoài ra, vào nhiều lúc khác nhau mà không liên quan đến việc kết xuất hàng hóa, có thể tiến hành trao đổi các đơn hàng: ví dụ, tiếp nhận đơn hàng từ Website sau mỗi 5 phút.

Nhưng chúng ta sẽ đề cập tới vấn đề trao đổi đơn hàng trong phần thứ ba, phần cuối cùng của chuỗi bài viết này.
 
×
Quay lại
Top