Điều kiện trong bảng ảo 1c

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.

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óaHàng tồn khoRemains.Sản phẩm,
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 lưu trữ tổng số hiện tại (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.

Tôi quyết định đóng góp và mô tả những đặc điểm của ngôn ngữ chưa được thảo luận trong các bài viết trên. Bài viết hướng tới các nhà phát triển mới bắt đầu.

1. Thiết kế “IZ”.

Để lấy dữ liệu từ cơ sở dữ liệu, không nhất thiết phải sử dụng cấu trúc “FROM”.
Ví dụ: Chúng ta cần chọn tất cả thông tin về ngân hàng từ thư mục ngân hàng.
Lời yêu cầu:

CHỌN Thư mục.Banks.*

Chọn tất cả các trường từ thư mục Ngân hàng. Và tương tự như yêu cầu:

CHỌN ngân hàng.* TỪ Directory.Banks NHƯ ngân hàng

2. Sắp xếp dữ liệu theo trường tham chiếu

Khi chúng ta cần sắp xếp dữ liệu truy vấn theo các kiểu nguyên thủy: "Chuỗi", "Số", "Ngày", v.v., thì mọi thứ sẽ được giải quyết bằng cách sử dụng cấu trúc "ORDER BY" nếu bạn cần sắp xếp dữ liệu theo trường tham chiếu? Trường tham chiếu là một liên kết, một mã định danh duy nhất, tức là Nói một cách đại khái, một số bộ ký tự tùy ý và thứ tự thông thường có thể tạo ra một kết quả không hoàn toàn được mong đợi. Để sắp xếp các trường tham chiếu, cấu trúc "AUTO ORDER" được sử dụng. Để thực hiện việc này, trước tiên bạn phải sắp xếp dữ liệu trực tiếp theo loại tham chiếu bằng cách sử dụng cấu trúc "ORDER BY" và sau đó là cấu trúc "AUTO ORDER".

Trong trường hợp này, đối với tài liệu, thứ tự sẽ diễn ra theo thứ tự "Ngày->Số", đối với sách tham khảo trong "Chế độ xem chính". Nếu thứ tự không xảy ra bởi các trường tham chiếu thì không nên sử dụng cấu trúc "AUTO ORDER".

Trong một số trường hợp, cấu trúc "AUTO ORDER" có thể làm chậm quá trình lựa chọn. Theo cách tương tự, bạn có thể viết lại mà không cần tự động sắp xếp thứ tự tài liệu:

3. Lấy biểu diễn văn bản của loại tham chiếu. Thiết kế "Trình bày".

Khi bạn cần hiển thị một trường thuộc loại tham chiếu, ví dụ: trường "Ngân hàng", là liên kết đến một thành phần của thư mục "Ngân hàng", bạn cần hiểu rằng khi trường này được hiển thị, một truy vấn con tới Thư mục "Ngân hàng" sẽ được thực thi tự động để có được chế độ xem thư mục. Điều này sẽ làm chậm quá trình xuất dữ liệu. Để tránh điều này, bạn cần sử dụng cấu trúc "TRÌNH BÀY" trong yêu cầu để ngay lập tức có được hình ảnh đại diện của đối tượng và sau đó hiển thị nó để xem.

Trong hệ thống thành phần dữ liệu, cơ chế này được sử dụng theo mặc định, nhưng khi tạo bố cục trong ô, bạn nên chỉ định phần trình bày của trường tham chiếu và ví dụ: đặt chính liên kết đó vào bản ghi.

4. Điều kiện lấy mẫu dữ liệu theo mẫu.

Ví dụ: bạn cần lấy điện thoại di động của nhân viên có dạng (8 -123- 456-78-912). Để thực hiện việc này, bạn cần đặt điều kiện sau trong yêu cầu:

CHỌN Nhân viên.Tên, Nhân viên.Điện thoại NHƯ Điện thoại TỪ Danh mục.Nhân viên NHƯ Nhân viên Ở ĐÂU Điện thoại NHƯ "_-___-___-__-__"

Ký tự "_" là ký tự dịch vụ và thay thế bất kỳ ký tự nào.

5. Sử dụng đồng thời tổng và nhóm.


Tổng số thường được sử dụng cùng với các nhóm; trong trường hợp này, các hàm tổng hợp có thể không được chỉ định trong tổng số.

CHỌN Cung cấp dịch vụ.Tổ chức NHƯ Tổ chức, Cung cấp dịch vụ.Danh pháp NHƯ Danh pháp, SUM(Cung cấp dịch vụ.Số lượng tài liệu) NHƯ Tổng tài liệu TỪ Tài liệu.Cung cấp dịch vụ NHƯ Cung cấp dịch vụ NHÓM THEO Cung cấp dịch vụ.Tổ chức, Cung cấp của Dịch vụ.Danh pháp KẾT QUẢ THEO TỔNG QUÁT, Tổ chức, danh pháp

Trong trường hợp này, truy vấn sẽ trả về gần giống như truy vấn sau:

CHỌN Cung cấp dịch vụ.Tổ chức NHƯ Tổ chức, Cung cấp dịch vụ.Danh pháp NHƯ Danh pháp, Cung cấp dịch vụ.Số lượng tài liệu NHƯ số lượng tài liệu TỪ tài liệu.Cung cấp dịch vụ NHƯ cung cấp dịch vụ KẾT QUẢ SỐ TIỀN (Số lượng tài liệu) BỞI CHUNG, Tổ chức, Danh pháp

Chỉ truy vấn đầu tiên sẽ thu gọn các bản ghi có cùng danh pháp.

6. Các trường hội thảo.

Tham chiếu đến các trường thông qua dấu chấm được gọi là thao tác hủy tham chiếu trường tham chiếu. Ví dụ Thanh toán.Tổ chức.Đơn vị hành chính. Trong trường hợp này, trong trường tham chiếu "Tổ chức" của tài liệu "Thanh toán", nó đề cập đến một bảng khác "Tổ chức", trong đó giá trị của thuộc tính "Đơn vị hành chính" sẽ thu được. Điều quan trọng là phải hiểu rằng khi truy cập các trường thông qua dấu chấm, nền tảng sẽ ngầm tạo một truy vấn con và nối các bảng này.

Lời yêu cầu:

Có thể được biểu diễn dưới dạng:

CHỌN Thanh toán.Liên kết, Thanh toán.Tổ chức, Thanh toán.Tổ chức, Tổ chức. Đơn vị hành chính TỪ Tài liệu.Thanh toán NHƯ Thanh toán TRÁI THAM GIA Directory.Tổ chức NHƯ Tổ chức Phần mềm Thanh toán.Tổ chức = Tổ chức.Liên kết

Khi hủy tham chiếu các trường tham chiếu thuộc loại tổng hợp, khung sẽ cố gắng tạo các kết nối ngầm cho tất cả các bảng là một phần của loại trường đó. Trong trường hợp này, truy vấn sẽ không tối ưu. Nếu biết rõ đó là loại trường nào thì cần giới hạn các trường đó theo loại bằng một cấu trúc. THỂ HIỆN().

Ví dụ: có một sổ đăng ký tích lũy “Thanh toán chưa phân phối”, trong đó một số tài liệu có thể hoạt động như một nhà đăng ký. Trong trường hợp này, việc lấy các giá trị của chi tiết nhà đăng ký theo cách này là không chính xác:

CHỌN Thanh toán chưa được phân bổ.Register.Date,..... TỪ RegisterAccumulation.UnallocatedPayments NHƯ Thanh toán chưa được phân bổ

bạn nên hạn chế loại trường tổng hợp ở logger:

CHỌN EXPRESS(Thanh toán chưa được phân bổ.Đăng ký dưới dạng tài liệu.Thanh toán).Ngày,..... TỪ Đăng kýTích lũy.Thanh toán chưa được phân bổ NHƯ Thanh toán chưa được phân bổ

7. Xây dựng “ĐÂU”

Với phép nối trái của hai bảng, khi bạn áp đặt điều kiện “WHERE” vào bảng bên phải, chúng ta sẽ nhận được kết quả tương tự như kết quả với phép nối trong của các bảng.

Ví dụ. Cần chọn tất cả Khách hàng từ Danh mục Khách hàng và đối với những khách hàng có chứng từ thanh toán có giá trị thuộc tính "Tổ chức" = &Tổ chức thì hiển thị tài liệu "Thanh toán", những khách hàng không có thì không hiển thị.

Kết quả của truy vấn sẽ chỉ trả về bản ghi cho những khách hàng đã thanh toán theo tổ chức trong tham số và sẽ lọc ra các khách hàng khác. Do đó, trước tiên bạn phải nhận tất cả các khoản thanh toán cho tổ chức “như vậy và như vậy” trong một bảng tạm thời, sau đó kết nối nó với thư mục “Khách hàng” bằng cách sử dụng nối trái.

CHỌN Thanh toán.Liên kết NHƯ Thanh toán, Thanh toán.Cổ đông NHƯ Khách hàng NƠI thanh toán TỪ Tài liệu.Thanh toán NHƯ Thanh toán TẠI ĐÂY Thanh toán.Chi nhánh = &Chi nhánh; ///////////////////////////////////////////////////////////////// // ////////////////////////// CHỌN Khách hàng.Liên kết khách hàng, ISNULL(tPayment.Payment, "") NHƯ thanh toán TỪ thư mục .Khách hàng NHƯ Khách hàng TRÁI KẾT NỐI để thanh toán NHƯ để thanh toán PHẦN MỀM Khách hàng.Liên kết = thanh toán.Khách hàng

Bạn có thể khắc phục tình trạng này theo cách khác. Cần phải áp đặt trực tiếp điều kiện "WHERE" lên mối quan hệ giữa hai bảng. Ví dụ:

CHỌN Khách hàng.Link, Thanh toán.Liên kết TỪ Directory.US_Subscribers NHƯ US_Subscribers TRÁI KẾT NỐI Tài liệu. Thanh toán NHƯ Phần mềm thanh toán (Clients.Link = Payment.Client AND Payment.Client.Name THÍCH "Sugar Packet") NHÓM THEO Khách hàng.Liên kết, Thanh toán. liên kết

8. Tham gia với các bảng lồng nhau và ảo

Truy vấn lồng nhau thường cần thiết để lấy dữ liệu dựa trên một số điều kiện. Sau đó, nếu bạn sử dụng chúng cùng với các bảng khác, điều này có thể làm chậm quá trình thực thi truy vấn.

Ví dụ: chúng tôi cần lấy Số dư kể từ ngày hiện tại đối với một số khách hàng.

CHỌN Thanh toán chưa được phân bổBalances.Khách hàng, Thanh toán chưa phân bổBalances.Số dư từ (CHỌN Khách hàng.Liên kết NHƯ Liên kết TỪ Thư mục.Khách hàng NHƯ Khách hàng WHERE Khách hàng.Liên kết IN(&Khách hàng)) NHƯ NestedQuery TRÁI THAM GIA Đăng kýAccumulations.UnallocatedPayments.Balances NHƯ Thanh toán chưa được phân bổ BỞI nyRequest lồng nhau.Liên kết = Số dư thanh toán chưa được phân bổ. Khách hàng

Khi thực hiện một truy vấn như vậy, trình tối ưu hóa DBMS có thể mắc lỗi khi chọn một gói, điều này sẽ dẫn đến việc thực hiện truy vấn dưới mức tối ưu. Khi nối hai bảng, trình tối ưu hóa DBMS sẽ chọn thuật toán nối bảng dựa trên số lượng bản ghi trong cả hai bảng. Nếu có một truy vấn lồng nhau, việc xác định số lượng bản ghi mà truy vấn lồng nhau sẽ trả về là vô cùng khó khăn. Vì vậy, bạn nên luôn sử dụng các bảng tạm thời thay vì các truy vấn lồng nhau. Vì vậy hãy viết lại yêu cầu.

CHỌN Khách hàng. Liên kết NHƯ Liên kết NƠI tClient TỪ Thư mục. Khách hàng NHƯ Khách hàng Ở ĐÂU
Khách hàng.Link B (&Khách hàng) ; ///////////////////////////////////////////////////////////////// // ////////////////////////// CHỌN tClients.Link, UnallocatedPaymentsRemains.AmountRemaining, TỪ tClients NHƯ tClients TRÁI THAM GIA Đăng kýAccumulations.UnallocatedPayments.Balances (, Client IN (CHỌN tClients.Link TỪ tClients)) AS UnallocatedPaymentsBalances tClients.Link = UnallocatedPaymentsBalances.Clients

Trong trường hợp này, trình tối ưu hóa sẽ có thể xác định số lượng bản ghi mà bảng tạm thời tClients sử dụng và có thể chọn thuật toán tối ưu để nối các bảng.

Bảng ảo , cho phép bạn có được dữ liệu thực tế được tạo sẵn cho hầu hết các nhiệm vụ được áp dụng (Phần đầu tiên, Phần cuối cùng, Phần còn lại, Doanh thu, Phần còn lại và Doanh thu) Từ khóa ở đây là ảo. Các bảng này không phải là bảng vật lý mà được hệ thống biên dịch một cách nhanh chóng, tức là. Khi nhận dữ liệu từ các bảng ảo, hệ thống sẽ thu thập dữ liệu từ các bảng đăng ký cuối cùng, tập hợp, nhóm và cấp cho người dùng.

Những thứ kia. Khi kết nối với bảng ảo, kết nối sẽ được thực hiện với truy vấn phụ. Trong trường hợp này, trình tối ưu hóa DBMS cũng có thể chọn gói kết nối không tối ưu. Nếu truy vấn không được tạo đủ nhanh và truy vấn sử dụng các phép nối trong bảng ảo thì bạn nên di chuyển quyền truy cập vào các bảng ảo sang một bảng tạm thời, sau đó thực hiện nối giữa hai bảng tạm thời. Hãy viết lại yêu cầu trước đó.

CHỌN Khách hàng.Liên kết NHƯ Liên kết NƠI tClients TỪ Thư mục.Khách hàng NHƯ Khách hàng CHỈ SỐ THEO Liên kết WHERE
Khách hàng.Link B (&Khách hàng) ; ///////////////////////////////////////////////////////////////// // /////////////////////////// CHỌN Thanh toán chưa được phân bổ.AmountBalance, Thanh toán chưa được phân bổ.Khách hàng NHƯ số dư NƠI của khách hàng TỪ RegisterAccumulations.UnallocatedPayments.Balances(, Khách hàng B ( CHỌN tClients. Liên kết TỪ tClients)) NHƯ Số dư thanh toán chưa được phân bổ; ///////////////////////////////////////////////////////////////// // ////////////////////////// CHỌN tClients.Link, toRemainders.AmountRemaining AS Số tiền còn lại TỪ tClients AS tClients TRÁI THAM GIA đến phần còn lại NHƯ tClients.Link = tRemainings.Client

9.Kiểm tra kết quả của yêu cầu.

Kết quả của truy vấn có thể trống; để kiểm tra các giá trị trống, hãy sử dụng cấu trúc sau:

ResRequest = Yêu cầu.Execute(); Nếu resQuery.Empty() thì Return; endIf;

Phương pháp Trống() nên được sử dụng trước các phương pháp Chọn() hoặc Dỡ bỏ(), vì việc truy xuất bộ sưu tập cần có thời gian.

Không ai có thể tiết lộ rằng việc sử dụng các truy vấn trong một vòng lặp là điều cực kỳ không mong muốn. Điều này có thể ảnh hưởng nghiêm trọng đến thời gian hoạt động của một chức năng cụ thể. Rất mong muốn nhận được tất cả dữ liệu trong yêu cầu và sau đó xử lý dữ liệu theo vòng lặp. Nhưng đôi khi có những trường hợp không thể di chuyển yêu cầu ra ngoài vòng lặp. Trong trường hợp này, để tối ưu hóa, bạn có thể di chuyển việc tạo truy vấn ra bên ngoài vòng lặp và trong vòng lặp, thay thế các tham số cần thiết và thực hiện truy vấn.

Yêu cầu = Yêu cầu mới; Query.Text = "CHỌN | Khách hàng.Link, | Khách hàng.Ngày sinh |TỪ | Directory.Clients NHƯ Khách hàng |WHERE | Khách hàng.Link = &Khách hàng"; Đối với mỗi hàng TỪ TableClients Loop Query.SetParameter("Client", Client); QueryResult = Query.Execute().Select(); Chu kỳ cuối;

Điều này sẽ cứu hệ thống khỏi việc kiểm tra cú pháp yêu cầu trong một vòng lặp.

11. Xây dựng “CÓ”.

Một thiết kế khá hiếm trong các yêu cầu. Cho phép bạn áp đặt các điều kiện cho các giá trị của hàm tổng hợp (SUM, MINIMUM, AVERAGE, v.v.). Ví dụ: bạn chỉ cần chọn những khách hàng có số tiền thanh toán trong tháng 9 lớn hơn 13.000 rúp. Nếu bạn sử dụng điều kiện “WHERE”, trước tiên bạn sẽ phải tạo một bảng tạm thời hoặc một truy vấn lồng nhau, nhóm các bản ghi ở đó theo số tiền thanh toán rồi áp dụng điều kiện. Thiết kế “HAVING” sẽ giúp tránh được điều này.

CHỌN Thanh toán.Khách hàng, SỐ TIỀN(Thanh toán.Số tiền) NHƯ Số tiền TỪ Tài liệu.Thanh toán NHƯ Thanh toán TRONG THÁNG(Ngày thanh toán.Ngày) = 9 NHÓM THEO Thanh toán.Khách hàng CÓ SỐ TIỀN(Thanh toán.Số tiền) > 13000

Trong hàm tạo, để thực hiện việc này, chỉ cần chuyển đến tab “Điều kiện”, thêm điều kiện mới và chọn hộp kiểm “Tùy chỉnh”. Sau đó chỉ cần viết Số tiền(Thanh toán.Số tiền) > 13000


12. Giá trị NULL

Ở đây tôi sẽ không mô tả các nguyên tắc logic ba giá trị trong cơ sở dữ liệu; có rất nhiều bài viết về chủ đề này. Chỉ nói ngắn gọn về cách VÔ GIÁ TRỊ có thể ảnh hưởng đến kết quả của truy vấn. Giá trị NULL thực tế không phải là một giá trị và thực tế là giá trị không được xác định là không xác định. Do đó, bất kỳ thao tác nào có NULL đều trả về NULL, có thể là cộng, trừ, chia hoặc so sánh. Không thể so sánh giá trị NULL với giá trị NULL vì chúng tôi không biết nên so sánh cái gì. Những thứ kia. cả hai so sánh này đều là: NULL = NULL, NULL<>NULL không phải là Đúng hay Sai, không xác định được.

Hãy xem một ví dụ.

Đối với những khách hàng chưa thanh toán, chúng tôi cần hiển thị trường “Ký” với giá trị “Không thanh toán”. Hơn nữa, chúng tôi biết chắc chắn rằng chúng tôi có những khách hàng như vậy. Và để phản ánh bản chất của những gì tôi đã viết ở trên, hãy làm theo cách này.

CHỌN "Không thanh toán" NHƯ Thuộc tính, NULL NHƯ Tài liệu NƠI thanh toán; ///////////////////////////////////////////////////////////////// // ////////////////////////// CHỌN Khách hàng.Liên kết với tư cách khách hàng, thanh toán.Liên kết CÁCH thanh toán PUT tClientThanh toán từ thư mục.Khách hàng NHƯ Khách hàng TRÁI Tài liệu KẾT NỐI. Thanh toán NHƯ Phần mềm thanh toán Khách hàng.Link = Payment.Shareholder; ///////////////////////////////////////////////////////////////// // ////////////////////////// CHỌN tClientPayment.Client TỪ tClientPayment NHƯ tClientPayment NỘI BỘ THAM GIA tPayment NHƯ tTopay BY tClientPayment.Payment = Tài liệu tPayment.

Hãy chú ý đến bảng tạm thời thứ hai tClientPayment. Với phép nối bên trái, tôi chọn tất cả khách hàng và tất cả các khoản thanh toán cho những khách hàng này. Đối với những khách hàng không có khoản thanh toán, trường “Thanh toán” sẽ là NULL. Theo logic, trong bảng tạm thời đầu tiên “tPayments” tôi đã chỉ định 2 trường, một trong số đó là NULL, dòng thứ hai “Không có thanh toán”. Trong bảng thứ ba, tôi kết nối các bảng “tClientPayment” và “tPayment” bằng cách sử dụng các trường “Thanh toán” và “Tài liệu” với một liên kết nội bộ. Chúng tôi biết rằng trong bảng đầu tiên, trường “Tài liệu” là NULL và trong bảng thứ hai, những người không có khoản thanh toán trong trường “Thanh toán” cũng là NULL. Một kết nối như vậy sẽ trở lại với chúng ta điều gì? Nhưng nó sẽ không trả lại bất cứ điều gì. Vì phép so sánh NULL = NULL không đánh giá là True.

Để yêu cầu trả về kết quả mong đợi, hãy viết lại:

CHỌN "Không thanh toán" làm thuộc tính, VALUE(Document.Payment.EmptyLink) làm tài liệu NƠI thanh toán; ///////////////////////////////////////////////////////////////// // /////////////////////////// CHỌN Client.Link AS Client, ISNULL(Payment.Link, VALUE(Document.Payment.EmptyLink )) LÀM THẾ NÀO Thanh toán PUT tClientThanh toán TỪ Directory.Khách hàng NHƯ Khách hàng TRÁI Tài liệu KẾT NỐI.Thanh toán NHƯ Thanh toán CỦA Khách hàng.Liên kết = Thanh toán.Cổ đông; ////////////////////////////////////////////// /// ////////////////////////// CHỌN tClientPayment.Client TỪ tClientPayment NHƯ tClientPayment NỘI BỘ THAM GIA tPayment NHƯ tTopay BY tClientPayment.Payment = Tài liệu tPayment.

Bây giờ, trong bảng tạm thời thứ hai, chúng tôi đã chỉ ra rằng nếu trường “Thanh toán” là NULL thì trường này = một liên kết trống đến chứng từ thanh toán. Trong bảng đầu tiên, chúng tôi cũng thay thế NULL bằng một tham chiếu trống. Bây giờ kết nối liên quan đến các trường không phải NULL và yêu cầu sẽ trả về kết quả mong đợi.

Tất cả các yêu cầu trong bài viết phản ánh các tình huống mà tôi muốn xem xét và không có gì hơn. VỀ Chúng có thể không bị ảo tưởng hoặc kém tối ưu, điều chính yếu là chúng phản ánh bản chất của ví dụ.

13. Một tính năng không có giấy tờ của thiết kế "LỰA CHỌN KHI...THÌ...KẾT THÚC".

Trong trường hợp cần mô tả cấu trúc “Điều kiện” trong yêu cầu, chúng tôi sử dụng cú pháp tiêu chuẩn:

CHỌN LỰA CHỌN KHI Users.Name = "Vasya Pupkin" SAU ĐÓ "Nhân viên yêu thích của chúng tôi" ELSE "Chúng tôi không biết điều này" KẾT THÚC NHƯ Trường 1 TỪ Thư mục.Người dùng NHƯ Người dùng

Nhưng điều gì sẽ xảy ra nếu, chẳng hạn, chúng ta cần lấy tên của tháng trong một yêu cầu? Viết một cấu trúc khổng lồ trong một yêu cầu là điều xấu và tốn thời gian, vì vậy hình thức viết ở trên có thể giúp chúng ta:

CHỌN THÁNG(US_CalculationConsumption_TurnoverSchedule.CalculationPeriod) KHI 1 THÌ "Tháng 1" KHI 2 THÌ "Tháng 2" KHI 3 THÌ "Tháng 3" KHI 4 THÌ "Tháng 4" KHI 5 THÌ "Tháng 5" KHI 6 THÌ "Tháng 6" KHI 7 THÌ "Tháng 7" KHI 8 THÌ "Tháng 8" KHI 9 THÌ "Tháng 9" KHI 10 THÌ "Tháng 10" KHI 11 THÌ "Tháng 11" KHI 12 THÌ "Tháng 12" KẾT THÚC NHƯ MỘT THÁNG

Bây giờ thiết kế trông bớt rườm rà và dễ hiểu hơn.

14. Thực hiện hàng loạt yêu cầu.


Để không nhân lên các yêu cầu, bạn có thể tạo một yêu cầu lớn, chia nó thành các gói và làm việc với nó.
Ví dụ: tôi cần lấy các trường sau từ thư mục "Người dùng": "Ngày sinh" và các vai trò có sẵn cho mỗi người dùng. tải phần này lên các phần dạng bảng khác nhau trên biểu mẫu. Tất nhiên, bạn có thể thực hiện việc này trong một yêu cầu, sau đó bạn sẽ phải lặp qua các bản ghi hoặc thu gọn chúng hoặc bạn có thể làm điều này:

CHỌN Người dùng.Liên kết NHƯ Tên đầy đủ, Người dùng.Ngày sinh, Người dùng.Role PUT vtUsers TỪ Thư mục.Người dùng NHƯ Người dùng; ///////////////////////////////////////////////////////////////// // ////////////////////////// CHỌN tueUsers.Tên đầy đủ, tueUsers.Ngày sinh TỪ tueUsers NHƯ tueUsers NHÓM THEO tueUsers.tên đầy đủ, tueUsers . Ngày sinh; ///////////////////////////////////////////////////////////////// // ////////////////////////// CHỌN wUsers.Tên đầy đủ, wUsers.Role TỪ wUsers NHƯ nhóm wUsers THEO wUsers.Tên đầy đủ, wUsers. ngày sinh

tPackage = Yêu cầu.ExecutePackage();

TP_BirthDate = tPackage.Upload();
TP_Roles = tPackage.Unload();

Như chúng ta có thể thấy, truy vấn có thể được thực hiện theo đợt và kết quả có thể được xử lý dưới dạng một mảng. Trong một số trường hợp nó rất thuận tiện.

15. Điều kiện trong yêu cầu batch

Ví dụ: chúng tôi có một yêu cầu hàng loạt, trong đó đầu tiên chúng tôi nhận được các trường: “Tên, Ngày sinh, Mã” từ thư mục “Người dùng” và muốn nhận các bản ghi có điều kiện cho các trường này từ thư mục “Cá nhân”.

CHỌN Người dùng.Individual.Name NHƯ Tên, Người dùng.Cá nhân.Ngày sinh NHƯ Ngày sinh, Người dùng.Individual.Code NHƯ Mã NƠI vtUsers TỪ Thư mục.Người dùng NHƯ Người dùng; ///////////////////////////////////////////////////////////////// // ////////////////////////// CHỌN Cá nhân LÀ Cá nhân TỪ Thư mục.

Bạn có thể áp đặt các điều kiện như thế này:

WHERE Personals.Code IN (SELECT tueUsers.Code FROM tueUsers) VÀ Personals.Name IN (SELECT tueUsers.Code FROM tueUsers) VÀ Personals.BirthDate IN (SELECT tueUsers.DateBirth FROM tueUsers)

Và bạn có thể làm điều đó như thế này:

WHERE (Cá nhân.Mã, Cá nhân.Tên, Cá nhân.Ngày sinh) IN (CHỌN tueUsers.Code, tueUsers.Name, tueUsers.Date of Birth FROM tueUsers)

Hơn nữa, cần phải duy trì trật tự.

16. Gọi trình tạo truy vấn cho “điều kiện” trong yêu cầu hàng loạt

Khi cần áp đặt một điều kiện, như trong ví dụ trên, bạn có thể quên tên trường này hoặc trường kia trong bảng ảo.
Ví dụ: bạn cần áp đặt một điều kiện cho trường "Ngày sinh" và trong bảng ảo, trường này được gọi là "Ngày sinh của người nợ" và nếu bạn quên tên, bạn sẽ phải thoát khỏi việc chỉnh sửa điều kiện mà không có lưu và nhìn vào tên của trường. Để tránh điều này, bạn có thể sử dụng kỹ thuật sau.

Cần đặt dấu ngoặc sau Cấu trúc “B” và chừa một khoảng trống (khoảng trắng) giữa các dấu ngoặc, chọn khoảng trống này và gọi hàm tạo truy vấn. Người thiết kế sẽ có quyền truy cập vào tất cả các bảng của truy vấn hàng loạt. Kỹ thuật này hoạt động cả trên bảng đăng ký ảo và trên tab “Điều kiện”. Trong trường hợp sau, bạn cần đánh dấu vào ô "P (điều kiện tùy ý)" và vào chế độ chỉnh sửa "F4".

Các truy vấn thường được đưa ra một cách nhanh chóng và chúng chỉ nhằm mục đích minh họa các “kỹ thuật” mà tôi đang xem xét.

Tôi muốn xem xét việc sử dụng chỉ mục trong truy vấn nhưng đây là một chủ đề rất rộng. Tôi sẽ viết nó trong một bài viết riêng, hoặc tôi sẽ thêm nó vào đây sau.

cập nhật1. Điểm 11,12
cập nhật2. Điểm 13,14,15,16

Sách đã sử dụng:
Ngôn ngữ truy vấn "1C:Enterprise 8" - E.Yu. Khrustaleva
Phát triển chuyên môn trong hệ thống 1C:Enterprise 8."

Nếu ấn phẩm của tôi hữu ích với bạn, đừng quên cho nó một điểm cộng :-)

