|
![]() |
#1 |
Модератор
|
![]() Цитата:
Сообщение от sukhanchik
![]() и еще вдогонку. Штатная проверка пустых аналитик действует сразу на все таблицы по всем аналитикам. Поэтому ее неудобно устанавливать. Я сделал аналог штатной проверки - для этого мне пришлось добавить всего одно поле DenyEmptyDimension в таблицу DimensionSetRuleTable (плюс вывести галку в нижний грид формы правил набора аналитик) и написать буквально 5 строчек кода в \Classes\DimensionSetValidation\checkDimension:
X++: public boolean checkDimension(Common _caller, fieldId _dimensionFieldId, boolean _checkWriteValidation, boolean _silent = false) { ........ if (validateDimension != emptyDimension) { if (_silent) { isValid = isValid && this.isValidCombination(setId, hierarchyId, validateDimension, prefixDimension); } else { isValid = isValid && this.checkCombination(setId, hierarchyId, validateDimension, prefixDimension); } } //Проверка на пустую аналитику --> else { if (_checkWriteValidation && dimensionSetRuleSearch.dimensionSetRuleTable().DenyEmptyDimension) { isValid = checkFailed("@SYS79468"); } } // Проверка на пустую аналитику <-- ........ } метод вызывается с параметром _checkEmptyDimension X++: public boolean checkDimension(Common _caller, fieldId _dimensionFieldId, boolean _checkWriteValidation, boolean _silent = false, boolean _checkEmptyDimension = false, boolean _isPrefix = false) X++: public boolean checkDimensions(boolean _checkWriteValidation) { #LedgerJournalFaults #define.ValidateEmptyDimensions(true) boolean ok = true; DimensionSetCaller dimensionSetCaller; ; if (isConfigurationkeyEnabled(configurationkeynum(DimensionSetHierarchy))) { dimensionSetCaller = DimensionSetCaller::construct(this, fieldnum(LedgerJournalTrans, Dimension)); ok = appl.dimensionSetValidation(false, dimensionSetCaller.getCompanyId()).checkDimension(this, fieldnum(LedgerJournalTrans, Dimension), _checkWriteValidation, false, #ValidateEmptyDimensions) && ok; if (ok) { // InterCoDimension field should only be set when the two accounts // are different or there is an offset account. X++: // don't check empty dimensions unless expressely told to if (validateDimension != emptyDimension || _checkEmptyDimension) { if (_silent) { isValid = this.isValidCombination(setId, hierarchyId, validateDimension, prefixDimension, _isPrefix) && isValid; } else { isValid = this.checkCombination(_caller, _dimensionFieldId, setId, hierarchyId, validateDimension, dimensionSetRule.RefLedgerAccount, prefixDimension, _isPrefix) && isValid; } } Стек вызова. Код: [s] \Classes\DimensionSetValidation\checkCombination 36 [s] \Classes\DimensionSetValidation\checkDimension 123 [s] \Data Dictionary\Tables\LedgerJournalTrans\Methods\checkDimensions 13 [s] \Classes\LedgerJournalCheckPost\checkJournal 212 [s] \Classes\LedgerJournalCheckPost\run 72 [c] \Classes\LedgerJournalCheck\main 41 [c] \Classes\FormFunctionButtonControl\Clicked
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |