Điều kiện trong bảng ảo 1c. Thông số tiêu chuẩn & Thời gian và các vấn đề khi sử dụng. Nút “Truy vấn” trong trình thiết kế truy vấn

Khi tổ chức mẫu trong các bài toán thực tế, trong phần lớn các trường hợp, việc lựa chọn dữ liệu được tổ chức theo những tiêu chí nhất định.

Trong trường hợp việc lựa chọn được thực hiện từ một bảng thực, không có khó khăn gì phát sinh. Dữ liệu được xử lý hoàn toàn tầm thường:

Trong trường hợp nguồn trong truy vấn là một bảng ảo, tình huống sẽ trở nên phức tạp hơn một chút.


Ngôn ngữ truy vấn cho phép bạn áp đặt một điều kiện cho một lựa chọn từ các bảng ảo theo hai cách: trong mệnh đề WHERE và sử dụng các tham số bảng ảo. Cả hai phương pháp sẽ dẫn đến cùng một kết quả (ngoại trừ một số trường hợp cụ thể), tuy nhiên, chúng không hề tương đương nhau.

Chúng ta đã biết rằng các bảng ảo được gọi là ảo vì chúng không thực sự có trong cơ sở dữ liệu. Chúng chỉ được hình thành vào thời điểm có yêu cầu đối với chúng. Mặc dù vậy, sẽ thuận tiện cho chúng tôi (tức là những người viết truy vấn) coi các bảng ảo như bảng thực. Điều gì sẽ xảy ra trong hệ thống 1C Enterprise 8 khi truy vấn chúng tôi biên soạn vẫn truy cập vào bảng ảo?

Bước đầu tiên, hệ thống sẽ xây dựng một bảng ảo. Ở bước thứ hai, các bản ghi sẽ được chọn từ bảng kết quả thỏa mãn điều kiện được chỉ định trong mệnh đề WHERE:
Có thể thấy rõ rằng mẫu cuối cùng sẽ không bao gồm tất cả các bản ghi từ bảng ảo (và do đó, từ cơ sở dữ liệu), mà chỉ những bản ghi thỏa mãn điều kiện nhất định. Và các bản ghi còn lại sẽ bị loại khỏi kết quả.

Như vậy, hệ thống sẽ không chỉ làm những công việc vô ích mà còn nhân đôi những công việc vô ích! Đầu tiên, tài nguyên sẽ được dành để xây dựng một bảng ảo dựa trên dữ liệu không cần thiết (trong hình chúng được đánh dấu là “vùng dữ liệu A và B”), sau đó công việc sẽ được thực hiện để lọc dữ liệu này khỏi kết quả cuối cùng.

Có thể ngay lập tức ngừng sử dụng dữ liệu không cần thiết ở giai đoạn xây dựng bảng ảo không? Hóa ra là có thể. Đây chính xác là mục đích mà các tham số bảng ảo được thiết kế cho:

Bằng cách tham số hóa bảng ảo, chúng tôi ngay lập tức giới hạn lượng dữ liệu sẽ được truy vấn xử lý.

Sự khác biệt giữa các giá trị của tham số bảng ảo "Phương thức bổ sung" là gì?
Khi Phương thức cộng được đặt thành "chuyển động", thì chỉ những khoảng thời gian có chuyển động mới được trả về. Khi "Các chuyển động và ranh giới thời kỳ" được thiết lập, thì 2 bản ghi sẽ được thêm vào các chuyển động trên: các chuyển động ở đầu và cuối khoảng thời gian được chỉ định trong các tham số VT. Trường “Nhà đăng ký” sẽ trống cho 2 bản ghi này.

Thông tin được lấy từ trang web

Nền tảng này tạo các bảng ảo Số dư, Doanh thu, Số dư và Doanh thu; chỉ dành cho doanh thu hiện tại:
Các bảng ảo không tồn tại về mặt vật lý trong cơ sở dữ liệu; chúng được tạo ở cấp nền tảng để tăng tốc độ và sự thuận tiện cho việc truy cập dữ liệu của nhà phát triển.

Trước khi xây dựng bảng ảo, dữ liệu có thể được chọn theo tham số. Tập hợp các tham số là khác nhau đối với các bảng khác nhau. Đối với bảng Số dư, đây là khoảng thời gian cân bằng và điều kiện tùy ý:

Đối với bảng Doanh thu, khoảng thời gian được chia thành hai (bắt đầu và kết thúc) và cài đặt Chu kỳ được thêm vào:

Đối với bảng Số dư và doanh thu, cài đặt Phương thức cộng được thêm vào:

Chúng ta hãy xem xét kỹ hơn tất cả các thông số này.

  • Tham số Khoảng thời gian (Bắt đầu kỳ, Kết thúc kỳ) có thể lấy các giá trị kiểu Date:

cũng như các loại Khoảnh khắc trong Thời gian và Ranh giới:

Điều quan trọng là nếu bạn sử dụng loại Ngày hoặc Thời điểm trong Thời gian (kết hợp giữa Ngày và Liên kết), thì lần thứ hai, được chỉ định trong trường lựa chọn, không được tính đến khi chọn dữ liệu! Nó đã “ở bên ngoài” rồi, mẫu được tạo trước/sau một thời điểm nhất định.

Trong trường hợp sử dụng loại Đường viền, sắc thái này có thể tùy chỉnh được, vì bạn có thể chỉ định loại đường viền: hiển thị dữ liệu bao gồm hoặc loại trừ giây được chỉ định:

  • Tần số tham số- cho phép bạn xác định khoảng thời gian mà hồ sơ sẽ được cung cấp. Ví dụ: nếu tần suất là Năm thì tất cả các bản ghi sẽ được hiển thị kể từ ngày 01 tháng 1.

Tùy chọn Tần số tự động đặc biệt thú vị; nó cho phép bạn đưa dữ liệu đến nhiều giai đoạn trong một yêu cầu. Trong trình thiết kế truy vấn, tất cả các tùy chọn dấu chấm đều có sẵn; bạn có thể chọn những tùy chọn bạn cần:

Kết quả:

  • Phương pháp bổ sung tham số- xác định xem chỉ xây dựng truy vấn dựa trên các chuyển động trong kỳ (Tùy chọn chuyển động) hay tính đến số dư ban đầu (Tùy chọn chuyển động và ranh giới kỳ). Kết quả đầu ra rất xuất sắc như sau: ví dụ: nếu theo danh pháp, có số dư lúc đầu, nhưng không có doanh thu trong kỳ, thì trong trường hợp Chuyển động, nó sẽ không được đưa vào mẫu; trong trường hợp ranh giới Chuyển động và thời gian - sẽ giảm với doanh thu bằng 0
  • Điều kiện tham số- cho phép bạn áp đặt một điều kiện tùy ý vào phép đo đăng ký:

Câu 07.46 của kỳ thi 1C: Nền tảng chuyên nghiệp. Khi xác định tùy chọn tần số "Tự động" trong bảng ảo "Số dư và Doanh thu":

  1. hệ thống sẽ tự động chọn tần số nhận vòng quay theo quy luật: sao cho kết quả có ít nhất 3 giá trị chu kỳ nhưng không quá 12
  2. hệ thống sẽ tự động lựa chọn tần suất nhận số vòng quay theo quy luật: sao cho kết quả có ít nhất 5 giá trị chu kỳ nhưng không quá 10
  3. trong các trường chọn truy vấn, nhà phát triển sẽ có thể chọn các trường khoảng thời gian với tần suất khác nhau

Câu trả lời đúng là câu thứ ba, phân tích ở trên.

Bài viết mô tả cách triển khai vật lý của một bảng cân bằng cấu hình ảo hoạt động ở chế độ máy khách-máy chủ bằng cách sử dụng ví dụ về cách sử dụng MS SQL Server DBMS.

Khả năng ứng dụng

Bài viết thảo luận về nền tảng 1C:Enterprise phiên bản 8.3.5.1383. Trong phiên bản hiện tại của nền tảng, một số thay đổi có thể xảy ra trong văn bản được mô tả trong tài liệu, truy vấn T-SQL được thực thi trên phía máy chủ DBMS.

