1s 8.3 Giai đoạn báo cáo ACS. Thông số tiêu chuẩn & Thời gian và các vấn đề khi sử dụng

Khi tạo báo cáo trên hệ thống kiểm soát truy cập, thường cần hiển thị lựa chọn khoảng thời gian trên biểu mẫu báo cáo, do đó bạn không cần nhập ngày theo cách thủ công mà chọn từ danh sách các khoảng thời gian tiêu chuẩn, chẳng hạn như: “Năm” , “Tháng”, “Tuần”, v.v. Đối với các tham số thuộc loại Ngày, bạn chỉ có thể chỉ định “Đầu năm nay, tháng, v.v.”, nhưng không cung cấp “Kết thúc”.

Vấn đề là, trong số các loại dữ liệu, chỉ có loại “Ngày bắt đầu tiêu chuẩn”, nhưng tôi cũng muốn có “Ngày kết thúc tiêu chuẩn”.

Có một cách để giải quyết vấn đề này.

  1. Hãy tạo một Tham số mới, gọi nó là “Thời gian”
  2. Đặt tham số này thành loại “Thời gian chuẩn”
  3. Trong trường “Biểu thức” của tham số “Bắt đầu khoảng thời gian” và “Kết thúc khoảng thời gian” được sử dụng trong yêu cầu, hãy đặt biểu thức “ &Period.StartDate" và " &Thời gian.Ngày kết thúc” tương ứng.

Nhưng có một chút tinh tế. Nếu chúng tôi sử dụng bảng ảo trong truy vấn thì rất có thể báo cáo sẽ ngừng hoạt động và thông báo lỗi như “Lỗi xử lý chế độ xem, loại không khớp, số tham số…” sẽ được hiển thị.

Để tránh điều này, bạn cần xóa tất cả các tham số của bảng ảo.

Và thêm chúng vào các bảng trên tab “Thành phần dữ liệu”.

Để các tham số được hiển thị trong cài đặt báo cáo nhanh, hãy bật cờ tương ứng cho các tham số báo cáo.

Bây giờ việc lựa chọn khoảng thời gian trên biểu mẫu báo cáo trông như thế này.

Một số tính năng cài đặt thời gian trong hệ thống kiểm soát truy cập.

Hầu hết các báo cáo được phát triển bằng Hệ thống Thành phần Dữ liệu (DCS) đều yêu cầu người dùng nhập khoảng thời gian mà báo cáo sẽ được xây dựng.

Theo quy định, trong ACS, mục nhập kỳ được tổ chức thông qua các tham số, sử dụng cấu trúc sau, xem. Phương pháp nhập kỳ này được coi là “cổ điển”; nó được mô tả trong một bài viết về ITS và tài liệu khác dành cho sự phát triển trong 1C, vì vậy hãy lấy nó làm cơ sở. Hãy xem xét một ví dụ về một yêu cầu đơn giản nhận tất cả tài liệu Bán hàng hóa và dịch vụ trong một khoảng thời gian nhất định, xem

Khi sử dụng báo cáo này, người dùng thiết lập khoảng thời gian thông qua các tham số, xem Mọi thứ có vẻ đúng..., NHƯNG có một vấn đề nhỏ:

Vấn đề là đại đa số người dùng “hiểu” khoảng thời gian này khác với 1C “hiểu” nó, ví dụ:

Theo quan điểm của người dùng, khoảng thời gian không được chỉ định, tức là KHÔNG GIỚI HẠN, tức là TẤT CẢ các tài liệu không có giới hạn ngày tháng phải được đưa vào báo cáo.

“Từ quan điểm” của hệ thống 1C, tham số-chu kỳ được đặt và ... cả hai ranh giới của nó đều bằng 01.01.0001 và chỉ những tài liệu có ngày trống mới được đưa vào báo cáo, điều này trong thực tế có nghĩa là sẽ không có một tài liệu nào được đưa vào.

Theo quan điểm của người dùng, báo cáo phải bao gồm tất cả các tài liệu bắt đầu từ ngày 28/01/2010.

“Theo quan điểm” của 1C, khoảng thời gian 28/01/2010 - 01/01/0001 sẽ gây ra một ngoại lệ.