Đây là một phiếu tự đánh giá cho tất cả các nhiệm vụ trong bộ sưu tập(một trang chứa các liên kết đến các chủ đề diễn đàn cho từng nhiệm vụ)
http://chistov.spb.ru/forum/16-969-1

Chà, bây giờ là những diễn biến và ghi chú mà tôi đã tạo trong quá trình chuẩn bị.
Mình sẽ cố gắng lặp lại ít nhất có thể với 2 điều kể trên cuối cùngấn phẩm.

Vậy hãy bắt đầu:


Nếu bạn thực hiện nó từ xa, bạn sẽ có hai đối tượng trên màn hình của mình khi kết thúc bài kiểm tra:

1. Tải lên cơ sở thông tin cuối cùng (file dt)
2. Ghi chú giải thích

Không nên có gì khác, không có bản sao trung gian, v.v.

Hãy chắc chắn để viết một ghi chú giải thích!
Trong trường hợp một nhiệm vụ được xây dựng mơ hồ, hãy nhớ viết vào đó rằng bạn đã chọn chính xác phương án giải pháp như vậy và như vậy.
Ngoài ra, ở những vị trí quan trọng trong mã, tốt hơn là bạn nên để lại những nhận xét ngắn gọn, không quá cuồng tín, nhưng ở những chỗ mà giám khảo có thể đặt câu hỏi thì tốt hơn là nên viết.

