Стандартен параметър & Период и проблеми при използване.

20.02.2024

И така, нека започнем.

За простота, разбирайки примера, ще изградим един прост циркулиращ регистър за натрупване.

В моя случай това е набирателният регистър "Осчетоводяване на незавършеното производство".

Например, ще посочим неговите параметри твърдо (а не чрез меко налагане на параметри върху системата за контрол на достъпа):

Моля, обърнете внимание, че честотата на виртуалната маса е „Запис“.

Но, както беше отбелязано по-горе, имаме нужда от периода по отношение на периодичността, така че предлагам да изчислим полето „Период“ по следния начин (не е много хубаво, но не съм виждал по-добри опции):

Както се вижда от екранната снимка, към заявката се предава параметър, който потребителят посочва във формуляра: Стойността на изброяването "Честота" - това изброяване се среща в почти всички стандартни решения.

Ще посочим наличните му типове в раздела „Параметри“:

С тази настройка форматираме цикъла си, така че всичко да е красиво и приятно за окото)

Ето и самите формати:

Месец: DF="MMMM yyyy "y.""

Ден: DF = дд.ММ.гггг

Седмица: DF = ""Седмица от "дд.ММ.гггг"

Квартал: DF = "до "квартал" yyyy "y.""

Година: DF = "yyyy "y.""

Десетилетие: DF = ""Десетилетие с "dd.MM.yyyy"

Половин година: DF = ""Половин година от" дд.ММ.гггг"

това е всичко Резултатът е прекрасна картина:

Нека създадем отчет с един набор от данни за заявка:

ИЗБЕРЕТЕ ПРОДУКТИ В СКЛАДОВЕ Остават. Склад, Стоки В Складове Остатъци. Номенклатура, Оставащи продукти в складове. QuantityBalance ОТ Натрупващ регистър. Продукти В Складове. Remains(&MyDate ,) AS ProductsInWarehousesRemains

Сега нека отидем в раздела с параметри и да видим, че системата, в допълнение към нашия параметър &MyDate, също е създала параметъра &Period.
За да наблюдаваме визуално периодите, ще създадем основна форма за отчет и ще поставим таблично поле с данни върху нея: Settings Composer.Settings.DataParameters

Нека запазим отчета и го отворим в предприятието. В полето на таблицата с параметри се показва само параметърът &Период:

Съответно всяка промяна в този параметър няма да даде желания резултат.

Защо параметърът &MyDate не е наличен? Разбира се, защото в раздела параметри той има отметка Ограничение на наличността.

Махнете отметката от квадратчето. Сега виждаме и двете в наличните параметри. Само при генериране на отчета ще видим, че отчетът реагира на параметъра &Period, а не на &MyDate.

В този пример най-простото нещо, което трябва да направите, е да преименувате параметъра &MyDate в заявката на &Period и да постигнете желания резултат. Но може би имате заявка, в която параметърът &Period вече е бил използван, или вашите религиозни възгледи не ви позволяват да използвате този параметър, във всеки случай можете да разрешите проблема по следния начин:

ИЗБЕРЕТЕ ПРОДУКТИ В СКЛАДОВЕ Остават. Склад, Стоки В Складове Остатъци. Номенклатура, Оставащи продукти в складове. QuantityBalance ОТ Натрупващ регистър. Продукти В Складове. Remains((&MyDate) ,) AS ProductsInWarehousesRemains

UPDот потребителя бу!:

Основният проблем при използване на „стандартни“ (добавени от системата) параметри е, че при използване на няколко виртуални таблици в отчет, ако този параметър е дефиниран, неговата стойност ще се използва във всички останали случаи вместо „собствените“.

Нека ви дам един пример:

ИЗБЕРЕТЕ EmployeesSP.Employee, WorkersSP.ReasonChangesState, WorkersSP.Period, WorkersSPAnotherDate.Period AS Period2, WorkersSPAnotherDate.ReasonChangesStates AS ReasonChangesState2 ОТ RegisterInformation.EmployeesOrganizations.SliceLast(&Period, Employee = &Employee) AS Work nikiSP ЛЯВА ВРЪЗКАРегистър на информацията.Служители на организации.Откъс от най-новите (&OtherDate ,) AS EmployeesSPAnotherDate BY EmployeesSP.Employee = EmployeesSPAnotherDate.Employee