Tất nhiên, bạn có thể cố gắng giải thích cho người dùng lý do tại sao báo cáo không hiển thị các tài liệu mà họ mong muốn xem và khoảng thời gian đó được trình bày như thế nào theo “quan điểm” của 1C, nhưng đây là một nhiệm vụ bạc bẽo và nó cũng sai. Một chương trình tốt trước hết phải thân thiện với người dùng, vì chương trình tồn tại cho người dùng chứ không phải ngược lại, do đó bạn sẽ phải “dạy” 1C hiểu khoảng thời gian mà người dùng hiểu, cụ thể là:

1). Đầu kỳ và cuối kỳ không được chỉ định -> tất cả các tài liệu.

2). Chỉ xác định Ngày đầu kỳ -> tất cả các tài liệu bắt đầu từ Đầu kỳ

3). Ngoài ra, chúng tôi sẽ kiểm tra rằng Cuối kỳ >= Đầu kỳ và nếu điều này không đúng thì chúng tôi sẽ cho rằng Cuối kỳ không được chỉ định, tức là. 2).

Dựa trên những điều trên, biểu thức cho tham số Ngày kết thúc là:

KHI &Period.EndDate=DATETIME(1,1,1)

SAU ĐÓ NGÀYTIME(3999,12,31)

KHI &Thời gian.Ngày kết thúc<&Период.ДатаНачала

SAU ĐÓ NGÀYTIME(3999,12,31) NGÀYTIME(3999,12,31,23,59,59)

&Thời gian.Ngày kết thúc

Hình thức cuối cùng của thiết kế lựa chọn giai đoạn của chúng tôi được hiển thị trong

Lưu ý: cơ chế cài đặt tham số này dành cho các nền tảng cũ hơn 1C 8.1 và 8.2 (và các cấu hình đang chạy dưới sự kiểm soát của chúng); các phiên bản cũ hơn của nền tảng 1C có cơ chế tích hợp để kiểm soát các tham số trống và không cần phải sử dụng cơ chế này Được mô tả trong bài viết này, ngoài ra, trên một số phiên bản của nền tảng 1C, có thể xảy ra lỗi và thao tác không chính xác.

Vì vậy, hãy bắt đầu.

Để đơn giản, dễ hiểu về ví dụ, chúng ta sẽ xây dựng trên một thanh ghi tích lũy tuần hoàn đơn giản.

Trong trường hợp của tôi, đây là sổ đăng ký tích lũy "Kế toán công việc đang tiến hành".

Ví dụ: chúng tôi sẽ chỉ ra các tham số của nó một cách cứng nhắc (không thông qua việc áp đặt mềm các tham số trên hệ thống kiểm soát truy cập):

Xin lưu ý rằng tần suất của bảng ảo là “Ghi”.

Tuy nhiên, như đã lưu ý ở trên, chúng ta cần khoảng thời gian xét về mặt tính tuần hoàn, vì vậy tôi đề xuất tính trường “Thời kỳ” theo cách sau (không hay lắm, nhưng tôi chưa thấy tùy chọn nào tốt hơn):

Như có thể thấy từ ảnh chụp màn hình, một tham số được chuyển đến yêu cầu mà người dùng chỉ định trên biểu mẫu: Giá trị của bảng liệt kê "Tần số" - bảng liệt kê này được tìm thấy trong hầu hết các giải pháp tiêu chuẩn.

Chúng tôi sẽ chỉ ra các loại có sẵn của nó trên tab “Tham số”:

Với cài đặt này, chúng tôi định dạng chu kỳ của mình để mọi thứ đều đẹp và vừa mắt)

Dưới đây là các định dạng:

Tháng: DF="MMMM yyyy "y.""

Ngày: DF = dd.MM.yyyy

Tuần: DF = ""Tuần từ "dd.MM.yyyy"

Quý: DF = "đến "quý" yyyy "y.""

Năm: DF = "yyyy"y.""

Thập kỷ: DF = ""Thập kỷ với "dd.MM.yyyy"

Nửa năm: DF = ""Nửa năm kể từ" dd.MM.yyyy"

Đó là tất cả. Đầu ra là một bức tranh tuyệt vời:

Hãy tạo một báo cáo với một bộ dữ liệu truy vấn:

LỰA CHỌN SẢN PHẨM TẠI KHO Còn lại. Kho bãi, hàng hóaTrong kho còn lại. Danh pháp, sản phẩm còn lại trong kho. Số dư TỪ Đăng ký tích lũy. Sản phẩmTrong kho. Remains(&MyDate,) AS ProductsInWarehousesRemains

Bây giờ chúng ta hãy chuyển đến tab tham số và thấy rằng hệ thống, ngoài tham số &MyDate của chúng ta, cũng đã tạo tham số &Period.
Để theo dõi trực quan các khoảng thời gian, chúng tôi sẽ tạo một biểu mẫu báo cáo chính và đặt một trường bảng có dữ liệu trên đó: Cài đặt Composer.Settings.DataParameters

Hãy lưu báo cáo và mở nó trong doanh nghiệp. Trong trường bảng có tham số, chỉ tham số &Period được hiển thị:

Theo đó, mọi thay đổi về thông số này sẽ không cho kết quả như mong muốn.

Tại sao tham số &MyDate không khả dụng? Tất nhiên, vì trên tab tham số, anh ấy đã chọn hộp kiểm Giới hạn sẵn có.

Bỏ chọn hộp. Bây giờ chúng ta thấy cả hai trong các thông số có sẵn. Chỉ khi tạo báo cáo, chúng tôi mới thấy rằng báo cáo phản hồi với thông số &Period chứ không phải &MyDate.

Trong ví dụ này, điều đơn giản nhất cần làm là đổi tên tham số &MyDate thành &Period trong yêu cầu và đạt được kết quả mong muốn. Nhưng có thể bạn có một truy vấn trong đó tham số &Period đã được sử dụng hoặc quan điểm tôn giáo của bạn không cho phép bạn sử dụng tham số này, trong mọi trường hợp, bạn có thể giải quyết vấn đề như thế này:

LỰA CHỌN SẢN PHẨM TẠI KHO Còn lại. Kho bãi, hàng hóaTrong kho còn lại. Danh pháp, sản phẩm còn lại trong kho. Số dư TỪ Đăng ký tích lũy. Sản phẩmTrong kho. Remains((&MyDate) ,) AS ProductsInWarehousesRemains

CẬP NHẬT từ người dùng ù:

Vấn đề chính khi sử dụng tham số “tiêu chuẩn” (được hệ thống thêm) là khi sử dụng một số bảng ảo trong báo cáo, nếu tham số này được xác định, giá trị của nó sẽ được sử dụng trong tất cả các trường hợp khác thay vì bảng “riêng”.

Tôi sẽ cho bạn một ví dụ:

CHỌN Nhân viênSP.Employee, WorkersSP.ReasonChangesConditions, WorkersSP.Period, WorkersSPAnotherDate.Period NHƯ Period2, WorkersSPAnotherDate.ReasonChangesStates NHƯ ReasonChangesCondition2 TỪ RegisterInformation.EmployeesOrganizations.SliceLast(&Period , Nhân viên = &Employee ) NHƯ Nhân viên JV KẾT NỐI TRÁI Sổ đăng ký thông tin.Nhân viên của các tổ chức.Lát cắt mới nhất(&OtherDate ,) NHƯ Nhân viênSPAnotherDate BY Nhân viênSP.Employee = Nhân viênSPAnotherDate.Employee

Trong truy vấn con thứ hai, giá trị của tham số PERIOD “tiêu chuẩn” sẽ được sử dụng làm tham số ngày cắt, thay vì giá trị OtherDate.

“Trục trặc” này sẽ được quan sát thấy ngay cả khi truy vấn con thứ hai được xuất ra tập dữ liệu thứ hai và được liên kết bằng ACS. Tùy chọn sử dụng biểu thức như “ADDATE(&Period, MONTH, -1)” trong yêu cầu thứ hai cũng sẽ không hoạt động, tháng sẽ không bị trừ. Tuy nhiên, việc đổi tên tham số “Period” trong yêu cầu thành “FirstDate” chẳng hạn sẽ giải quyết được vấn đề này.

Nhân tiện, vấn đề tương tự cũng xảy ra với các bảng tích lũy và sổ đăng ký kế toán ảo, chẳng hạn như được sử dụng để thu được doanh thu. Ở đó hệ thống thêm các thông số “Bắt đầu kỳ” và “Cuối kỳ”.
Vì vậy, trong trường hợp các yêu cầu có độ phức tạp tăng lên một chút, việc tắt tính khả dụng và sử dụng “thời gian tiêu chuẩn” là điều hợp lý.

