스토리지 시스템에 대해 지정된 빈도로 보고서를 생성합니다. 표준 매개변수 및 사용 기간 및 문제점

이 글에서는 DCS(Data Composition System)를 사용할 때 기간을 설정할 때의 특징과 일반 사용자와 1C 시스템의 기간 개념 차이로 인해 발생하는 문제에 대해 논의하고 이를 해결하는 방법을 제안합니다. .
DCS(데이터 구성 시스템)를 사용하여 개발된 대부분의 보고서에서는 사용자가 보고서 작성 기간을 입력해야 합니다. 일반적으로 ACS에서 기간 항목은 다음 구성을 사용하여 매개변수를 통해 구성됩니다. 그림 1마침표를 입력하는 이 방법은 "고전적"으로 간주되며 ITS 및 1C 개발에 관한 기타 문헌에 설명되어 있으므로 이를 기초로 삼겠습니다. 특정 기간 동안 상품 및 서비스 판매 문서를 모두 수신하는 간단한 요청을 예로 들어 보겠습니다. 그림 2이 보고서를 사용할 때 사용자는 매개변수를 통해 기간을 설정합니다. 그림 3모든 것이 올바른 것 같습니다... 하지만 작은 문제가 있습니다.

문제는 대다수의 사용자가 1C가 기간을 "이해"하는 것과 다르게 기간을 "이해"한다는 것입니다. 예:
1). 고려해 봅시다 그림 3
사용자 입장에서는 기간이 지정되지 않은 UNLIMITED, 즉 날짜 제한이 없는 모든 문서가 보고서에 포함되어야 합니다.
1C 시스템의 "관점에서" 매개변수 기간이 설정되고 ... 경계가 모두 01.01.0001과 동일하며 날짜가 비어 있는 문서만 보고서에 포함됩니다. 이는 실제로 단일 문서는 포함되지 않습니다.
2). 고려해 봅시다 그림 4
사용자의 관점에서 보고서에는 2010년 1월 28일 이후의 모든 문서가 포함되어야 합니다.
1C의 "관점에서" 2010년 1월 28일부터 0001년 1월 1일까지의 기간은 예외를 발생시킵니다.

물론 사용자가 보길 기대하는 문서가 보고서에 표시되지 않는 이유와 1C의 "관점"에서 기간이 어떻게 표시되는지 사용자에게 설명하려고 할 수 있지만 이는 감사할 일이 아니며 또한 잘못된 것입니다. 좋은 프로그램은 우선 사용자 친화적이어야 합니다. 프로그램은 사용자를 위해 존재하고 그 반대는 아니기 때문입니다. 따라서 사용자가 이해하는 기간을 이해하도록 1C를 "가르쳐야" 합니다. 즉,
1). 기간 시작 및 기간 종료가 지정되지 않음 -> 모든 문서.
2). 기간의 시작만 지정 –> 기간의 시작부터 모든 문서
삼). 또한, 기간 종료 >= 기간 시작을 확인하고, 이것이 사실이 아닌 경우에는 기간 종료가 지정되지 않은 것으로 가정합니다. 2).
위 내용을 바탕으로 종료 날짜 매개변수의 표현식은 다음과 같습니다.

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

기간 선택 디자인의 최종 형태는 다음과 같습니다. 그림 5

액세스 제어 시스템에 대한 보고서를 생성할 때 날짜를 수동으로 입력할 필요 없이 "연도"와 같은 표준 기간 목록에서 선택하기 위해 보고서 양식에 기간 선택을 표시해야 하는 경우가 많습니다. , “월”, “주” 등. Date 타입의 파라미터에는 “올해, 월 등의 시작”만 지정할 수 있고, “End”는 제공되지 않습니다.

문제는 데이터 유형 중 "표준 시작일" 유형만 사용할 수 있는데 "표준 종료일"도 사용하고 싶습니다.

이 문제를 해결하는 방법이 있습니다.

  1. 새 매개변수를 만들어 보겠습니다. 이름은 '기간'입니다.
  2. 이 매개변수를 "표준 기간" 유형으로 설정하십시오.
  3. 요청에 사용되는 "기간 시작" 및 "기간 종료" 매개변수의 "표현식" 필드에 " &기간.시작 날짜" 및 " &기간.종료 날짜'를 각각 선택합니다.

그러나 약간의 미묘함이 있습니다. 쿼리에 가상 테이블을 사용하면 보고서 작동이 중지되고 "뷰 처리 중 오류가 발생했습니다. 유형 불일치, 매개변수 번호..."와 같은 오류 메시지가 표시됩니다.

이를 방지하려면 모든 가상 테이블 매개변수를 제거해야 합니다.

그리고 “데이터 구성” 탭의 테이블에 추가하세요.

