Nikola thanks for your time, so it seems now its bit different from AX2012 and D365 how it handles the validation for incorrect values (i had the same code running in AX2012 services and its working as expected but not in D365, this is why i raised this post)
So you're saying the best solution is to call the validateField for all the fields im using? check a sample code
custTable.AccountNum = _contract.parmCustAccount();
custTable.CustGroup = _contract.parmCustGroup();
custTable.validateField(fieldNum(CustTable,CustGroup));
custTable.initFromCustGroup(CustGroup::find(custTable.CustGroup));
CustTable::confirmAndSaveCustGroupChange(custTable, false);
custTable.Currency = _contract.parmCurrency();
custTable.validateField(fieldNum(CustTable,Currency));
custTable.PaymTermId = _contract.parmPaymTermId();
custTable.validateField(fieldNum(CustTable,PaymTermId));
custTable.TaxGroup = _contract.parmTaxGroup();
custTable.validateField(fieldNum(CustTable,TaxGroup));
custTable.CreditMax = _contract.parmCreditMax();
custTable.IdentificationNumber = _contract.parmIdentificationNumber();
Isn't there any better way?