Nhưng bạn sẽ được thông báo về điều này trong hướng dẫn mà bạn sẽ được đọc trước kỳ thi.
Biết trước thì tốt hơn)


Sử dụng ký tự dấu và trong truy vấn.

Đôi khi, việc gõ từ bàn phím bổ sung sẽ nhanh hơn việc chuyển đổi bố cục qua lại, tiết kiệm thời gian
& = Alt+38

*************************************************************************************************
Sử dụng TimePoint() trong Truy vấn

Trong các truy vấn về sổ đăng ký tích lũy và kế toán, không cần thiết phải sử dụng ngày lập tài liệu làm tham số bảng (chu kỳ) ảo mà là tham số Moment, được xác định trong mã như sau:

Khoảnh khắc = ?(Chế độ chuyển = Chế độ đăng tài liệu. Hoạt động, không xác định, khoảnh khắc thời gian());

*************************************************************************************************
Khi tạo ra các chuyển động của tài liệu theo đăng ký, ngay từ đầu quy trình xử lý đăng tải, cần phải xóa các chuyển động của tài liệu hiện tại theo đăng ký.

Mã là:

Phong trào.RegisterName.Write = Đúng; Phong trào.RegisterName.Clear();

Có thể trong quá trình này sẽ cần phải phân tích các bản ghi từ sổ đăng ký này.
Vì vậy, để khi phân tích các bản ghi hiện tại (bản cũ, trước khi tài liệu được thay đổi) chắc chắn chúng không có trong mẫu, bạn có thể thêm một dòng nữa vào hai dòng trên:

