Заполнение значений по умолчанию в режиме создания новых элементов в форме

есть форма с установленным фильтром

FORM  formDeliveryFact
OBJECTS calcTask = CalcTask  PANEL
OBJECTS s =  CubeDeliveryFact
PROPERTIES newDeliveryFact(calcTask)
...
FILTERS     (task(calcTask) = task(s) OR NOT task(s) )
        AND calc(calcTask) = calc(s)

при создании нового элемента я запускаю действие

newDeliveryFact 'Добавить' (calcTask){
    NEW nC = CubeDeliveryFact {
        task(nC) <- Calc.task(calcTask); 
        calc(nC) <- Calc.calc(calcTask); 
 
    }
}

При этом есть проблема при вставке copy-past несколько строк - если строк больше чем на экране - без фильтров автоматически заводятся новые строки, а с фильтром то ли не заводятся то ли значения по умолчанию пустые и новые записи выпадают из зоны видимости фильтра.

Можно было бы триггером заполнять - но тут нужно значение calcTask. пробовал CHANGEWYS

EXTEND FORM  formSaleExpense
PROPERTIES
 ON CHANGEWYS {
       task(s) <- Calc.task(calcTask) WHERE NOT   task(s); 
       calc(s) <- Calc.calc(calcTask) WHERE NOT   calc(s); 
 }

Как сделать лучше чтобы данная функция работала?


Ответы (1 шт):

Автор решения: Aliaksandr Kirkouski

Чтобы решить эту задачу, нужно понимать два момента:

а) Копи-паст в lsFusion по умолчанию при "нехватке" записей добавляет объекты "обычным" NEW (а не вашим newDeliveryFact). Для того чтобы платформа использовало именно ваше действие, ему нужно задать EXTID - new[имя объекта] или new (если свойство/действие с таким EXTID на форме одно). То есть в вашем случае например (EXTID по умолчанию равно ID):

PROPERTIES new = newDeliveryFact(calcTask)

PS: Эта возможность появилась в последних коммитах 5-й версии, поэтому для ее использования необходимо обновиться на последнюю сборку

б) Вообще по идее в данном случае подошел бы и "обычный" NEW, так как это "обычный" NEW пытается в условие FILTERS записать TRUE, то есть выполнить:

 (task(calcTask) = task(s) OR NOT task(s) ) AND calc(calcTask) = calc(s) <- TRUE

В этом случае, платформа должна в каждую скобку / операнд записать TRUE, и тем самым записать в task и calc нужные значения. Но в 5-й версии этого не происходило в силу некоторого бага, который тоже вроде уже исправлен (достаточно обновиться на последнюю сборку). Соответственно, на последней сборке можно просто вместо:

PROPERTIES 'new' = newDeliveryFact(calcTask)

написать:

PROPERTIES NEW(s)

и все должно будет работать.

→ Ссылка