Thiết bị của bảng cân đối ảo

Chúng ta hãy xem xét loại truy vấn DBMS nào được chuyển thành truy vấn bằng cách sử dụng bảng số dư thanh ghi tích lũy ảo. Ví dụ: văn bản yêu cầu sau sẽ được xem xét:

CHỌN
Hàng hóaInventoryRemains.Product,
Hàng hóaHàng tồn khoRemains.Warehouse,
Hàng hóaInventoryRemaining.QuantityRemaining
TỪ
Đăng kýAccumulations.Inventories.Remains(&Ngày , Kho = &Kho ) LÀM SAO
Hàng hóaHàng tồn khoCòn lại

Đầu tiên, sử dụng phương pháp bối cảnh toàn cầu GetDatabaseStorageStructure() chúng tôi nhận được một danh sách các bảng cơ sở dữ liệu trong đó dữ liệu của thanh ghi tích lũy “Hàng hóa tồn kho” được lưu trữ:

Thành phần của các trường trong bảng chính của thanh ghi tích lũy và bảng tổng được đưa ra dưới đây:

Việc lưu trữ tổng số cho sổ đăng ký này được định cấu hình ở chế độ “1C:Enterprise 8” như sau:

Hãy điền các tham số trong yêu cầu được đề cập như sau:


Nền tảng chuyển đổi văn bản yêu cầu thành yêu cầu sau, yêu cầu này sẽ được thực thi trên máy chủ DBMS:

LỰA CHỌN
Q_000_T_001.Fld82 ,
Q_000_T_001.Fld83 ,
Q_000_T_001.Fld84Cân bằng
TỪ
(CHỌN Fld82,
Fld83,

TỪ
(CHỌN Fld82,
Fld83,
TỔNG (Fld84 ) NHƯ Fld84Số dư
TỪ AccumRgT85
Giai đoạn WHERE = DATETIME (3999, 11, 1)
VÀ ((Fld83 = ))
VÀ(Fld84<>0 ) VÀ (Fld84<> 0 )
NHÓM THEO Fld82 , Fld83
CÓ Fld84Số dư<> 0
ĐOÀN TẤT CẢ
CHỌN Fld82,
Fld83,
TỔNG (TRƯỜNG HỢP KHI RecordKind = 0 THEN – Fld84 ELSE Fld84 END ) NHƯ Fld84Balance
TỪ AccumRg81
WHERE Khoảng thời gian >= DATETIME (2012, 9, 1)
VÀ Thời gian< DATETIME (3999 , 11 , 1 )
VÀ đang hoạt động
VÀ ((Fld83 = 9:))
NHÓM THEO Fld82 , Fld83
CÓ Fld84Số dư<>0 ) T
NHÓM THEO Fld82 , Fld83
CÓ Fld84Số dư<>0 ) Q_000_T_001

Hãy để chúng tôi kiểm tra yêu cầu nhận được chi tiết hơn.

Đầu tiên, truy vấn đầu tiên trong phép nối sẽ chọn dữ liệu từ bảng AccumRgT85 kết quả. Tổng số được lấy vào ngày lưu trữ của tổng hiện tại (01.11.3999), một điều kiện bổ sung được áp dụng cho trường Kho (vì điều kiện như vậy đã được sử dụng trong các tham số của bảng ảo). Ngoài ra, việc kiểm tra được thực hiện để đảm bảo rằng kết quả không chứa các hàng có số dư bằng 0.

Xin lưu ý rằng việc nhóm được thực hiện theo các thứ nguyên đã chọn trong văn bản yêu cầu. Đó là lý do tại sao không cần thiết phải nhóm thêm các thứ nguyên trong văn bản bằng ngôn ngữ truy vấn 1C:Enterprise.

Truy vấn nối thứ hai sử dụng bảng chuyển động của thanh ghi AccumRg81. Tùy thuộc vào loại chuyển động (nếu RecordKind là 0 thì đó là Thu nhập, nếu không thì là Chi phí), một dấu hiệu sẽ được chèn vào biểu thức. Nền tảng chọn dữ liệu trong khoảng thời gian từ ngày được chỉ định làm tham số của bảng ảo cho đến ngày tổng số hiện tại được lưu trữ (01/11/3999).

Ngoài ra, chỉ các bản ghi hiện hoạt mới được chọn; trường Kho phải bằng giá trị được chỉ định. Giống như truy vấn nối đầu tiên, truy vấn này cũng nhóm theo các thứ nguyên đã chọn và loại bỏ các bản ghi có giá trị tài nguyên bằng 0.

Nếu MS SQL Server DBMS được sử dụng và chênh lệch ngày được đặt thành 2000 cho cơ sở dữ liệu thì tất cả các ngày sẽ được lưu trữ với chênh lệch đã chỉ định, tức là. thay vì 01.11.3999 bạn sẽ thấy 01.11.5999.

Nếu bạn tắt tổng số hiện tại cho sổ đăng ký tích lũy, trước tiên nền tảng sẽ nhận được tổng số mới nhất được tính vào một ngày sớm hơn ngày được chỉ định trong tham số Khoảng thời gian của Bảng ảo.

Sau đó, tương tự, dữ liệu này sẽ được bổ sung từ bảng chuyển động, nhưng chỉ trong khoảng thời gian từ ngày có kết quả cuối cùng đến khoảng thời gian của bảng ảo.

LỰA CHỌN
Q_000_T_001.Fld82 ,
Q_000_T_001.Fld83 ,
Q_000_T_001.Fld84Cân bằng
TỪ
(CHỌN Fld82,
Fld83,
TỔNG (Fld84Balance ) NHƯ Fld84Balance
TỪ
(CHỌN Fld82,
Fld83,
TỔNG (Fld84 ) NHƯ Fld84Số dư
TỪ AccumRgT85
Giai đoạn WHERE = DATETIME (2012, 4, 1)
VÀ ((Fld83 = 9:))
VÀ(Fld84<> 0 )
VÀ(Fld84<> 0 )
NHÓM THEO Fld82 , Fld83
CÓ Fld84Số dư<> 0
ĐOÀN TẤT CẢ
CHỌN Fld82,
Fld83,
SUM (TRƯỜNG HỢP KHI RecordKind = 0 THEN Fld84 ELSE – Fld84 END ) NHƯ Fld84Balance
TỪ AccumRg81
WHERE Khoảng thời gian >= DATETIME (2012, 4, 1)
VÀ Thời gian< DATETIME (2012 , 9 , 1 )
VÀ đang hoạt động
VÀ ((Fld83 = 9:))
NHÓM THEO Fld82 , Fld83
CÓ Fld84Số dư<>0 ) T
NHÓM THEO Fld82 , Fld83
CÓ Fld84Số dư<>0 ) Q_000_T_001

Xin lưu ý điều kiện sau trong nội dung yêu cầu.

Ngôn ngữ truy vấn trong 1C 8 là một ngôn ngữ tương tự được đơn giản hóa của “ngôn ngữ lập trình có cấu trúc” nổi tiếng (vì nó thường được gọi là SQL). Nhưng trong 1C, nó chỉ được sử dụng để đọc dữ liệu; mô hình dữ liệu đối tượng được sử dụng để thay đổi dữ liệu.

Một sự khác biệt thú vị khác là cú pháp tiếng Nga. Mặc dù trên thực tế bạn có thể sử dụng các cấu trúc bằng tiếng Anh.

Yêu cầu ví dụ:

CHỌN
Ngân hàng.Name,
Ngân hàng.CorrAccount
TỪ
Directory.Banks Ngân hàng HOW

Yêu cầu này sẽ cho phép chúng tôi xem thông tin về tên và tài khoản đại lý của tất cả các ngân hàng hiện có trong cơ sở dữ liệu.