Movement.RegisterName.Write();

Hoặc, khi phân tích hồ sơ, hãy chỉ ra rõ ràng ranh giới không bao gồm thời điểm của tài liệu hiện tại.

Nhưng ở mọi nơi tôi chỉ đơn giản chỉ ra cách xây dựng ba dòng này:

Phong trào.RegisterName.Write = Đúng; Phong trào.RegisterName.Clear(); Movement.RegisterName.Write();

*************************************************************************************************
Có hai cách để chặn dữ liệu, việc lựa chọn giữa chúng phụ thuộc vào phương pháp được sử dụng - cũ hay mới:

1) Chặn có kiểm soát thông thường, phương pháp xử lý tài liệu cũ (Đối tượng Chặn dữ liệu)

Đặt nếu số dư được kiểm tra trước và sau đó được xóa.
Trong trường hợp chúng ta cần có một số thông tin từ sổ đăng ký để hình thành một phong trào.


Ví dụ:

Trong tài liệu - số lượng, trong sổ đăng ký - số lượng và số tiền (chi phí)
Vì vậy, chúng tôi biết số lượng hàng hóa trong tài liệu - chúng tôi ghi giảm bao nhiêu, nhưng chi phí - thì không.
Chúng ta chỉ có thể tìm ra từ sổ đăng ký, nhưng để đảm bảo không ai thay đổi sổ đăng ký từ thời điểm nhận số dư đến thời điểm ghi nhận chuyển động, chúng ta cần khóa sổ đăng ký ngay cả trước khi đọc số dư.
Vì vậy, trong trường hợp này, đối tượng Khóa dữ liệu được sử dụng. Và khi tạo nó, sẽ chính xác hơn nếu chỉ ra kích thước nào chúng tôi đang chặn thanh ghi (ví dụ: trong trường hợp của chúng tôi - chỉ theo mục được chỉ định trong tài liệu) - để không có khóa không cần thiết và người dùng khác có thể bán cái khác mục.