빠른 보고서 설정에 매개변수가 표시되도록 하려면 보고서 매개변수에 해당 플래그를 활성화해 보겠습니다.

이제 보고서 양식의 기간 선택은 다음과 같습니다.

하나의 쿼리 데이터 집합으로 보고서를 만들어 보겠습니다.

남은 창고에 있는 제품을 선택하세요. 창고, 물품창고에 남아있습니다. 명명법, 남은 창고에 있는 제품. Accumulation Register의 QuantityBalance입니다. 제품창고. 잔여물(&MyDate,) AS 제품InWarehousesRemains

이제 매개변수 탭으로 이동하여 시스템이 &MyDate 매개변수 외에 &Period 매개변수도 생성했는지 확인하겠습니다.
기간을 시각적으로 모니터링하기 위해 기본 보고서 양식을 만들고 데이터가 포함된 테이블 필드를 배치합니다. 설정 작성기.설정.데이터 매개변수

보고서를 저장하고 기업에서 열어 보겠습니다. 매개변수가 있는 테이블 필드에는 &Period 매개변수만 표시됩니다.

따라서 이 매개변수를 변경해도 원하는 결과를 얻을 수 없습니다.

&MyDate 매개변수를 사용할 수 없는 이유는 무엇입니까? 물론 매개변수 탭에서 확인란을 선택했기 때문입니다. 가용성 제한.

상자를 선택 취소합니다. 이제 사용 가능한 매개변수에서 두 가지를 모두 볼 수 있습니다. 보고서를 생성할 때만 보고서가 &MyDate가 아닌 &Period 매개변수에 반응하는 것을 볼 수 있습니다.

이 예에서 가장 간단한 작업은 요청의 &MyDate 매개변수 이름을 &Period로 바꾸고 원하는 결과를 얻는 것입니다. 그러나 &Period 매개변수가 이미 사용된 쿼리가 있거나 종교적 견해로 인해 이 매개변수 사용이 허용되지 않을 수도 있습니다. 어떤 경우에도 다음과 같이 문제를 해결할 수 있습니다.

남은 창고에 있는 제품을 선택하세요. 창고, 물품창고에 남아있습니다. 명명법, 남은 창고에 있는 제품. Accumulation Register의 QuantityBalance입니다. 제품창고. Remains((&MyDate) ,) AS 제품InWarehousesRemains

UPD사용자로부터 우우:

"표준"(시스템 추가) 매개변수를 사용할 때의 주요 문제점은 보고서에서 여러 가상 테이블을 사용할 때 이 매개변수가 정의되면 해당 값이 "자체" 테이블 대신 다른 모든 경우에 사용된다는 것입니다.

예를 들어 보겠습니다.

SELECT EmployeesSP.Employee, WorkersSP.ReasonChangesConditions, WorkersSP.Period, WorkersSPAnotherDate.Period AS Period2, WorkersSPAnotherDate.ReasonChangesStates AS ReasonChangesCondition2 FROM RegisterInformation.EmployeesOrganizations.SliceLast(&Period , Employee = &Employee ) AS Employees JV 왼쪽 연결정보 등록. 조직의 직원. 최신 조각(&OtherDate ,) AS EmployeesSPAnotherDate BY EmployeesSP.Employee = EmployeesSPAnotherDate.Employee

두 번째 하위 쿼리에서는 "표준" PERIOD 매개 변수의 값이 OtherDate 값이 아닌 조각 날짜 매개 변수로 사용됩니다.

이 "글리치"는 두 번째 하위 쿼리가 두 번째 데이터 세트로 출력되고 ACS를 사용하여 연결된 경우에도 관찰됩니다. 두 번째 요청에서 "ADDATE(&Period, MONTH, -1)"와 같은 표현식을 사용하는 옵션도 작동하지 않으며 월을 빼지 않습니다. 그러나 요청의 "Period" 매개변수 이름을 "FirstDate" 등으로 바꾸면 이 문제가 해결됩니다.

그런데 매출액 등을 얻는 데 사용되는 축적 및 회계 등록의 가상 테이블에서도 똑같은 문제가 관찰됩니다. 여기에 시스템은 "기간 시작" 및 "기간 종료" 매개변수를 추가합니다.
따라서 요청이 약간 더 복잡해지는 경우 가용성과 "표준 기간" 사용을 끄는 것이 좋습니다.

그럼 시작해 보겠습니다.

단순화를 위해 예제를 이해하기 위해 하나의 간단한 순환 누적 레지스터를 구축하겠습니다.

제 경우에는 "진행중인 회계 작업"이라는 누적 레지스터입니다.

예를 들어, 해당 매개변수를 엄격하게 표시합니다(액세스 제어 시스템에 매개변수를 소프트하게 부과하는 방식이 아님).

가상테이블의 빈도수는 "Record" 이므로 참고하시기 바랍니다.