Ngôn ngữ truy vấn là cách đơn giản và hiệu quả nhất để có được thông tin. Như có thể thấy từ ví dụ trên, trong ngôn ngữ truy vấn, bạn cần sử dụng tên siêu dữ liệu (đây là danh sách các đối tượng hệ thống tạo nên cấu hình, tức là thư mục, tài liệu, sổ đăng ký, v.v.).

Mô tả cấu trúc ngôn ngữ truy vấn

Cấu trúc truy vấn

Để lấy dữ liệu, chỉ cần sử dụng cấu trúc “SELECT” và “FROM”. Yêu cầu đơn giản nhất trông như thế này:

CHỌN * TỪ Thư mục.Danh pháp

Trong đó “*” có nghĩa là chọn tất cả các trường của bảng và Directory.Nomenclature – tên của bảng trong cơ sở dữ liệu.

Hãy xem một ví dụ phức tạp và tổng quát hơn:

CHỌN
<ИмяПоля1>LÀM SAO<ПредставлениеПоля1>,
Tổng(<ИмяПоля2>) LÀM SAO<ПредставлениеПоля2>
TỪ
<ИмяТаблицы1>LÀM SAO<ПредставлениеТаблицы1>
<ТипСоединения>HỢP CHẤT<ИмяТаблицы2>LÀM SAO<ПредставлениеТаблицы2>
QUA<УсловиеСоединениеТаблиц>

Ở ĐÂU
<УсловиеОтбораДанных>

NHÓM THEO
<ИмяПоля1>

SẮP XẾP THEO
<ИмяПоля1>

KẾT QUẢ
<ИмяПоля2>
QUA
<ИмяПоля1>

Trong truy vấn này, chúng tôi chọn dữ liệu của các trường “FieldName1” và “FieldName1” từ các bảng “TableName1” và “TableName”, gán từ đồng nghĩa cho các trường bằng toán tử “HOW” và kết nối chúng bằng một điều kiện nhất định “TableConnectionCondition ”.

Từ dữ liệu nhận được, chúng tôi chỉ chọn dữ liệu đáp ứng điều kiện từ “WHERE” “Điều kiện lựa chọn dữ liệu”. Tiếp theo, chúng tôi nhóm yêu cầu theo trường “Tên trường 1”, đồng thời tính tổng “Tên trường 2”. Chúng tôi tạo tổng số cho trường “Tên trường 1” và trường cuối cùng “Tên trường 2”.

Bước cuối cùng là sắp xếp yêu cầu bằng cấu trúc ORDER BY.

Thiết kế chung

Hãy xem cấu trúc chung của ngôn ngữ truy vấn 1C 8.2.

ĐẦU TIÊNN

Sử dụng toán tử này, bạn có thể nhận được số lượng bản ghi đầu tiên. Thứ tự của các bản ghi được xác định theo thứ tự trong truy vấn.

CHỌN 100 ĐẦU TIÊN
Ngân hàng.Name,
Ngân hàng Mã AS BIC
TỪ
Directory.Banks Ngân hàng HOW
SẮP XẾP THEO
Ngân hàng.Name

Yêu cầu sẽ nhận được 100 mục đầu tiên của thư mục “Ngân hàng”, được sắp xếp theo thứ tự bảng chữ cái.

CHO PHÉP

Thiết kế này có liên quan để làm việc với cơ chế. Bản chất của cơ chế này là hạn chế việc đọc (và các hành động khác) đối với người dùng đối với các bản ghi cụ thể trong bảng cơ sở dữ liệu chứ không phải toàn bộ bảng.

Nếu người dùng cố gắng sử dụng truy vấn để đọc các bản ghi mà anh ta không thể truy cập được, anh ta sẽ nhận được thông báo lỗi. Để tránh điều này, bạn nên sử dụng cấu trúc “PHÉP”, tức là yêu cầu sẽ chỉ đọc các bản ghi được phép.

CHỌN ĐƯỢC PHÉP
Kho lưu trữ thông tin bổ sung. Liên kết
TỪ
Directory.Repository Thông tin bổ sung

NHIỀU

Việc sử dụng “DIFFERENT” sẽ ngăn các dòng trùng lặp nhập kết quả truy vấn 1C. Sao chép có nghĩa là tất cả các trường yêu cầu đều khớp.

CHỌN 100 ĐẦU TIÊN
Ngân hàng.Name,
Ngân hàng Mã AS BIC
TỪ
Directory.Banks Ngân hàng HOW

Bàn trống

Cấu trúc này rất hiếm khi được sử dụng để kết hợp các truy vấn. Khi tham gia, bạn có thể cần chỉ định một bảng lồng nhau trống trong một trong các bảng. Toán tử “EmptyTable” phù hợp cho việc này.

Ví dụ từ trợ giúp 1C 8:

CHỌN Link.Number, BẢNG TRỐNG.(Số, Mục, Số lượng) NHƯ Thành phần
TỪ Tài liệu. Hóa đơn chi phí
KẾT HỢP MỌI THỨ
CHỌN Liên kết.Số, Nội dung.(Số dòng, Sản phẩm, Số lượng)
TỪ Tài liệu.Invoice Document.Invoice.Composition.*

KHÔNG CÓ

Một tính năng rất hữu ích cho phép bạn tránh được nhiều sai lầm. YesNULL() cho phép bạn thay thế giá trị NULL bằng giá trị mong muốn. Rất thường được sử dụng để kiểm tra sự hiện diện của một giá trị trong các bảng đã nối, ví dụ:

CHỌN
Liên kết tham chiếu danh pháp,
IsNULL(Item Remaining.QuantityRemaining,0) AS Số lượng còn lại
TỪ


Có thể được sử dụng theo những cách khác. Ví dụ: nếu đối với mỗi hàng, không biết giá trị tồn tại trong bảng nào:

ISNULL(Hóa đơn được nhận.Ngày, Hóa đơn được phát hành.Ngày)

HOW là toán tử cho phép chúng ta gán tên (từ đồng nghĩa) cho một bảng hoặc trường. Chúng tôi đã thấy một ví dụ về việc sử dụng ở trên.

Các cấu trúc này rất giống nhau - chúng cho phép bạn có được chuỗi biểu diễn giá trị mong muốn. Điểm khác biệt duy nhất là REPRESENTATION chuyển đổi bất kỳ giá trị nào thành kiểu chuỗi, trong khi REPRESENTATIONREF chỉ chuyển đổi các giá trị tham chiếu. Nên sử dụng BẢN ĐẠI DIỆN THAM KHẢO trong các truy vấn hệ thống tổng hợp dữ liệu để tối ưu hóa, tất nhiên, trừ khi trường dữ liệu tham chiếu được lên kế hoạch sử dụng trong các lựa chọn.

CHỌN
View(Link), // chuỗi, ví dụ “Báo cáo trước số 123 ngày 10/10/2015
Xem(DeletionMark) AS DeleteMarkText, // chuỗi, “Có” hoặc “Không”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, Đúng hoặc Sai
TỪ
Tài liệu.Báo cáo nâng cao

THỂ HIỆN

Express cho phép bạn chuyển đổi giá trị trường thành kiểu dữ liệu mong muốn. Bạn có thể chuyển đổi một giá trị thành kiểu nguyên thủy hoặc kiểu tham chiếu.

Express cho loại tham chiếu được sử dụng để hạn chế các loại dữ liệu được yêu cầu trong các trường thuộc loại phức tạp, thường được sử dụng để tối ưu hóa hiệu suất hệ thống. Ví dụ:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Loại hoạt độngĐối với thuếKế toánChi phí

Đối với các kiểu nguyên thủy, hàm này thường được sử dụng để giới hạn số lượng ký tự trong các trường có độ dài không giới hạn (các trường như vậy không thể so sánh được). Để tránh lỗi " Tham số không hợp lệ trong hoạt động so sánh. Bạn không thể so sánh các trường
độ dài không giới hạn và các trường thuộc loại không tương thích
", bạn cần thể hiện các trường như sau:

EXPRESS(Nhận xét AS Line(150))

NGÀY KHÁC BIỆT

Nhận miễn phí 267 bài học video trên 1C:

Một ví dụ về việc sử dụng IS NULL trong yêu cầu 1C:

CHỌN TỪ
Tham khảo
KẾT NỐI TRÁI Đăng kýTích lũy.Sản phẩmInWarehouses.Còn lại NHƯ sản phẩm còn lại
Danh mục phần mềmRef.Link = Hàng đã bánCommitteesRemains.Nomenclature
Ở ĐÂU KHÔNG CÓ Sản phẩm còn lại. Số lượng còn lại LÀ NULL

Loại dữ liệu trong truy vấn có thể được xác định bằng cách sử dụng các hàm TYPE() và VALUETYPE() hoặc bằng cách sử dụng toán tử REFERENCE logic. Hai chức năng này tương tự nhau.

Giá trị được xác định trước

Ngoài việc sử dụng các tham số được truyền trong các truy vấn bằng ngôn ngữ truy vấn 1C, bạn có thể sử dụng các giá trị được xác định trước hoặc các tệp . Ví dụ: chuyển khoản, thư mục được xác định trước, biểu đồ tài khoản, v.v.. Đối với điều này, cấu trúc “Value()” được sử dụng.

Ví dụ sử dụng:

WHERE Danh pháp. Loại danh pháp = Giá trị (Thư mục. Các loại danh pháp. Sản phẩm)

WHERE Đối tác. Loại thông tin liên hệ = Giá trị (Số liệu. Loại thông tin liên hệ. Điện thoại)

WHERE Số dư tài khoản.Tài khoản kế toán = Giá trị (Biểu đồ tài khoản.Profit.ProfitsLoss)

Kết nối

Có 4 loại kết nối: BÊN TRÁI, PHẢI, HOÀN THÀNH, NỘI BỘ.

KẾT NỐI TRÁI và PHẢI

Các phép nối được sử dụng để liên kết hai bảng dựa trên một điều kiện cụ thể. Tính năng khi CHỖ NỐI BÊN TRÁI là chúng ta lấy toàn bộ bảng được chỉ định đầu tiên và liên kết có điều kiện với bảng thứ hai. Các trường của bảng thứ hai không thể bị ràng buộc bởi điều kiện sẽ được điền giá trị VÔ GIÁ TRỊ.

Ví dụ:

Nó sẽ trả về toàn bộ bảng Đối tác và chỉ điền vào trường “Ngân hàng” ở những nơi đáp ứng điều kiện “Đối tác.Name = Banks.Name”. Nếu điều kiện không được đáp ứng, trường Ngân hàng sẽ được đặt thành VÔ GIÁ TRỊ.

RIGHT THAM GIA bằng ngôn ngữ 1C hoàn toàn giống nhau kết nối TRÁI, ngoại trừ một điểm khác biệt - trong QUYỀN KẾT NỐI Bảng "chính" là bảng thứ hai, không phải bảng đầu tiên.

KẾT NỐI ĐẦY ĐỦ

KẾT NỐI ĐẦY ĐỦ khác với left và right ở chỗ nó hiển thị tất cả các bản ghi từ hai bảng và chỉ kết nối những bản ghi mà nó có thể kết nối theo điều kiện.

Ví dụ:

TỪ

KẾT NỐI ĐẦY ĐỦ
Directory.Banks Ngân hàng HOW

QUA

Ngôn ngữ truy vấn sẽ chỉ trả về cả hai bảng hoàn toàn nếu điều kiện nối các bản ghi được đáp ứng. Không giống như nối trái/phải, NULL có thể xuất hiện ở hai trường.

THAM GIA TRONG

THAM GIA TRONG khác với bản đầy đủ ở chỗ nó chỉ hiển thị những bản ghi có thể được kết nối theo một điều kiện nhất định.

Ví dụ:

TỪ
Danh mục Đối tác LÀ Khách hàng

THAM GIA TRONG
Directory.Banks Ngân hàng HOW

QUA
Khách hàng.Name = Ngân hàng.Name

Truy vấn này sẽ chỉ trả về các hàng trong đó ngân hàng và đối tác có cùng tên.

Hiệp hội

Cấu trúc THAM GIA và THAM GIA TẤT CẢ kết hợp hai kết quả thành một. Những thứ kia. kết quả của việc thực hiện hai sẽ được “hợp nhất” thành một, một chung.

Nghĩa là, hệ thống hoạt động giống hệt như hệ thống thông thường, chỉ dành cho một bảng tạm thời.

Cách sử dụng INDEX BY

Tuy nhiên, có một điểm cần được tính đến. Việc xây dựng chỉ mục trên bảng tạm thời cũng cần có thời gian để hoàn thành. Vì vậy, chỉ nên sử dụng cấu trúc “ ” nếu biết chắc chắn rằng sẽ có nhiều hơn 1-2 bản ghi trong bảng tạm thời. Nếu không, hiệu ứng có thể ngược lại - hiệu suất của các trường được lập chỉ mục không bù đắp được thời gian cần thiết để xây dựng chỉ mục.

CHỌN
Tỷ giá tiền tệ Mặt cắt ngang mới nhất. Tiền tệ NHƯ tiền tệ,
Tỷ giá tiền tệ Mặt cắt mới nhất.
Tỷ giá tiền tệ PUT
TỪ
Đăng ký thông tin.Tỷ giá tiền tệ.Lát cuối cùng(&Thời gian,) NHƯ Tỷ giá tiền tệLát cuối cùng
CHỈ SỐ THEO
Tiền tệ
;
CHỌN
GiáDanh pháp.Danh pháp,
GiáDanh pháp.Giá,
GiáDanh pháp.Tiền tệ,
Tỷ giá tiền tệ.Tỷ giá
TỪ
Đăng ký thông tin.Danh mục giá.Lát cuối cùng(&Thời gian,
Danh pháp B (&Danh pháp) VÀ Loại giá = &Loại giá) NHƯ Danh pháp giá
LEFT JOIN Tỷ giá tiền tệ NHƯ Tỷ giá tiền tệ
Phần mềm GiáDanh mục.Tiền tệ = Tỷ giá tiền tệ.Tiền tệ

Nhóm

Ngôn ngữ truy vấn 1C cho phép bạn sử dụng các hàm tổng hợp đặc biệt khi nhóm các kết quả truy vấn. Việc nhóm cũng có thể được sử dụng mà không cần các hàm tổng hợp để “loại bỏ” các bản sao.

Các chức năng sau tồn tại:

Số lượng, Số lượng, Số lượng khác nhau, Tối đa, Tối thiểu, Trung bình.

Ví dụ 1:

CHỌN
Bán hàng hóa và dịch vụ Hàng hóa.
SUM(Doanh số hàng hóaServicesGoods.Quantity) AS Số lượng,
SUM(Doanh số hàng hóaServicesGoods.Amount) AS Số tiền
TỪ

NHÓM THEO
Bán hàng hóa và dịch vụ Hàng hóa.

Yêu cầu nhận tất cả các dòng có hàng hóa và tổng hợp theo số lượng, số lượng theo mặt hàng.

Ví dụ số 2

CHỌN
Ngân hàng.Code,
SỐ LƯỢNG (các ngân hàng KHÁC NHAU.Link) NHƯ số lượng bản sao
TỪ
Directory.Banks Ngân hàng HOW
NHÓM THEO
Ngân hàng.Code

Ví dụ này sẽ hiển thị danh sách BIC trong thư mục “Ngân hàng” và hiển thị số lượng bản sao tồn tại cho mỗi BIC.

Kết quả

Kết quả là một cách để lấy dữ liệu từ một hệ thống có cấu trúc phân cấp. Các hàm tổng hợp có thể được sử dụng cho các trường tóm tắt, cũng như cho các nhóm.

Một trong những cách phổ biến nhất để sử dụng kết quả trong thực tế là xóa sổ hàng loạt.

CHỌN




TỪ
Tài liệu. Bán hàng hóa và dịch vụ. Hàng hóa Cách thức bán hàng hóa và dịch vụ Hàng hóa
SẮP XẾP THEO

KẾT QUẢ
TỔNG(Số lượng),
TỔNG(Tổng)
QUA
Danh pháp