1. Đặt khóa bằng đối tượng Data Lock
2. Đọc phần còn lại
3. Chúng tôi kiểm tra khả năng xóa nợ
4. Chúng tôi tạo ra các phong trào, chẳng hạn như xóa bỏ hàng hóa
5. Sau khi đăng tài liệu, việc chặn sẽ tự động được gỡ bỏ (việc chặn có hiệu lực như một phần của giao dịch đăng và được hệ thống tự động xóa). Tức là không cần phải mở khóa đối tượng một cách đặc biệt.

2) Phương pháp xử lý hồ sơ mới (sử dụng thuộc tính LockForChange = True)

Nó được sử dụng nếu chúng ta không cần thông tin từ sổ đăng ký để hình thành các chuyển động và chúng ta có thể kiểm tra xem liệu chúng ta có bị âm khi xóa sổ hay không nếu sau khi ghi lại, chúng ta nhìn vào số dư trong sổ đăng ký và thấy rằng có số âm . Trong trường hợp này, chúng tôi sẽ hiểu rằng chúng tôi đã xóa sổ quá nhiều và sẽ hủy hoạt động xóa sổ.

Ví dụ:
Hãy xem xét hoạt động bán một sản phẩm.
Trong tài liệu - số lượng, trong sổ đăng ký - chỉ số lượng
Vì vậy, chúng tôi biết số lượng hàng hóa từ tài liệu.
Chúng tôi hình thành các chuyển động với số lượng quy định trong tài liệu và ghi lại chúng. Tiếp theo, chúng tôi đọc sổ đăng ký, xem số dư và phân tích xem có số âm nào không. Nếu có, hiển thị lỗi và đặt Từ chối = Đúng.

Tức là trình tự sẽ như thế này:
1. Để di chuyển qua thanh ghi, đặt thuộc tính BlockForChange = True
2. Chúng tôi tạo phong trào - xóa hàng
3. Ghi lại chuyển động
4. Đọc sổ đăng ký và đảm bảo không có số dư âm. Nếu có thì họ xóa phần thừa, nếu không thì mọi chuyện vẫn ổn.

Vì vậy, trong trường hợp này, không cần chỉ ra kích thước nào chúng ta cần chặn thanh ghi.
Chúng tôi chỉ cần đặt thuộc tính BlockForChange thành True trước khi ghi lại chuyển động của mình, hình thành chuyển động và ghi lại.
Bản thân hệ thống sẽ chặn sổ đăng ký tại thời điểm ghi theo các phép đo cần thiết, sau khi phân tích những gì chúng tôi đã ghi.
Sau khi hoàn thành, việc chặn sẽ được gỡ bỏ.

Tùy chọn này (tùy chọn thứ hai) đơn giản hơn, nó được gọi là “phương pháp xử lý tài liệu mới” và 1C khuyến nghị sử dụng tùy chọn này nếu có thể và trừ điểm nếu sử dụng tùy chọn đầu tiên, nhưng trong một số trường hợp, đơn giản là không thể áp dụng tùy chọn này và tùy chọn đầu tiên có đối tượng Khóa dữ liệu được sử dụng (xem ví dụ trên).

Tôi cũng lưu ý rằng bất kể phương pháp đã chọn là gì, các bộ máy đều phải được làm sạch trước khi làm việc với chúng (xem lời khuyên trước đó)

*************************************************************************************************
Chặn dữ liệu (phương pháp chặn số 1 từ mô tả ở trên)

Cần phải khóa có kiểm soát khi dữ liệu được đọc và chuyển động được thực hiện dựa trên dữ liệu này
Cách nhanh nhất để lấy mã khóa được quản lý là nhập “Khóa dữ liệu”, gọi Trợ lý cú pháp và chỉ cần sao chép mã mẫu từ đó. Sau đó, chỉ cần thay đổi nó thành tên đăng ký và kích thước của bạn.

Nó trông giống như thế này:

Khóa = NewDataLock; Phần tử khóa = Locking.Add("Đăng ký tích lũy.GoodsInWarehouses"); LockElement.Mode = DataLockMode.Exclusive; BlockingElement.DataSource = PM; Khóa Element.UseFromDataSource("Danh pháp", "Danh pháp"); Khóa.Lock();

*************************************************************************************************
Tốt hơn nên gọi phần dạng bảng của tài liệu một cách đơn giản là “TC”

Chỉ có một phần dạng bảng trong 99% tài liệu. Tên thống nhất như vậy cho các phần dạng bảng sẽ giúp tiết kiệm thời gian rất nhiều, vì:
1) Rất ngắn - viết nhanh
2) Tất cả các tài liệu đều giống nhau, bạn không cần phải nhớ tên của nó khi viết mã

*************************************************************************************************
Kết quả truy vấn phải được kiểm tra tính trống trước khi tìm nạp hoặc tải lên đặc tả kỹ thuật.

Nói chung, tôi đã sử dụng lấy mẫu trong tất cả các nhiệm vụ.