Bài viết này thảo luận về một số tính năng của việc thiết lập khoảng thời gian khi sử dụng Hệ thống cấu thành dữ liệu (DCS), các vấn đề phát sinh do sự khác biệt trong khái niệm khoảng thời gian giữa người dùng thông thường và hệ thống 1C, đồng thời gợi ý cách giải quyết chúng .
Hầu hết các báo cáo được phát triển bằng Hệ thống Thành phần Dữ liệu (DCS) đều yêu cầu người dùng nhập khoảng thời gian mà báo cáo sẽ được xây dựng. Theo quy định, trong ACS, mục nhập kỳ được tổ chức thông qua các tham số, sử dụng cấu trúc sau, xem. Hình 1 Phương pháp bước vào thời kỳ này được coi là “cổ điển”; nó được mô tả trong một bài viết về ITS và các tài liệu khác dành cho sự phát triển trong 1C, vì vậy hãy lấy nó làm cơ sở. Hãy xem xét một ví dụ về một yêu cầu đơn giản nhận tất cả tài liệu Bán hàng hóa và dịch vụ trong một khoảng thời gian nhất định, xem Hình 2 Khi sử dụng báo cáo này, người dùng đặt khoảng thời gian thông qua các tham số, xem. Hình 3 Mọi thứ có vẻ đúng... NHƯNG có một vấn đề nhỏ:

Vấn đề là đại đa số người dùng “hiểu” khoảng thời gian này khác với 1C “hiểu” nó, ví dụ:
1). Hãy xem xét Hình 3
Theo quan điểm của người dùng, khoảng thời gian không được chỉ định, tức là KHÔNG GIỚI HẠN, tức là TẤT CẢ các tài liệu không có giới hạn ngày tháng phải được đưa vào báo cáo.
“Từ quan điểm” của hệ thống 1C, tham số-chu kỳ được đặt và ... cả hai ranh giới của nó đều bằng 01.01.0001 và chỉ những tài liệu có ngày trống mới được đưa vào báo cáo, điều này trong thực tế có nghĩa là sẽ không có một tài liệu nào được đưa vào.
2). Hãy xem xét Hình 4
Theo quan điểm của người dùng, báo cáo phải bao gồm tất cả các tài liệu bắt đầu từ ngày 28/01/2010.
“Theo quan điểm” của 1C, khoảng thời gian 28/01/2010 – 01/01/0001 sẽ gây ra một ngoại lệ.

Tất nhiên, bạn có thể cố gắng giải thích cho người dùng lý do tại sao báo cáo không hiển thị các tài liệu mà họ mong muốn xem và khoảng thời gian đó được trình bày như thế nào theo “quan điểm” của 1C, nhưng đây là một nhiệm vụ bạc bẽo và nó cũng sai. Một chương trình tốt trước hết phải thân thiện với người dùng, vì chương trình tồn tại cho người dùng chứ không phải ngược lại, do đó bạn sẽ phải “dạy” 1C hiểu khoảng thời gian mà người dùng hiểu, cụ thể là:
1). Đầu kỳ và cuối kỳ không được chỉ định -> tất cả các tài liệu.
2). Chỉ xác định Ngày đầu kỳ -> tất cả các tài liệu bắt đầu từ Đầu kỳ
3). Ngoài ra, chúng tôi sẽ kiểm tra rằng Cuối kỳ >= Đầu kỳ và nếu điều này không đúng thì chúng tôi sẽ cho rằng Cuối kỳ không được chỉ định, tức là. 2).
Dựa trên những điều trên, biểu thức cho tham số Ngày kết thúc sẽ như sau:

CHỌN KHI &Period.EndDate=DATETIME(1,1,1) THEN DATETIME(3999,12,31,23,59,59) ELSE CHỌN KHI &Period.EndDate<&Период.ДатаНачала ТОГДА ДАТАВРЕМЯ(3999,12,31,23,59,59) ИНАЧЕ &Период.ДатаОкончания КОНЕЦ КОНЕЦ

Hình thức cuối cùng của thiết kế lựa chọn giai đoạn của chúng tôi được hiển thị trong Hình 5