Kết quả của truy vấn sẽ có thứ bậc như sau:

Kết quả chung

Nếu bạn cần lấy tổng của tất cả các “tổng”, hãy sử dụng toán tử “CHUNG”.

CHỌN
Bán hàng hóa và dịch vụ Hàng hóa.
Bán hàng hóa và dịch vụ Hàng hóa. Liên kết AS Document,
Bán hàng hóa và dịch vụ Hàng hóa Số lượng AS Số lượng,
Doanh thu bán hàng hóa và dịch vụ Hàng hóa Số tiền AS Số tiền
TỪ
Tài liệu. Bán hàng hóa và dịch vụ. Hàng hóa Cách thức bán hàng hóa và dịch vụ Hàng hóa
SẮP XẾP THEO
Bán hàng hóa và dịch vụ Hàng hóa. Liên kết. Ngày
KẾT QUẢ
TỔNG(Số lượng),
TỔNG(Tổng)
QUA
LÀ PHỔ BIẾN,
Danh pháp

Kết quả thực hiện yêu cầu, chúng ta nhận được kết quả như sau:

Trong đó 1 cấp độ nhóm là tổng hợp tất cả các trường cần thiết.

Sắp xếp

Toán tử ORDER BY được sử dụng để sắp xếp kết quả của truy vấn.

Việc sắp xếp các kiểu nguyên thủy (chuỗi, số, boolean) tuân theo các quy tắc thông thường. Đối với các trường loại tham chiếu, việc sắp xếp xảy ra theo cách biểu diễn bên trong của liên kết (mã định danh duy nhất), thay vì theo mã hoặc theo cách biểu diễn tham chiếu.

CHỌN

TỪ
Directory.Nomenclature AS Danh pháp
SẮP XẾP THEO
Tên

Yêu cầu sẽ hiển thị danh sách các tên trong thư mục danh pháp, sắp xếp theo thứ tự bảng chữ cái.

Tự động đặt hàng

Kết quả của một truy vấn không sắp xếp là một tập hợp các hàng được trình bày một cách hỗn loạn. Các nhà phát triển nền tảng 1C không đảm bảo rằng các hàng sẽ được xuất ra theo cùng một trình tự khi thực hiện các truy vấn giống hệt nhau.

Nếu bạn cần hiển thị các bản ghi bảng theo thứ tự không đổi, bạn phải sử dụng cấu trúc Auto-Order.

CHỌN
Danh pháp.Name AS Tên
TỪ
Directory.Nomenclature AS Danh pháp
ĐẶT HÀNG TỰ ĐỘNG

Bảng ảo

Bảng ảo trong 1C là một tính năng độc đáo của ngôn ngữ truy vấn 1C không có trong các cú pháp tương tự khác. Bảng ảo là cách nhanh chóng để lấy thông tin hồ sơ từ sổ đăng ký.

Mỗi loại thanh ghi có một bộ bảng ảo riêng, có thể khác nhau tùy thuộc vào cài đặt thanh ghi.

  • cắt đầu tiên;
  • cắt sau này.
  • thức ăn thừa;
  • các cuộc cách mạng;
  • số dư và doanh thu.
  • chuyển động từ subconto;
  • các cuộc cách mạng;
  • tốc độ Dt Kt;
  • thức ăn thừa;
  • số dư và doanh thu
  • subconto.
  • căn cứ;
  • dữ liệu đồ thị;
  • thời hạn hiệu lực thực tế.

Đối với nhà phát triển giải pháp, dữ liệu được lấy từ một bảng (ảo), nhưng trên thực tế, nền tảng 1C lấy từ nhiều bảng, chuyển đổi chúng thành dạng được yêu cầu.

CHỌN
Sản phẩm còn lại trong kho và doanh thu.
Sản phẩmInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
Sản phẩmInWarehousesRemainsAndTurnover.QuantityTurnover,
Hàng hóaTrong khoRemainsAndTurnover.QuantityIncoming,
Hàng hóaTrong khoRemainsAndTurnover.QuantityConsumption,
Sản phẩmTrong khoRemainingsAndTurnover.QuantityFinalRemaining
TỪ
Đăng kýTích lũy.Hàng hóaTrongWarehouses.RemainsAndTurnover AS GoodsInWarehousesRemainsAndTurnover

Truy vấn này cho phép bạn nhanh chóng truy xuất một lượng lớn dữ liệu.

Tùy chọn bảng ảo

Một khía cạnh rất quan trọng khi làm việc với các bảng ảo là việc sử dụng các tham số. Các tham số bảng ảo là các tham số chuyên dùng để lựa chọn và cấu hình.

Đối với các bảng như vậy, việc sử dụng lựa chọn trong cấu trúc “WHERE” được coi là không chính xác. Ngoài việc truy vấn trở nên dưới mức tối ưu, có thể nhận được dữ liệu không chính xác.

Một ví dụ về việc sử dụng các tham số này:

Sổ đăng ký tích lũy. Hàng hóa trong kho. Số dư và doanh thu (& Đầu kỳ, & Cuối kỳ, Tháng, Biến động và Biên giới của Kỳ, Danh pháp = & Danh pháp bắt buộc)

Thuật toán cho bảng ảo

Ví dụ: bảng ảo được sử dụng nhiều nhất thuộc loại “Còn lại” lưu trữ dữ liệu từ hai bảng vật lý – số dư và chuyển động.

Khi sử dụng bảng ảo, hệ thống thực hiện các thao tác sau:

  1. Chúng tôi nhận được giá trị được tính toán gần nhất về ngày tháng và số đo trong bảng tổng số.
  2. Chúng ta “cộng” số tiền từ bảng chuyển động với số tiền từ bảng tổng.


Những hành động đơn giản như vậy có thể cải thiện đáng kể hiệu suất của toàn bộ hệ thống.

Sử dụng Trình tạo truy vấn

Trình tạo truy vấn– một công cụ được tích hợp trong hệ thống 1C Enterprise hỗ trợ rất nhiều cho việc phát triển các truy vấn cơ sở dữ liệu.

Trình tạo truy vấn có giao diện khá đơn giản, trực quan. Tuy nhiên, chúng ta hãy xem xét việc sử dụng hàm tạo truy vấn một cách chi tiết hơn.

Trình tạo văn bản truy vấn được khởi chạy từ menu ngữ cảnh (nút chuột phải) ở vị trí mong muốn trong mã chương trình.

Mô tả hàm tạo yêu cầu 1C

Chúng ta hãy xem xét từng tab của nhà thiết kế chi tiết hơn. Ngoại lệ là tab Builder, đây là một chủ đề cho một cuộc thảo luận khác.

Tab Bảng và Trường

Tab này chỉ định nguồn dữ liệu và các trường cần hiển thị trong báo cáo. Về bản chất, cấu trúc SELECT.. FROM được mô tả ở đây.

Nguồn có thể là bảng cơ sở dữ liệu vật lý, bảng đăng ký ảo, bảng tạm thời, truy vấn lồng nhau, v.v.

Trong menu ngữ cảnh của bảng ảo, bạn có thể đặt tham số bảng ảo:

Tab kết nối

Tab này được sử dụng để mô tả các kết nối của một số bảng và tạo các cấu trúc có từ KẾT NỐI.

Tab nhóm

Tại tab này hệ thống cho phép nhóm và tóm tắt các trường bắt buộc của bảng kết quả. Mô tả công dụng của các cấu trúc GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, SỐ LƯỢNG, SỐ KHÁC NHAU.

Tab điều kiện

Chịu trách nhiệm về mọi thứ xuất hiện trong văn bản yêu cầu sau khi xây dựng WHERE, tức là về tất cả các điều kiện áp đặt cho dữ liệu nhận được.

Tab nâng cao

Chuyển hướng Ngoài rađầy đủ các loại thông số rất quan trọng. Chúng ta hãy xem xét từng thuộc tính.

