Validate solver settings

This commit is contained in:
Julia.Radzhabova
2025-11-19 22:14:19 +03:00
parent 206e99d8a3
commit a13c5a16ef
5 changed files with 56 additions and 48 deletions

View File

@ -565,7 +565,7 @@ define([
}],
primary: 'ok',
callback: function (btn) {
(btn === 'cancel') ? me.api.asc_StopSolver() : me.api.asc_StepSolver();
(btn === 'cancel') ? me.api.asc_StopSolver() : me.api.asc_ContinueSolver();
}
});
},

View File

@ -920,6 +920,11 @@ define([
text = this.loadingDocumentTitleText;
break;
case Asc.c_oAscAsyncAction['SolverLookingSolution']:
title = this.txtSolverLookingSolution;
text = this.txtSolverLookingSolution;
break;
case Asc.c_oAscAsyncAction['Disconnect']:
title = this.textDisconnect;
text = this.textDisconnect;
@ -2276,6 +2281,10 @@ define([
config.msg = this.errorNotUniqueFieldWithCalculated;
break;
case Asc.c_oAscError.ID.LockedCellSolver:
config.msg = this.errorLockedCellSolver;
break;
default:
config.msg = (typeof id == 'string') ? id : this.errorDefaultMessage.replace('%1', id);
break;

View File

@ -91,7 +91,7 @@ define([], function () { 'use strict';
allowBlank : true
// validateOnChange: true
});
this.txtCellRef.on('button:click', _.bind(this.onSelectData, this));
this.txtCellRef.on('button:click', _.bind(this.onSelectData, this, Asc.c_oAscSelectionDialogType.Chart));
this.txtConstraint = new Common.UI.InputFieldBtn({
el : this.$window.find('#id-dlg-constraint-constr'),
@ -101,7 +101,7 @@ define([], function () { 'use strict';
allowBlank : true
// validateOnChange: true
});
this.txtConstraint.on('button:click', _.bind(this.onSelectData, this));
this.txtConstraint.on('button:click', _.bind(this.onSelectData, this, Asc.c_oAscSelectionDialogType.Solver_Constraint));
this.cmbOperator = new Common.UI.ComboBox({
el: this.$window.find('#id-dlg-constraint-operator'),
@ -185,15 +185,10 @@ define([], function () { 'use strict';
var isvalid = true,
txtError = '',
value;
if (_.isEmpty(this.txtCellRef.getValue())) {
value = this.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.Chart, this.txtCellRef.getValue(), true);
if (value != Asc.c_oAscError.ID.No) {
txtError = this.txtNotValidRef;
isvalid = false;
txtError = this.txtEmptyRef;
} else {
value = this.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.Chart, this.txtCellRef.getValue(), true);
if (value != Asc.c_oAscError.ID.No) {
txtError = ''; // TODO: check errors
isvalid = false;
}
}
if (!isvalid) {
this.txtCellRef.showError([txtError]);
@ -201,16 +196,18 @@ define([], function () { 'use strict';
return isvalid;
}
if (_.isEmpty(this.txtConstraint.getValue())) {
isvalid = false;
txtError = this.txtEmptyConstraint;
} else {
value = this.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.Chart, this.txtConstraint.getValue(), true);
if (value != Asc.c_oAscError.ID.No) {
txtError = ''; // // TODO: check errors
// if (_.isEmpty(this.txtConstraint.getValue())) {
// isvalid = false;
// txtError = this.textDataConstraint;
// } else {
value = this.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.Solver_Constraint, this.txtConstraint.getValue(), true);
if (value !== Asc.c_oAscError.ID.No) {
if (value === Asc.c_oAscError.ID.DataConstraintError) {
txtError = this.textDataConstraint;
}
isvalid = false;
}
}
// }
if (!isvalid) {
this.txtConstraint.showError([txtError]);
this.txtConstraint.focus();
@ -220,7 +217,7 @@ define([], function () { 'use strict';
return isvalid;
},
onSelectData: function(input) {
onSelectData: function(type, input) {
var me = this;
if (me.api) {
var handlerDlg = function(dlg, result) {
@ -241,7 +238,7 @@ define([], function () { 'use strict';
win.setSettings({
api : me.api,
range : input.getValue(),
type : Asc.c_oAscSelectionDialogType.Chart,
type : type,
validation: function() {return true;}
});
}

View File

@ -456,7 +456,7 @@ define([
win.setSettings({
api : me.api,
range : input.getValue(),
type : Asc.c_oAscSelectionDialogType.Chart,
type : Asc.c_oAscSelectionDialogType.Solver_VariableCell,
validation: function() {return true;}
});
}
@ -646,17 +646,16 @@ define([
txtError = '',
value;
if (_.isEmpty(this.txtObjectiveRange.getValue())) {
isvalid = false;
txtError = this.txtEmpty;
} else {
value = this.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.Solver_ObjectiveCell, this.txtObjectiveRange.getValue(), true);
if (value != Asc.c_oAscError.ID.No) {
if (value == Asc.c_oAscError.ID.MustContainFormula) {
txtError = this.textMustContainFormula;
}
isvalid = false;
value = this.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.Solver_ObjectiveCell, this.txtObjectiveRange.getValue(), true);
if (value !== Asc.c_oAscError.ID.No) {
if (value === Asc.c_oAscError.ID.MustContainFormula) {
txtError = this.textMustContainFormula;
} else if (value === Asc.c_oAscError.ID.MustSingleCell) {
txtError = this.textMustSingleCell;
} else if (value === Asc.c_oAscError.ID.DataRangeError) {
txtError = this.textDataRange;
}
isvalid = false;
}
if (!isvalid) {
this.txtObjectiveRange.showError([txtError]);
@ -680,15 +679,14 @@ define([
}
if (_.isEmpty(this.txtVarsRange.getValue())) {
isvalid = false;
txtError = this.txtEmpty;
} else {
value = this.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.Chart, this.txtVarsRange.getValue(), true);
if (value != Asc.c_oAscError.ID.No) {
txtError = ''; // check errors
isvalid = false;
value = this.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.Solver_VariableCell, this.txtVarsRange.getValue(), true);
if (value != Asc.c_oAscError.ID.No) {
if (value === Asc.c_oAscError.ID.TooManyVarCellsSolver) {
txtError = this.textManyVarCells;
} else if (value === Asc.c_oAscError.ID.DataRangeError) {
txtError = this.textDataRange;
}
isvalid = false;
}
if (!isvalid) {
this.txtVarsRange.showError([txtError]);

View File

@ -1241,6 +1241,7 @@
"SSE.Controllers.Main.errorWrongOperator": "An error in the entered formula. Wrong operator is used.<br>Please correct the error.",
"SSE.Controllers.Main.errorWrongPassword": "The password you supplied is not correct.",
"SSE.Controllers.Main.errRemDuplicates": "Duplicate values found and deleted: {0}, unique values left: {1}.",
"SSE.Controllers.Main.errorLockedCellSolver": "One of the cells involved in the Solver process has been modified by another user.",
"SSE.Controllers.Main.leavePageText": "You have unsaved changes in this spreadsheet. Click 'Stay on this Page' then 'Save' to save them. Click 'Leave this Page' to discard all the unsaved changes.",
"SSE.Controllers.Main.leavePageTextOnClose": "All unsaved changes in this spreadsheet will be lost.<br> Click \"Cancel\" then \"Save\" to save them. Click \"OK\" to discard all the unsaved changes.",
"SSE.Controllers.Main.loadFontsTextText": "Loading data...",
@ -1621,6 +1622,7 @@
"SSE.Controllers.Main.warnNoLicenseUsers": "You've reached the user limit for %1 editors. Contact %1 sales team for personal upgrade terms.",
"SSE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.",
"SSE.Controllers.Main.warnOpenCsv": "The CSV format does not support saving a multi-sheet file or any elements except text.<br>Only the active sheet will be saved.",
"SSE.Controllers.Main.txtSolverLookingSolution": "Solver are finding a solution.",
"SSE.Controllers.PivotTable.strSheet": "Sheet",
"SSE.Controllers.PivotTable.txtCalculatedItemInPageField": "The item cannot be added or modified. PivotTable report has this field in Filters.",
"SSE.Controllers.PivotTable.txtCalculatedItemWarningDefault": "No actions with calculated items are allowed for this active cell.",
@ -2406,11 +2408,11 @@
"SSE.Views.ConstraintDialog.txtTitle": "Add constraint",
"SSE.Views.ConstraintDialog.txtTitleChange": "Change constraint",
"SSE.Views.ConstraintDialog.txtAdd": "Add",
"SSE.Views.ConstraintDialog.txtEmptyRef": "Cell reference is empty or contents are not valid.",
"SSE.Views.ConstraintDialog.txtEmptyConstraint": "Constraint must be a number, simple reference, or formula with a numeric value.",
"SSE.Views.ConstraintDialog.txtNotValidRef": "Cell reference is empty or contents are not valid.",
"SSE.Views.ConstraintDialog.txtInt": "integer",
"SSE.Views.ConstraintDialog.txtBin": "binary",
"SSE.Views.ConstraintDialog.txtDiff": "AllDifferent",
"SSE.Views.ConstraintDialog.textDataConstraint": "Constraint must be a number, simple reference, or formula with a numeric value.",
"SSE.Views.CreatePivotDialog.textDataRange": "Source data range",
"SSE.Views.CreatePivotDialog.textDestination": "Choose where to place the table",
"SSE.Views.CreatePivotDialog.textExist": "Existing sheet",
@ -4092,8 +4094,10 @@
"SSE.Views.SolverDlg.textInt": "int",
"SSE.Views.SolverDlg.textBin": "bin",
"SSE.Views.SolverDlg.textDif": "dif",
"SSE.Views.SolverDlg.textMustContainFormula": "The cell must contain a formula",
"SSE.Views.SolverDlg.textManyVarCells": "Too many Variable Cells",
"SSE.Views.SolverDlg.textMustContainFormula": "Objective cell contents must be a formula.",
"SSE.Views.SolverDlg.textMustSingleCell": "Objective cell must be a single cell on the active sheet.",
"SSE.Views.SolverDlg.textManyVarCells": "Too many Variable cells.",
"SSE.Views.SolverDlg.textDataRange": "Problem to solve not specified.",
"SSE.Views.SolverMethodDialog.txtTitle": "Method options",
"SSE.Views.SolverMethodDialog.txtPrecision": "Constraint precision",
"SSE.Views.SolverMethodDialog.txtAutoScale": "Use automatic scaling",
@ -4117,20 +4121,20 @@
"SSE.Views.SolverResultsDlg.txtConvergedDesc": "Solver has performed 5 iterations for which the objective did not move significantly. Try a smaller convergence setting, or a different starting point.",
"SSE.Views.SolverResultsDlg.txtCantImprove": "Solver cannot improve the current solution. All constraints are satisfied.",
"SSE.Views.SolverResultsDlg.txtCantImproveDesc": "When the Evolutionary engine is used, this means Solver stopped because is can not find a better solution in the given time.",
"SSE.Views.SolverResultsDlg.txtNotConverge": "The Objective Cell values do not converge.",
"SSE.Views.SolverResultsDlg.txtNotConvergeDesc": "Solver can make the Objective Cell as large (or small when minimizing) as it wants.",
"SSE.Views.SolverResultsDlg.txtNotConverge": "The Objective cell values do not converge.",
"SSE.Views.SolverResultsDlg.txtNotConvergeDesc": "Solver can make the Objective cell as large (or small when minimizing) as it wants.",
"SSE.Views.SolverResultsDlg.txtNoFeasible": "Solver could not find a feasible solution.",
"SSE.Views.SolverResultsDlg.txtNoFeasibleDesc": "Solver can not find a point for which all Constraints are satisfied.",
"SSE.Views.SolverResultsDlg.txtStopped": "Solver stopped at users request.",
"SSE.Views.SolverResultsDlg.txtStoppedDesc": "Solver has stopped before finding a globally optimal solution. The best found solution, if any, will be given.",
"SSE.Views.SolverResultsDlg.txtLineConditions": "The linearity conditions required by this LP Solver are not satisfied.",
"SSE.Views.SolverResultsDlg.txtLineConditionsDesc": "Create a linearity report to see where the problem is, or switch to the GRG engine.",
"SSE.Views.SolverResultsDlg.txtErrorVal": "Solver encountered an error value in the Objective Cell or a Constraint cell.",
"SSE.Views.SolverResultsDlg.txtErrorVal": "Solver encountered an error value in the Objective cell or a Constraint cell.",
"SSE.Views.SolverResultsDlg.txtErrorValDesc": "One of the cells in the worksheet became an error value when Solver tried certain values for the Variable Cells.",
"SSE.Views.SolverResultsDlg.txtNotEnoughMemory": "There is not enough memory available to solve the problem.",
"SSE.Views.SolverResultsDlg.txtNotEnoughMemoryDesc": "",
"SSE.Views.SolverResultsDlg.txtErrorModel": "Error in model. Please verify that all cells and Constraints are valid.",
"SSE.Views.SolverResultsDlg.txtErrorModelDesc": "Perhaps some cells that are not Variable Cells are marked as Integer, Binary or AllDifferent.",
"SSE.Views.SolverResultsDlg.txtErrorModelDesc": "Perhaps some cells that are not Variable cells are marked as Integer, Binary or AllDifferent.",
"SSE.Views.SolverResultsDlg.txtIntSolution": "Solver found an integer solution within tolerance. All constraints are satisfied.",
"SSE.Views.SolverResultsDlg.txtIntSolutionDesc": "It is possible that better integer solutions exist. To make sure Solver finds the very best solution, set the integer tolerance in the options dialog to 0%.",
"SSE.Views.SortDialog.errorEmpty": "All sort criteria must have a column or row specified.",