Във втората подзаявка стойността на „стандартния“ параметър PERIOD ще се използва като параметър за дата на отрязък, а не стойността OtherDate.

Този „проблем“ ще бъде наблюдаван дори ако втората подзаявка е изведена към втория набор от данни и е свързана с помощта на ACS. Опцията, използваща израз като „ADDATE(&Period, MONTH, -1)“ във втората заявка също няма да работи, месецът няма да бъде изваден. Но преименуването на параметъра „Период“ в заявката например на „Първа дата“ решава този проблем.

Между другото, точно същият проблем се наблюдава и при виртуалните таблици за натрупване и счетоводни регистри, използвани за получаване например на оборот. Там системата добавя параметрите „Начало на периода” и „Край на периода”.
Така че в случай на заявки с дори леко повишена сложност, има смисъл да изключите наличността и използването на „стандартни периоди“.

Някои функции за настройка на периода в системата за контрол на достъпа.

Повечето отчети, които са разработени с помощта на система за съставяне на данни (DCS), изискват от потребителя да въведе периода, за който ще бъде съставен отчетът.

Като правило, в ACS, въвеждането на периоди се организира чрез параметри, като се използва следната конструкция, вижте Този метод на въвеждане на периоди се счита за „класически“ и е описан в статия за ITS и друга литература, посветена на развитието в 1C нека го вземем за основа. Нека разгледаме като пример проста заявка, която получава всички документи Продажби на стоки и услуги за даден период, вж.

Когато използвате този отчет, потребителят задава периода чрез параметрите, вижте, че всичко е правилно..., НО има малък проблем:

Работата е там, че по-голямата част от потребителите „разбират“ периода по различен начин, отколкото 1C го „разбира“, примери:

От гледна точка на потребителя периодът не е посочен, тоест НЕОГРАНИЧЕН, тоест ВСИЧКИ документи без ограничения за дата трябва да бъдат включени в отчета.

„От гледна точка“ на системата 1C параметърът за период е зададен и ... и двете му граници са равни на 01.01.0001 и само документи с празна дата ще бъдат включени в отчета, което на практика означава, че не ще бъде включен един единствен документ.

От гледна точка на потребителя отчетът трябва да включва всички документи от датата 28.01.2010 г.

„От гледна точка“ на 1C, периодът 28.01.2010 г. - 01.01.0001 г. ще предизвика изключение.

Можете, разбира се, да се опитате да обясните на потребителя защо отчетът не показва документите, които той очаква да види, и как периодът е представен от „гледната точка“ на 1C, но това е неблагодарна задача и също е грешно. Една добра програма трябва преди всичко да бъде удобна за потребителя, защото програмата съществува за потребителя, а не обратното, следователно ще трябва да „научите“ 1C да разбира периода, както го разбира потребителят, а именно:

1). Началото на периода и краят на периода не са посочени -> всички документи.

2). Посочва се само началото на периода -> всички документи, започващи от началото на периода

3). Освен това ще проверим дали Край на периода >= Начало на периода и ако това не е вярно, тогава ще приемем, че Краят на периода не е посочен, т.е. 2).

Въз основа на горното, изразът за параметъра Крайна дата е:

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

ТОГАВА DATETIME(3999;12;31)

КОГА &Период.Крайна дата<&Период.ДатаНачала

ТОГАВА DATETIME(3999;12;31) DATETIME(3999;12;31;23;59;59)

&Период.Крайна дата

Окончателната форма на нашия дизайн за избор на период е показана в

Забележка: този механизъм за настройка на параметри е предназначен за по-стари платформи 1C 8.1 и 8.2 (и по-старите версии на платформата 1C имат вградени механизми за управление на празни параметри и не е необходимо да се прибягва до механизма); описан в тази статия, в допълнение В някои версии на платформата 1C са възможни грешки и неправилна работа.