Việc lấy mẫu tối ưu hơn cho hệ thống về mặt hiệu suất, vì nó chỉ được “làm sắc nét” để đọc dữ liệu (không giống như TK).

Nhưng trong mọi trường hợp, trước phương thức Select(), tốt hơn hết bạn nên kiểm tra kết quả truy vấn xem có trống không, điều này sẽ làm giảm tải cho hệ thống hơn nữa.

Kết quả = Query.Run(); Nếu không phải Result.Empty() thì chọn = Result.Select(TravelQueryResult.ByGrouping); ... EndIf;

Và trong trường hợp chúng ta chỉ cần nhận được một giá trị từ yêu cầu
(ví dụ: chỉ áp dụng phương pháp xóa sổ theo chế độ kế toán thiết lập cho năm nay):

Kết quả = Query.Run(); Nếu không phải Result.Empty() thì chọn = Result.Select(); Lựa chọn.Next(); Phương pháp ghi giảm chi phí = Phương pháp ghi giảm chi phí mẫu; endIf;

*************************************************************************************************
Tài liệu “Vận hành” cho một công việc kế toán

Cần phải tạo một tài liệu Vận hành cho các nhiệm vụ kế toán.

Chúng tôi vô hiệu hóa hoàn toàn việc đăng bài cho nó (trong thuộc tính “Đăng = Từ chối”), cho biết rằng nó thực hiện các chuyển động trong sổ đăng ký kế toán và kéo các chuyển động đó vào biểu mẫu.

*************************************************************************************************
Xử lý hồ sơ nhanh chóng:

Cần phải bao gồm:
Trong hoạt động và kế toán. kế toán chứng từ phải được kích hoạt (ngoại trừ tài liệu “Hoạt động”, xem bên dưới).

Cần phải tắt:
trong các nhiệm vụ tính toán, nó không có ý nghĩa đối với một tài liệu trả lương.

Đối với tài liệu "Hoạt động", việc đăng bài phải bị vô hiệu hóa hoàn toàn (trong thuộc tính tài liệu "Đăng = Cấm"),
vì anh ta viết chỉ đơn giản là ghi dữ liệu trực tiếp vào sổ đăng ký khi viết.

*************************************************************************************************
Điều kiện trong yêu cầu có dạng "Hoặc danh pháp được chỉ định hoặc bất kỳ danh pháp nào, nếu không được chỉ định"

Trong truy vấn, tác vụ sau sẽ xảy ra: ví dụ: bạn cần chọn tài liệu có danh pháp được chỉ định hoặc tất cả tài liệu nếu danh pháp không được chỉ định.
Nó được giải quyết bằng điều kiện sau trong chính yêu cầu:

Danh pháp = &Danh pháp HOẶC &Danh pháp = Giá trị(Directory.Nomenclature.EmptyLink)

Nhưng sẽ tối ưu và chính xác hơn nếu chuyển đổi điều kiện này (cảm ơn yukon):


Yêu cầu.Text = Yêu cầu.Text + "Danh pháp WHERE = &Danh pháp";

endIf;

Với sự ra đời của mô hình đối tượng truy vấn trong 8.3.5, có thể thêm một điều kiện an toàn hơn:

Nếu ValueFilled(Danh pháp) thì
Query1.Selection.Add("Item = &Danh pháp");
Request.SetParameter("Danh pháp", Danh pháp);
endIf;

*************************************************************************************************
Nối các bảng trong truy vấn:

Tổng số bản ghi không phụ thuộc vào việc trường của bảng đã nối có được hiển thị hay không mà chỉ phụ thuộc vào các mối quan hệ được định cấu hình.
Tức là trường của bảng đính kèm có thể không được hiển thị.

Nếu bạn muốn đính kèm một bảng mà không có bất kỳ điều kiện nào thì trên tab điều kiện chỉ cần viết điều kiện “TRUE”.
Trong trường hợp này, bảng sẽ được nối chính xác.

*************************************************************************************************
Sử dụng sơ đồ các loại đặc tính (PVC):

1. Dùng làm cơ chế mô tả đặc điểm của sự vật.

1.1. Chúng tôi tạo ra PVC. Đây sẽ là Loại đặc điểm (ví dụ: màu sắc, kích thước, tốc độ tối đa, v.v.). Trong cài đặt, chọn tất cả các loại giá trị đặc tính có thể có và nếu cần, hãy tạo đối tượng từ điểm 1.2 và cũng chỉ ra đối tượng đó trong cài đặt.

1.2. Đối với các giá trị bổ sung của PVC, chúng tôi tạo một thư mục phụ Các giá trị đặc tính bổ sung (hoặc đơn giản là Giá trị đặc tính).
Nó sẽ lưu trữ các đặc điểm nếu chúng không có trong thư mục hiện có. Chúng tôi có thể không tạo nó nếu tất cả các đặc điểm chúng tôi cần đều có trong các thư mục hiện có hoặc những giá trị này có thể được biểu thị bằng các kiểu dữ liệu cơ bản. Trong cài đặt PVC, chúng tôi chỉ ra rằng thư mục này sẽ được sử dụng cho các mục đích bổ sung. các giá trị đặc tính.

1.3. Chúng tôi tạo một sổ đăng ký thông tin, thực sự kết nối ba đối tượng:
- Đối tượng mà chúng ta kết nối cơ chế đặc tính
- Đặc điểm loại (loại PVC)
- Giá trị đặc tính (loại - đặc tính, đây là loại mới xuất hiện trong hệ thống sau khi PVC được tạo ra
và mô tả tất cả các loại dữ liệu có thể có mà một giá trị đặc trưng có thể lấy).
Trong sổ đăng ký thông tin, chúng tôi chỉ ra rằng Loại Đặc tính là chủ sở hữu của Giá trị Đặc tính (liên kết đến tham số lựa chọn), cũng như kết nối loại cho Giá trị Đặc tính, một lần nữa từ Loại Đặc tính.

Một tính năng khác là đối với mỗi loại đặc tính được tạo, bạn có thể chỉ định loại giá trị đặc tính, nếu bạn không cần tất cả các loại có thể để mô tả giá trị của đặc tính này.

2. Sử dụng nhựa PVC tạo cơ chế subconto cho sổ kế toán .

2.1. Chúng tôi tạo ra các loại PVCSubconto.

2.2. Chúng tôi tạo một thư mục phụ ValuesSubConto (cũng như với các đặc điểm, nó sẽ chứa các giá trị subconto nếu không có giá trị đó trong các thư mục khác).

2.3. Giao tiếp được thực hiện bằng cách sử dụng biểu đồ tài khoản.

*************************************************************************************************
Nguồn đăng ký kế toán:

Số tiền - bảng cân đối kế toán,
Số lượng - ngoại bảng và gắn với đặc điểm kế toán Định lượng

*************************************************************************************************
Bảng đăng ký kế toán ảo:

Doanh thu: doanh thu của một tài khoản
Doanh thuDtKt: doanh thu giữa hai tài khoản bất kỳ, nghĩa là tất cả các giao dịch giống nhau trong kỳ.

*************************************************************************************************
Kế toán tiền tệ trên sổ kế toán - cách thực hiện:

Chúng tôi tạo thuộc tính kế toán “tiền tệ” trong biểu đồ tài khoản.
Trong sổ đăng ký kế toán, chúng tôi tạo thêm:
- Thứ nguyên tiền tệ (cấm giá trị trống, ngoại bảng, thuộc tính kế toán - tiền tệ)
- tài nguyên Số lượng tiền tệ (bảng ngoại cân, thuộc tính kế toán - tiền tệ, nó sẽ lưu trữ số tiền bằng tiền tệ, tức là 100 đô la chẳng hạn)
Tất cả.

Do đó cấu trúc thanh ghi là:

Đo:
- Tiền tệ
Tài nguyên
- Số lượng
- Số tiền (số tiền tính bằng rúp)
- Số tiền tệ (số tiền tính bằng tiền)