Nhóm Chọn hồ sơ:

  • N đầu tiên– một tham số chỉ trả về N bản ghi cho truy vấn (toán tử FIRST)
  • Không trùng lặp– đảm bảo tính duy nhất của các bản ghi nhận được (toán tử KHÁC)
  • Cho phép– cho phép bạn chỉ chọn những bản ghi mà hệ thống cho phép bạn chọn có tính đến (Cấu trúc ĐƯỢC PHÉP)

Nhóm Loại yêu cầu xác định loại yêu cầu sẽ là: truy xuất dữ liệu, tạo bảng tạm thời hoặc phá hủy bảng tạm thời.

Phía dưới có một lá cờ Khóa dữ liệu đã nhận để sửa đổi sau này. Nó cho phép bạn kích hoạt khả năng thiết lập khóa dữ liệu, đảm bảo an toàn cho dữ liệu từ lúc được đọc cho đến khi được thay đổi (chỉ liên quan đến chế độ khóa Tự động, thiết kế ĐỂ THAY ĐỔI).

Tab Tham gia/Bí danh

Trên tab này của trình thiết kế truy vấn, bạn có thể đặt khả năng nối các bảng và bí danh khác nhau (cấu trúc HOW). Các bảng được chỉ định ở phía bên trái. Nếu bạn đặt các cờ đối diện với bảng, cấu trúc UNITE sẽ được sử dụng, nếu không - UNITE ALL (sự khác biệt giữa hai phương pháp). Ở phía bên phải, sự tương ứng của các trường trong các bảng khác nhau được chỉ định; nếu sự tương ứng không được chỉ định, truy vấn sẽ trả về NULL.

Tab đặt hàng

Điều này chỉ định thứ tự sắp xếp các giá trị (ORDER BY) - giảm dần (DESC) hoặc tăng dần (ASC).

Ngoài ra còn có một lá cờ thú vị - Tự động đặt hàng(trong yêu cầu - ĐẶT HÀNG TỰ ĐỘNG). Theo mặc định, hệ thống 1C hiển thị dữ liệu theo thứ tự “hỗn loạn”. Nếu bạn đặt cờ này thì hệ thống sẽ sắp xếp dữ liệu theo dữ liệu nội bộ.

Tab Truy vấn hàng loạt

Trên tab trình thiết kế truy vấn, bạn có thể tạo những cái mới và cũng có thể sử dụng nó làm điều hướng. Trong văn bản yêu cầu, các gói được phân tách bằng ký hiệu “;” (dấu phẩy).

Nút “Truy vấn” trong trình thiết kế truy vấn

Ở góc dưới bên trái của trình thiết kế yêu cầu có nút Yêu cầu mà bạn có thể xem văn bản yêu cầu bất kỳ lúc nào:

Trong cửa sổ này, bạn có thể điều chỉnh yêu cầu và thực hiện nó.


Sử dụng Bảng điều khiển truy vấn

Bảng điều khiển truy vấn là một cách đơn giản và thuận tiện để gỡ lỗi các truy vấn phức tạp và nhanh chóng thu được thông tin. Trong bài viết này, tôi sẽ cố gắng mô tả cách sử dụng Bảng điều khiển truy vấn và cung cấp liên kết để tải xuống Bảng điều khiển truy vấn.

Chúng ta hãy xem xét kỹ hơn về công cụ này.

Tải xuống bảng điều khiển truy vấn 1C

Trước hết, để bắt đầu làm việc với bảng điều khiển truy vấn, bạn cần tải nó xuống từ đâu đó. Các phương pháp điều trị thường được chia thành hai loại - dạng được kiểm soát và dạng thông thường (hoặc đôi khi, chúng được gọi là 8.1 và 8.2/8.3).

Tôi đã cố gắng kết hợp hai chế độ xem này trong một lần xử lý - biểu mẫu mong muốn sẽ mở ở chế độ vận hành mong muốn (ở chế độ được quản lý, bảng điều khiển chỉ hoạt động ở chế độ dày).

Mô tả bảng điều khiển truy vấn 1C

Hãy bắt đầu xem bảng điều khiển truy vấn với mô tả về bảng xử lý chính:

Trong tiêu đề của bảng điều khiển truy vấn, bạn có thể thấy thời gian thực hiện của truy vấn cuối cùng với độ chính xác đến mili giây, điều này cho phép bạn so sánh các thiết kế khác nhau về mặt hiệu suất.

Nhóm nút đầu tiên trên thanh lệnh có nhiệm vụ lưu các truy vấn hiện tại vào một tệp bên ngoài. Điều này rất thuận tiện; bạn luôn có thể quay lại viết một yêu cầu phức tạp. Hoặc, ví dụ, lưu trữ một danh sách các ví dụ điển hình của một số thiết kế nhất định.

Ở bên trái, trong trường “Yêu cầu”, bạn có thể tạo các yêu cầu mới và lưu chúng trong cấu trúc cây. Nhóm nút thứ hai có nhiệm vụ quản lý danh sách các yêu cầu. Sử dụng nó, bạn có thể tạo, sao chép, xóa, di chuyển một yêu cầu.

  • Hành hìnhlời yêu cầu– Thực hiện và kết quả đơn giản
  • Thực thi gói– cho phép bạn xem tất cả các truy vấn trung gian trong một loạt truy vấn
  • Xem các bảng tạm thời– cho phép bạn xem kết quả mà các truy vấn tạm thời trả về trên một bảng

Thông số yêu cầu:

Cho phép bạn đặt các tham số hiện tại cho yêu cầu.

Trong cửa sổ tham số truy vấn, điều thú vị sau đây:

  • Cái nút Nhận từ yêu cầu tự động tìm thấy tất cả các tham số trong yêu cầu để thuận tiện cho nhà phát triển.
  • Lá cờ Tham số chung cho tất cả các yêu cầu– khi được cài đặt, quá trình xử lý của nó không xóa các tham số khi chuyển từ yêu cầu này sang yêu cầu khác trong danh sách yêu cầu chung.

Đặt tham số với danh sách các giá trị Rất đơn giản, chỉ cần khi chọn giá trị tham số, nhấp vào nút xóa giá trị (chéo), hệ thống sẽ nhắc bạn chọn loại dữ liệu, trong đó bạn cần chọn “Danh sách giá trị”:

Ngoài ra, ở bảng trên cùng còn có một nút để gọi cài đặt bảng điều khiển truy vấn:

Tại đây bạn có thể chỉ định các tham số cho các truy vấn tự động lưu và các tham số thực hiện truy vấn.

Văn bản yêu cầu được nhập vào trường yêu cầu bảng điều khiển. Điều này có thể được thực hiện bằng cách chỉ cần gõ một bài kiểm tra truy vấn hoặc bằng cách gọi một công cụ đặc biệt - trình thiết kế truy vấn.

Trình thiết kế truy vấn 1C 8 được gọi từ menu ngữ cảnh (nút chuột phải) khi bạn nhấp vào trường nhập:

Menu này cũng có các chức năng hữu ích như xóa hoặc thêm dấu ngắt dòng (“|”) vào yêu cầu hoặc nhận mã yêu cầu ở dạng thuận tiện này:

Yêu cầu = Yêu cầu mới;
Yêu cầu.Text = ”
|CHỌN
| Tiền tệ.Link
|TỪ
| Danh mục.Tiền tệ NHƯ Tiền tệ”;
Yêu cầuResult = Yêu cầu.Execute();

Trường bên dưới của bảng điều khiển truy vấn hiển thị trường kết quả truy vấn, đó là lý do tại sao quá trình xử lý này được tạo:



Ngoài ra, bảng điều khiển truy vấn, ngoài danh sách, còn có thể hiển thị dữ liệu ở dạng cây - đối với các truy vấn chứa tổng.

Tối ưu hóa truy vấn

Một trong những điểm quan trọng nhất trong việc tăng năng suất của doanh nghiệp 1C 8.3 là tối ưu hóayêu cầu. Điểm này cũng rất quan trọng khi vượt qua chứng nhận. Dưới đây chúng ta sẽ nói về những lý do điển hình dẫn đến hiệu suất truy vấn không tối ưu và các phương pháp tối ưu hóa.