그러나 위에서 언급했듯이 주기성 측면에서 기간이 필요하므로 다음과 같은 방법으로 "기간" 필드를 계산할 것을 제안합니다(별로 좋지는 않지만 더 나은 옵션을 본 적이 없습니다).

스크린샷에서 볼 수 있듯이 사용자가 양식에 지정하는 매개변수가 요청에 전달됩니다. "빈도" 열거 값 - 이 열거는 거의 모든 표준 솔루션에서 발견됩니다.

"매개변수" 탭에 사용 가능한 유형이 표시됩니다.

이 설정을 사용하면 모든 것이 아름답고 눈에 즐겁게 되도록 기간을 지정합니다.)

형식 자체는 다음과 같습니다.

월: DF="MMMM yyyy "y.""

요일: DF = dd.MM.yyyy

주: DF = """dd.MM.yyyy"의 주

분기: DF = ""분기" yyyy "y.""

연도: DF = "yyyy "y.""

10년: DF = """dd.MM.yyyy"를 사용한 10년

반년: DF = ""dd.MM.yyyy로부터 "반년""

그게 다야. 출력은 멋진 그림입니다.

액세스 제어 시스템에서 기간을 설정하는 일부 기능입니다.

DCS(데이터 구성 시스템)를 사용하여 개발된 대부분의 보고서에서는 사용자가 보고서 작성 기간을 입력해야 합니다.

일반적으로 ACS에서 기간 입력은 다음 구성을 사용하여 매개변수를 통해 구성됩니다. 이 기간 입력 방법은 "고전적"으로 간주됩니다. ITS 및 1C 개발에 관한 기타 문헌에 설명되어 있으므로 그것을 기초로 삼자. 특정 기간 동안 상품 및 서비스 판매 문서를 모두 수신하는 간단한 요청을 예로 들어 보겠습니다.

이 보고서를 사용할 때 사용자는 매개변수를 통해 기간을 설정합니다. 모든 것이 올바른 것 같지만... 그러나 작은 문제가 있습니다.

문제는 대다수의 사용자가 1C가 기간을 "이해"하는 것과 다르게 기간을 "이해"한다는 것입니다. 예:

사용자 입장에서는 기간이 지정되지 않은 UNLIMITED, 즉 날짜 제한이 없는 모든 문서가 보고서에 포함되어야 합니다.

1C 시스템의 "관점에서" 매개변수 기간이 설정되고 ... 경계가 모두 01.01.0001과 동일하며 날짜가 비어 있는 문서만 보고서에 포함됩니다. 이는 실제로 단일 문서는 포함되지 않습니다.

사용자의 관점에서 보고서에는 2010년 1월 28일 이후의 모든 문서가 포함되어야 합니다.

1C의 "관점"에서 2010년 1월 28일부터 0001년 1월 1일까지의 기간은 예외를 발생시킵니다.

물론 사용자가 보길 기대하는 문서가 보고서에 표시되지 않는 이유와 1C의 "관점"에서 기간이 어떻게 표시되는지 사용자에게 설명하려고 할 수 있지만 이는 감사할 일이 아니며 또한 잘못된 것입니다. 좋은 프로그램은 우선 사용자 친화적이어야 합니다. 프로그램은 사용자를 위해 존재하고 그 반대는 아니기 때문입니다. 따라서 사용자가 이해하는 기간을 이해하도록 1C를 "가르쳐야" 합니다. 즉,

1). 기간 시작 및 기간 종료가 지정되지 않음 -> 모든 문서.

2). 기간의 시작만 지정 -> 기간의 시작부터 시작되는 모든 문서

삼). 또한, 기간 종료 >= 기간 시작을 확인하고, 이것이 사실이 아닌 경우에는 기간 종료가 지정되지 않은 것으로 가정합니다. 2).

위 내용을 바탕으로 종료 날짜 매개변수의 표현식은 다음과 같습니다.

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

그 다음에 날짜시간(3999,12,31)

언제 기간.종료 날짜<&Период.ДатаНачала

그 다음에 날짜시간(3999,12,31)날짜시간(3999,12,31,23,59,59)

기간.종료일(&F)

기간 선택 디자인의 최종 형태는 다음과 같습니다.

참고: 매개변수 설정을 위한 이 메커니즘은 이전 플랫폼 1C 8.1 및 8.2(및 해당 제어 하에 실행되는 구성)용입니다. 이전 버전의 1C 플랫폼에는 빈 매개변수를 제어하기 위한 메커니즘이 내장되어 있으며 메커니즘에 의존할 필요가 없습니다. 이 기사에 설명되어 있으며 일부 버전의 1C 플랫폼에서는 오류 및 잘못된 작동이 가능합니다.



 

다음 내용을 읽어보는 것이 도움이 될 수 있습니다.