Do đó, kế toán tiền tệ chỉ là sự cải tiến của kế toán thông thường ở Cộng hòa Belarus, ví dụ như nó không làm thay đổi bản chất của Nguồn lực.
(ở đó, như thường lệ, số tiền được tính bằng rúp, bất kể tài khoản có bằng ngoại tệ hay không).
Và nếu tính năng Kế toán tiền tệ bị tắt cho tài khoản thì đây là cấu trúc thông thường của Cộng hòa Belarus (tài nguyên - chỉ số lượng và số tiền).

*************************************************************************************************
Khi thiết lập các tham số của bảng ảo để có được một phần của bảng sau, chúng tôi áp đặt các điều kiện về thứ nguyên chứ không phải về tài nguyên.

Nếu không, chúng ta sẽ không nhận được một phần của những cái mới nhất mà là bản ghi cuối cùng với giá trị tài nguyên đã chỉ định - nó có thể không phải là bản ghi cuối cùng trong tập hợp các thứ nguyên

*************************************************************************************************
Ý nghĩa của tài nguyên và chi tiết trong sổ đăng ký tính toán

Trong các thanh ghi tính toán, việc tạo một tài nguyên giúp có thể nhận được nó khi tính cơ số bằng thanh ghi này.
Và thậm chí theo tỷ lệ với khoảng thời gian nhất định, giá trị tài nguyên sẽ được tính toán lại (nếu khoảng thời gian cơ sở không trùng với chu kỳ đăng ký).

Và giá trị của thuộc tính chỉ có trong bảng thực của thanh ghi tính toán; nó không có trong bảng ảo.

*************************************************************************************************
Hộp kiểm "Cơ bản" trong thuộc tính của kích thước thanh ghi tính toán
Điều đó có nghĩa là cơ sở sẽ được lấy từ thứ nguyên này trong tương lai và phục vụ cho việc lập chỉ mục bổ sung các giá trị cho trường này.

*************************************************************************************************
Phân tích thời hạn hiệu lực của kỳ nghỉ theo tháng khi ghi lại các bộ mục đăng ký,
nếu kỳ nghỉ được chỉ định trong tài liệu ở một dòng trong vài tháng cùng một lúc trên một dòng:

Ngày bắt đầu của tháng hiện tại = Ngày bắt đầu của tháng(TexLineMainAccruals.ActionPeriodStart); CurrentMonthEndDate = EndMonth(TexLineMainAccruals.ActionPeriodStart); Tháng hiện tại = Ngày; Trong khiDateStartCurrentMonth<= НачалоМесяца(ТекСтрокаОсновныеНачисления.ПериодДействияКонец) Цикл Движение = Движения.ОсновныеНачисления.Добавить(); Движение.Сторно = Ложь; Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета; Движение.ПериодДействияНачало = Макс(ДатаНачалаТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияНачало); Движение.ПериодДействияКонец = КонецДня(Мин(ДатаОкончанияТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияКонец)); Движение.ПериодРегистрации = Дата; Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник; Движение.Подразделение = ТекСтрокаОсновныеНачисления.Подразделение; Движение.Сумма = 0; Движение.КоличествоДней = 0; Движение.График = ТекСтрокаОсновныеНачисления.График; Движение.Параметр = ТекСтрокаОсновныеНачисления.Параметр; Движение.БазовыйПериодНачало = НачалоМесяца(ДобавитьМесяц(Дата, -3)); Движение.БазовыйПериодКонец = КонецДня(КонецМесяца(ДобавитьМесяц(Дата, -1))); ДатаНачалаТекМесяца = НачалоМесяца(ДобавитьМесяц(ДатаНачалаТекМесяца, 1)); ДатаОкончанияТекМесяца = КонецМесяца(ДатаНачалаТекМесяца); КонецЦикла; КонецЕсли;

*************************************************************************************************
Xây dựng biểu đồ Gantt:

Chúng tôi đặt một phần tử thuộc loại “Biểu đồ Gantt” trên biểu mẫu, gọi nó là DG, sau đó tạo lệnh “Tạo” và viết nội dung sau vào mô-đun biểu mẫu:

&Thủ tục OnClient Tạo (Lệnh) TạoOnServer(); Kết thúc quy trình &Trên máy chủ Quy trình Tạo trên máy chủ() DG.Clear(); DG.Update = Sai; Yêu cầu = Yêu cầu mới("SELECT |BasicAccrualsActualActionPeriod.Employee, |BasicAccrualsActualActionPeriod.CalculationType, |BasicAccrualsActualActionPeriod.ActionPeriodStart AS ActionPeriodStart, |MainAccrualsActualActionPeriod.Peri odActionsEnd AS PeriodActionsEnd |FROM |Calculation Register.MainAccrual s.ActualPeriodActions NHƯ MainAccrualsActualPeriodActions |WHERE |MainAccrualsActualPeriodActions.PeriodActions GIỮA &Ngày bắt đầu VÀ &Ngày kết thúc "); Query.SetParameter("Ngày bắt đầu", Period.StartDate); request.SetParameter("EndDate", Period.EndDate); Chọn = Query.Run().Select(); Trong khi Selection.Next() Điểm vòng lặp = DG.SetPoint(Selection.Employee); Chuỗi = DG.SetSeries(Selection.CalculationType); Giá trị = DG.GetValue(Điểm, Chuỗi); Khoảng thời gian = Value.Add(); Khoảng thời gian.Start = Sample.PeriodActionStart; Interval.End = Sample.ActionPeriodEnd; Chu kỳ cuối; DG.Update = Đúng; Kết thúc thủ tục

Thực ra ở đây chỉ có đoạn mã trong vòng lặp là quan trọng đối với chúng ta, những thứ còn lại chỉ là phụ trợ, tôi chỉ đưa ra toàn bộ cách thực hiện nhiệm vụ phụ này.
Trong yêu cầu, điều quan trọng đối với chúng tôi là phải có nhân viên, hình thức thanh toán, ngày bắt đầu và ngày kết thúc của kỳ.
Thực ra code rất đơn giản, dễ nhớ, đừng lo lắng nếu nó có vẻ rườm rà

*************************************************************************************************
Xử lý các mục nhập “đảo ngược” trong các tác vụ tính toán:

Trong quy trình xử lý giao dịch (mô-đun đối tượng), chúng tôi hình thành tất cả các chuyển động và sau đó nếu có bản ghi trong các giai đoạn khác, chúng tôi sẽ nhận được chúng như thế này
(hệ thống tự động tạo chúng - giúp chúng tôi):

Bản ghi bổ sung = Movements.MainAccruals.GetAddition(); // Không cần ghi lại chuyển động để lấy phép cộng

Cho Mỗi Dòng Công Nghệ Từ Chu Kỳ Bổ Sung Bản Ghi
Record = Movements.MainAccruals.Add();
FillPropertyValues(Bản ghi, TechString);
Record.RegistrationPeriod = TechString.RegistrationPeriodReversal;
Record.ActionPeriodStart = TechString.ActionPeriodStartReverse;
Record.ActionPeriodEnd = TechString.ActionPeriodEndReversal;
Kết thúc chu kỳ

Và khi tính toán các bản ghi, hãy chèn kiểm tra:

Nếu TechMotion.Reversal thì
CurrentMovement.Sum = - CurrentMovement.Amount;
endIf;

*************************************************************************************************
Làm thế nào để xác định những gì được bao gồm trong các khoản dồn tích chính và những gì được bao gồm trong các khoản dồn tích bổ sung trong các nhiệm vụ tính toán.

Nhưng điều này không phải lúc nào cũng rõ ràng 100%; cũng có những trường hợp phức tạp hơn, mặc dù có khá nhiều trường hợp như vậy.
(ví dụ: tiền thưởng phụ thuộc vào số ngày làm việc trong tháng - đây là HE).

Các khoản phí cơ bản:
Nếu loại tính toán phụ thuộc vào lịch trình (nghĩa là đăng ký thông tin theo ngày dương lịch), thì nó đề cập đến các khoản phí chính.