Các lựa chọn trong bảng ảo sử dụng cấu trúc WHERE

Chỉ cần áp dụng bộ lọc cho chi tiết bảng ảo thông qua tham số VT. Trong mọi trường hợp, bạn không nên sử dụng cấu trúc WHERE để lựa chọn trong bảng ảo; đây là một sai lầm nghiêm trọng theo quan điểm tối ưu hóa. Trong trường hợp lựa chọn sử dụng WHERE, trên thực tế, hệ thống sẽ nhận TẤT CẢ các bản ghi và chỉ sau đó chọn những bản ghi cần thiết.

PHẢI:

CHỌN

TỪ
Đăng ký tích lũy. Thanh toán lẫn nhau với những người tham gia của các tổ chức. Số dư (
,
Tổ chức = &Tổ chức
VÀ Cá nhân = &Cá nhân) CÁCH Thanh toán chung với những người tham gia Số dư của tổ chức

SAI:

CHỌN
Thanh toán lẫn nhau với những người tham gia số dư của tổ chức.
TỪ
Sổ đăng ký tích lũy. Thanh toán lẫn nhau với những người tham gia của các tổ chức. Số dư (,) CÁCH Thanh toán lẫn nhau với những người tham gia của tổ chức Số dư
Ở ĐÂU
Thanh toán lẫn nhau với những người tham gia số dư của tổ chức.
VÀ Thanh toán lẫn nhau với Người tham gia Số dư của Tổ chức.

Lấy giá trị của trường thuộc loại phức bằng dấu chấm

Khi nhận dữ liệu thuộc loại phức tạp trong truy vấn thông qua dấu chấm, hệ thống sẽ kết nối bằng phép nối trái chính xác với số lượng bảng có thể có trong trường loại phức tạp.

Ví dụ: việc tối ưu hóa truy cập vào trường bản ghi đăng ký – nhà đăng ký là điều không mong muốn. Nhà đăng ký có một kiểu dữ liệu tổng hợp, trong số đó có tất cả các loại tài liệu có thể ghi dữ liệu vào sổ đăng ký.

SAI:

CHỌN
Bộ ghi.Recorder.Date,
RecordSet.Quantity
TỪ
RegisterAccumulations.ProductsOrganizations AS SetRecords

Trên thực tế, một truy vấn như vậy sẽ truy cập không phải một bảng mà là 22 bảng cơ sở dữ liệu (thanh ghi này có 21 loại nhà đăng ký).

PHẢI:

CHỌN
SỰ LỰA CHỌN
KHI ProductsOrg.Registrar LINK Document.Bán sản phẩm và dịch vụ
THEN EXPRESS(ProductsOrganization.Registrar AS Document.Sales of GoodsServices).Date
KHI GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
THEN EXPRESS(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Date
KẾT THÚC NHƯ NGÀY,
Sản phẩmOrg.Quantity
TỪ
RegisterAccumulations.ProductsOrganizations AS ProductsOrganization

Hoặc tùy chọn thứ hai là thêm thông tin đó vào chi tiết, chẳng hạn như trong trường hợp của chúng tôi là thêm ngày.

PHẢI:

CHỌN
Sản phẩmTổ chức.Ngày,
Sản phẩmTổ chức.Số lượng
TỪ
Sổ đăng ký tích lũy Hàng hóa của tổ chức NHƯ Hàng hóa của tổ chức

Truy vấn con trong điều kiện nối

Để tối ưu hóa, không thể chấp nhận sử dụng truy vấn con trong điều kiện nối; điều này làm chậm đáng kể truy vấn. Nên sử dụng VT trong những trường hợp như vậy. Để kết nối, bạn chỉ cần sử dụng siêu dữ liệu và các đối tượng VT, trước đó đã lập chỉ mục chúng theo các trường kết nối.

SAI:

CHỌN …

CHỖ NỐI BÊN TRÁI (
CHỌN TỪ RegisterInformation.Limits
Ở ĐÂU …
NHÓM THEO...
) QUA …

PHẢI:

CHỌN …
Giới hạn PUT
TỪ Thông tin Đăng ký.Giới hạn
Ở ĐÂU …
NHÓM THEO...
CHỈ SỐ THEO...;

CHỌN …
TỪ Tài liệu Bán hàng hóa và dịch vụ
Giới hạn THAM GIA TRÁI
QUA …;

Tham gia các bản ghi với bảng ảo

Có những tình huống khi kết nối một bảng ảo với những bảng khác, hệ thống không hoạt động tối ưu. Trong trường hợp này, để tối ưu hóa hiệu suất của truy vấn, bạn có thể thử đặt bảng ảo vào bảng tạm thời, không quên lập chỉ mục các trường đã nối trong truy vấn bảng tạm thời. Điều này là do thực tế là các VT thường được chứa trong một số bảng DBMS vật lý; kết quả là một truy vấn con được biên dịch để chọn chúng và vấn đề hóa ra lại tương tự như điểm trước đó.

Sử dụng các lựa chọn dựa trên các trường không được lập chỉ mục

Một trong những lỗi phổ biến nhất khi viết truy vấn là sử dụng điều kiện trên các trường không được lập chỉ mục, điều này mâu thuẫn với quy tắc tối ưu hóa truy vấn. DBMS không thể thực hiện truy vấn một cách tối ưu nếu truy vấn bao gồm lựa chọn trên các trường không thể lập chỉ mục. Nếu bạn lấy một bảng tạm thời, bạn cũng cần lập chỉ mục các trường kết nối.

Phải có chỉ số phù hợp cho từng điều kiện. Chỉ số phù hợp là chỉ số thỏa mãn các yêu cầu sau:

  1. Chỉ mục chứa tất cả các trường được liệt kê trong điều kiện.
  2. Các trường này nằm ở phần đầu của chỉ mục.
  3. Các lựa chọn này là liên tiếp, nghĩa là các giá trị không liên quan đến điều kiện truy vấn sẽ không được “nêm” vào giữa chúng.

Nếu DBMS không chọn đúng chỉ mục, toàn bộ bảng sẽ được quét - điều này sẽ có tác động rất tiêu cực đến hiệu suất và có thể dẫn đến việc chặn toàn bộ bộ bản ghi trong thời gian dài.

Sử dụng logic OR trong điều kiện

Đó là tất cả, bài viết này đề cập đến các khía cạnh cơ bản của tối ưu hóa truy vấn mà mọi chuyên gia 1C nên biết.

Một khóa học video miễn phí rất hữu ích về phát triển và tối ưu hóa truy vấn, Tôi thực sự khuyên bạn nên dành cho người mới bắt đầu và hơn thế nữa!

Thanh ghi tích lũy trong hệ thống 1C:Enterprise được chia thành hai loại: sổ đăng ký tích lũy thức ăn thừa và sổ đăng ký tích lũy vòng/phút.

Loại thanh ghi được chọn khi tạo nó trong bộ cấu hình

Như tên cho thấy, một số nhằm mục đích đạt được số dư vào một ngày nhất định và thứ hai nhằm đạt được doanh thu trong một khoảng thời gian đã chọn. Tùy thuộc vào loại sổ đăng ký tích lũy, nền tảng 1C:Enterprise sẽ tạo ra một bộ bảng ảo khác nhau. Trong bài viết này, chúng ta sẽ xem xét cách làm việc với các bảng thanh ghi tích lũy ảo. Để làm điều này, chúng tôi sẽ tạo một sổ đăng ký để tích lũy số dư - Sản phẩmCòn lại và sổ đăng ký tích lũy cách mạng - Sản phẩmDoanh thu.

Bây giờ chúng ta hãy xem những bảng ảo mà nền tảng cung cấp cho mỗi thanh ghi này.

Sổ đăng ký tích lũy cách mạng

Để rõ ràng, hãy mở và xem bảng nào có sẵn để đăng ký Sản phẩmDoanh thu. Đây là bảng đăng ký - Sản phẩmDoanh thu, tồn tại vật lý trong cơ sở dữ liệu và một bảng ảo - Sản phẩmDoanh thu.Doanh thu

Với bảng tiêu chuẩn, mọi thứ đều rõ ràng. Chúng ta hãy xem xét kỹ hơn về cái ảo.

Doanh thu bàn ảo

Bảng này cho phép bạn có được doanh thu tài nguyên về mặt kích thước. Trong trường hợp của chúng tôi, chúng tôi có hai chiều: Cổ phầnSản phẩm. Và một tài nguyên - Số lượng

Hãy để sổ đăng ký của chúng tôi có các mục sau

Hãy quay lại trình thiết kế truy vấn và bắt đầu bằng cách chọn từ bảng Sản phẩmDoanh thu.Doanh thu tất cả các lĩnh vực

Theo đó, yêu cầu sẽ như thế này:

CHỌN Sản phẩmDoanh thuDoanh thu.Kho, Sản phẩmDoanh thuDoanh thu.Sản phẩm, Sản phẩmDoanh thuDoanh thu.Số lượngDoanh thu TỪ Đăng kýTích lũy.Sản phẩmDoanh thu.Doanh thu(,) NHƯ Sản phẩmDoanh thuDoanh thu

Kết quả của truy vấn trông như thế này:

Tức là chúng tôi đã nhận được doanh thu về hàng hóa và kho bãi trong suốt thời gian qua. Giả sử rằng chúng tôi không quan tâm đến kho hàng và chúng tôi chỉ muốn đạt được doanh thu về mặt hàng hóa.

Để làm điều này, chúng tôi loại trừ thứ nguyên khỏi yêu cầu Cổ phần

CHỌN sản phẩmDoanh thuDoanh thu.Sản phẩm, Sản phẩmDoanh thuDoanh thu.Số lượngDoanh thu TỪ Đăng kýTích lũy.Sản phẩmDoanh thu.Doanh thu(,) NHƯ Sản phẩmDoanh thuDoanh thu

và kết quả là chúng ta sẽ chỉ còn lại hai dòng

Nhưng theo quy định, không cần phải có doanh thu trong toàn bộ thời gian tồn tại của sổ đăng ký. Về cơ bản, chúng cần thiết cho một khoảng thời gian cụ thể: tháng, quý, năm, v.v. Ngoài ra, việc lựa chọn theo kích thước (Sản phẩm, Kho) thường là cần thiết. Điều này đạt được bằng cách sử dụng tham số bảng ảo. Thật thuận tiện khi điền các tham số từ hàm tạo. Bằng nút Tùy chọn bảng ảo Một hộp thoại mở ra trong đó bạn có thể nhập mọi thứ chúng tôi cần:

Sau này, yêu cầu ban đầu của chúng tôi sẽ có dạng sau

CHỌN Hàng hóaDoanh thuDoanh thu.Kho, Hàng hóaDoanh thuDoanh thu.Sản phẩm, Hàng hóaDoanh thu.Số lượngDoanh thu TỪ Đăng kýTích lũy.Hàng hóaDoanh thu.Doanh thu(&Đầu kỳ, &Cuối kỳ, Kho = &Kho) NHƯ Hàng hóaDoanh thuDoanh thu

Như chúng ta có thể thấy, sự khác biệt là trong dấu ngoặc đơn sau tên của bảng ảo có các tham số phải được điền trước khi thực hiện truy vấn.

Những người mới bắt đầu làm việc với các bảng ảo thường có xu hướng thiết lập lựa chọn theo cách thông thường thay vì sử dụng các tham số:

TỪ RegisterAccumulations.ProductsTurnover.Turnover(,) CÁCH SẢN PHẨMDoanh thuDoanh thu Ở ĐÂU Sản phẩmDoanh thuTurnover.Warehouse = &Warehouse

Khi điền các thông số chúng ta bỏ sót Tính định kỳ. Hãy mở danh sách và chọn từ vô số tùy chọn có thể Tháng. Chúng tôi sẽ xóa tất cả các tham số khác để không bị nhầm lẫn.

Sau đó, chúng tôi quan sát thấy một trường xuất hiện trong các trường của bảng Giai đoạn.

Bằng cách thêm nó vào các trường đã chọn, chúng tôi nhận được văn bản yêu cầu sau:

CHỌN Sản phẩmDoanh thuTurnover.Period, Sản phẩmDoanh thuTurnover.Kho, Sản phẩmDoanh thuDoanh thu.Sản phẩm, Sản phẩmDoanh thuDoanh thu.Số lượngDoanh thu TỪ Đăng kýTích lũy.Sản phẩmDoanh thu.Doanh thu(, Tháng,) NHƯ Sản phẩmDoanh thuDoanh thu

Chúng tôi thực hiện yêu cầu:

Như vậy, trong khoảng thời gian đã chọn, chúng ta có thể chia số vòng quay thành những khoảng nhỏ hơn phù hợp với tần số đã chọn.

Sổ đăng ký tích lũy số dư

Cũng giống như thanh ghi ngược, chúng ta hãy xem trong trình thiết kế truy vấn những bảng ảo nào có sẵn cho thanh ghi tích lũy số dư

Như bạn có thể thấy, ba bảng ảo có sẵn cho thanh ghi tích lũy số dư: cuộc cách mạng, Thức ăn thừa, Phần còn lại và doanh thu. Chúng ta hãy xem xét từng cái một cách riêng biệt.

Doanh thu bàn ảo

Mặc dù thực tế là loại thanh ghi Thức ăn thừa, tuy nhiên chúng tôi vẫn có thể nhận được doanh thu từ nó. Ngoài ra, chúng tôi có hai tài nguyên bổ sung ở đây: Đang tớiSự tiêu thụ

Hãy để tôi nhắc bạn rằng khi một mục được thực hiện trong sổ số dư, loại chuyển động tích lũy (thu nhập hoặc chi phí) sẽ được chỉ định, trong khi đối với sổ đăng ký doanh thu, loại chuyển động không được chỉ định. Do đó, ở đây chúng tôi có một phần thưởng bổ sung dưới dạng cơ hội nhận được không chỉ tổng doanh thu trong kỳ mà còn cả thu nhập và chi phí riêng biệt. Nhưng tất nhiên, nếu siêu dữ liệu chứa một thanh ghi ngược với tập hợp các phép đo tương tự thì tốt hơn nên sử dụng nó để tính doanh thu. Nhìn chung thao tác với bảng ảo này cũng tương tự như thao tác với bảng ảo. cuộc cách mạng sổ đăng ký có thể thương lượng đã thảo luận ở trên.

Số dư trên bảng ảo

Bảng này được sử dụng để có được sự cân bằng tài nguyên theo thứ nguyên. Trong các tham số của bảng, chúng tôi có thể chỉ định ngày chúng tôi nhận được số dư và đặt các lựa chọn:

Hãy xem xét một ví dụ nhỏ. Chúng ta có các mục đăng ký sau:

Hãy chọn tất cả các trường có sẵn và đặt cuối tháng 6 làm ngày nhận số dư. Chúng tôi sẽ không lựa chọn dựa trên số đo. Sau đó, văn bản yêu cầu sẽ trông như thế này:

SELECT ProductsRemainingsRemainings.Warehouse, ProductsRemainingsRemainings.Product, ProductsRemainingsRemainings.QuantityRemaining FROM RegisterAccumulations.ProductsRemainings.Remainings(&DateRemainings,) AS ProductsRemainingRemainings

Và sau khi thực hiện nó chúng ta nhận được kết quả này

Số dư và doanh thu trên bảng ảo

Bảng này kết hợp hai bảng đã thảo luận trước đó và cho phép bạn đạt được doanh thu trong khoảng thời gian đã chọn, cũng như số dư ở đầu và cuối kỳ. Bạn cũng có thể thiết lập lựa chọn.

Việc sử dụng bảng này có thể hợp lý khi bạn cần thu thập đồng thời cả doanh thu và số dư ở đầu và cuối kỳ trong một báo cáo. Trong các trường hợp khác, bạn không nên lạm dụng việc sử dụng nó.