Ví dụ OH:
- Lương
- Thứ được tính từ số ngày làm việc (và để làm được điều này, bạn cần sử dụng lịch trình): trong thời hạn hiệu lực (như tiền lương) hoặc trong thời gian cơ sở

Các khoản phí bổ sung:
Điều gì được coi là từ số tiền tích lũy hoặc thời gian LÀM VIỆC (chứ không phải định mức!), hoặc hoàn toàn không phụ thuộc - đây là phần bổ sung. dồn tích.

Đó là: các khoản tích lũy để tính toán mà tiêu chuẩn thời gian được sử dụng (cũng có thể là thực tế) là OH và đối với dữ liệu thực tế hoặc không cần gì cả là DN.

Hay nói cách khác:

Nếu VR sử dụng tiêu chuẩn thời gian thì phải bao gồm thời hạn hiệu lực cho VR.

*************************************************************************************************
Thêm khả năng mở phần trợ giúp tích hợp "Làm việc với sách tham khảo" ở dạng danh sách của thư mục "Danh pháp".

Chạy lệnh trên biểu mẫu:

&Trên máy khách
Trợ giúp thủ tục(Lệnh)
OpenHelp("v8help://1cv8/EnterprWorkingWithCatalogs");
Kết thúc thủ tục

Chúng ta xác định đường cắt như sau:
Đi tới thông tin trợ giúp của đối tượng cấu hình (trong bộ cấu hình), viết một từ, chọn nó, đi tới menu Thành phần/Liên kết và chọn phần mong muốn của Trợ giúp 1C, sau đó liên kết sẽ được chèn tự động. Nó có vẻ phức tạp, nhưng trong thực tế thì dễ dàng.

*************************************************************************************************
Thực hiện tương tác giữa các hình thức, ví dụ: lựa chọn:

1. Từ biểu mẫu hiện tại, hãy mở biểu mẫu mong muốn bằng phương thức “OpenForm()”, chuyển cấu trúc có các tham số làm tham số thứ hai (nếu cần). Tham số thứ ba có thể chuyển liên kết tới biểu mẫu này - ThisForm.

2. Ở biểu mẫu đã mở, trong trình xử lý “Khi CreatedOnServer()”, chúng ta có thể nắm bắt các tham số được truyền ở bước 1 thông qua “Parameters.[ParameterName]”. Bạn sẽ có thể truy cập được biểu mẫu đã bắt đầu mở biểu mẫu này thông qua mã định danh “Chủ sở hữu” (tất nhiên nếu nó được chỉ định ở bước 1).

Và quan trọng nhất là sẽ có sẵn chức năng xuất của biểu mẫu chủ sở hữu. Nghĩa là, chúng ta có thể gọi hàm xuất của biểu mẫu nguồn và chuyển nội dung nào đó vào đó làm tham số để xử lý lựa chọn. Và chức năng này sẽ điền những gì cần thiết ở dạng ban đầu. Chỉ có một lưu ý - bạn không thể chuyển bảng giá trị giữa các thủ tục máy khách, nhưng chúng tôi có thể đặt nó vào bộ lưu trữ tạm thời và chỉ cần chuyển địa chỉ VX, sau đó trích xuất nó từ VX.

*************************************************************************************************
Vòng đời của tham số biểu mẫu

Tất cả các tham số được chuyển sang biểu mẫu tại thời điểm mở biểu mẫu chỉ hiển thị trong quy trình “Khi CreateOnServer”.
Sau khi được tạo, tất cả các tham số sẽ bị hủy và không còn có sẵn trên biểu mẫu.
Ngoại lệ dành cho các tham số được khai báo trong trình chỉnh sửa biểu mẫu với thuộc tính “Tham số chính”.
Họ xác định tính duy nhất của hình thức.
Tham số này sẽ tồn tại miễn là biểu mẫu đó tồn tại.

*************************************************************************************************
Sử dụng giao diện Taxi

Trong quá trình phát triển, bạn có thể đặt giao diện được quản lý thông thường 8.2 trong thuộc tính cấu hình - điều này làm cho mọi thứ trở nên nhỏ gọn và quen thuộc hơn đáng kể.
Điều này đặc biệt đúng nếu bạn thuê từ xa - độ phân giải màn hình rất nhỏ và không thể làm gì với giao diện “taxi”.
Chỉ cần đừng quên đặt lại “Taxi” khi bạn hoàn tất!Nếu không giám khảo sẽ trừ điểm!

*************************************************************************************************

Tái bút: E Có các nhiệm vụ phụ tiêu chuẩn riêng biệt được sử dụng trong tất cả các nhiệm vụ và đó là những nhiệm vụ mà bạn cần có khả năng giải quyết (ví dụ: viết tắt theo đợt, sử dụng PVC (à, điều này thực sự hiếm) và các nhiệm vụ khác). Và trong tất cả các nhiệm vụ, chúng chỉ được lặp lại (ở đâu đó có một số nhiệm vụ phụ, ở nơi khác, chỉ ở những sự kết hợp khác nhau). Hơn nữa, từ lâu họ đã hứa sẽ phát hành một bộ sưu tập mới (nếu chưa có), trong đó sẽ có nhiều vấn đề hơn, tức là ghi nhớ các giải pháp cho từng vấn đề riêng lẻ cũng chẳng ích gì, bạn nên học cách giải quyết. giải quyết các nhiệm vụ tiêu chuẩn riêng lẻ thì bạn sẽ giải quyết được mọi vấn đề.

PSS: Các đồng nghiệp, nếu ai có thông tin bổ ích nào khác về việc chuẩn bị cho kỳ thi và vượt qua kỳ thi, vui lòng ghi vào phần bình luận và chúng tôi sẽ bổ sung vào bài viết.

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,
Tài khoản ngân hàng.Correspondent
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 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”. “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.
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 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. BẢN ĐẠI DIỆN THAM KHẢO được khuyến nghị sử dụng 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 (Bảng chi phí. Subconto1 AS Directory. Hạng mục chi 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. 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 chiếu
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Ó Hàng hóa còn lại.

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 full ở 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Ừ
Thư mục Đối tác NHƯ 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ệ AS 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ụ Danh mục 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
Danh mục bán hàng hóa và dịch vụ.

Truy vấn nhận tất cả các dòng có hàng hóa và tóm tắt chúng theo số lượng và 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ụ CÁCH Bán hàng hóa và dịch vụ.
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ụ Danh pháp AS Danh pháp,
Bán hàng hóa và dịch vụ Liên kết hàng hóa AS Document,
Bán hàng hóa và dịch vụ Hàng hóa Số lượng AS Số lượng,
Doanh số bán hàng hóa và dịch vụ Hàng hóa Số tiền.
TỪ
Tài liệu Bán hàng hóa và dịch vụ CÁCH Bán hàng hóa và dịch vụ.
SẮP XẾP THEO
Liên kết bán hàng hóa và dịch vụ.
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 dữ liệu từ nhiều bảng, chuyển đổi chúng thành dạng được yêu cầu.

CHỌN
Danh mục 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ứ có 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 truy vấn sẽ là: truy xuất dữ liệu, tạo bảng tạm thời hoặc 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 xét 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 người tham gia của các tổ chức (.
,
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 Người tham gia Số dư của Tổ chức.
TỪ
Sổ đăng ký thanh toán tích lũy với những người tham gia số dư của các tổ chức (,) CÁCH thanh toán lẫn nhau với những người tham gia số dư của các tổ chức.
Ở ĐÂU
Thanh toán lẫn nhau với những người tham gia Số dư của tổ chức Tổ chức = & Tổ chức.
VÀ Thanh toán lẫn nhau với Người tham gia Số dư của Tổ chức Cá nhân = &Cá nhân.

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 thuộc 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ản ghi Set.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, việc sử dụng truy vấn phụ trong điều kiện nối là không thể chấp nhận được; đ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ý, do đó, 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!