Commit 3d347ff6 authored by GoshaZotov's avatar GoshaZotov

+ previous

parent dfec624e
...@@ -42,57 +42,72 @@ ...@@ -42,57 +42,72 @@
var cElementType = AscCommonExcel.cElementType; var cElementType = AscCommonExcel.cElementType;
var cNumber = AscCommonExcel.cNumber; var cNumber = AscCommonExcel.cNumber;
function getNeedValuesFromDataBase(dataBase, field, conditionData){ function checkValueByCondition(condition, val){
var res = false;
var condition = condition.getValue();
//заполняем map название столбца-> его содержимое(из базы данных) if("" === condition){
var headersArr = []; res = true;
var headersDataMap = {}; }else{
var dataBaseRowsCount = dataBase.length; res = AscCommonExcel.matching(val, AscCommonExcel.matchingValue(condition));
var dataBaseColsCount = dataBase[0].length; }
for(var i = 0; i < dataBaseRowsCount; i++){ return res;
for(var j = 0; j < dataBaseColsCount; j++){ }
function convertDatabase(dataBase, bIsCondition) {
var arr = [];
var map = {};
for(var i = 0; i < dataBase.length; i++){
for(var j = 0; j < dataBase[0].length; j++){
var header = dataBase[0][j].getValue(); var header = dataBase[0][j].getValue();
if(bIsCondition){
if(0 === i){ if(0 === i){
if(headersDataMap.hasOwnProperty(header)){//если находим такой же заголовок, пропускаем arr[j] = header;
if(map.hasOwnProperty(header)){//если находим такой же заголовок, пропускаем
continue; continue;
}else{ }else{
headersDataMap[header] = []; map[header] = [];
headersArr[j] = header;
} }
}else{ }else{
if(!headersDataMap[header][i - 1]){ map[header].push(dataBase[i][j]);
headersDataMap[header][i - 1] = dataBase[i][j];
}
}
} }
} }else{
//заполняем map название столбца-> его содержимое(из условий)
var headersConditionArr = [];
var headersConditionMap = {};
var conditionBaseRowsCount = conditionData.length;
var conditionBaseColsCount = conditionData[0].length;
for(var i = 0; i < conditionBaseRowsCount; i++){
for(var j = 0; j < conditionBaseColsCount; j++){
var header = conditionData[0][j].getValue();
if(0 === i){ if(0 === i){
headersConditionArr[j] = header; if(map.hasOwnProperty(header)){//если находим такой же заголовок, пропускаем
if(headersConditionMap.hasOwnProperty(header)){//если находим такой же заголовок, пропускаем
continue; continue;
}else{ }else{
headersConditionMap[header] = []; map[header] = [];
arr[j] = header;
} }
}else{ }else{
headersConditionMap[header].push(conditionData[i][j]); if(!map[header][i - 1]){
map[header][i - 1] = dataBase[i][j];
}
}
} }
} }
} }
//если поле задано числом, то выбираем заголовок столбца с данным именем return {arr: arr, map: map};
}
function getNeedValuesFromDataBase(dataBase, field, conditionData){
//заполняем map название столбца-> его содержимое(из базы данных)
var databaseObj = convertDatabase(dataBase);
var headersArr = databaseObj.arr, headersDataMap = databaseObj.map;
//заполняем map название столбца-> его содержимое(из условий)
var databaseObj = convertDatabase(conditionData, true);
var headersConditionArr = databaseObj.arr, headersConditionMap = databaseObj.map;
//преобразуем аргумент поле
var isNumberField = field.tocNumber(); var isNumberField = field.tocNumber();
if(cElementType.error === isNumberField.type){ if(cElementType.error === isNumberField.type){
field = field.getValue(); field = field.getValue();
}else{ }else{
//если поле задано числом, то выбираем заголовок столбца с данным именем
var number = isNumberField.getValue(); var number = isNumberField.getValue();
if(headersArr[number - 1]){ if(headersArr[number - 1]){
field = headersArr[number - 1]; field = headersArr[number - 1];
...@@ -101,36 +116,32 @@ ...@@ -101,36 +116,32 @@
} }
} }
var isTrueCondition = function(condition, val){ if(null === field){
var res = false; return false;
var condition = condition.getValue();
if("" === condition){
res = true;
}else{
res = window['AscCommonExcel'].matching(val, AscCommonExcel.matchingValue(condition));
} }
return res;
};
var previousWinArray; var previousWinArray;
var winElems = []; var winElems = [];
for(var i = 1; i < conditionBaseRowsCount; i++){ for(var i = 1; i < conditionData.length; i++){
previousWinArray = null; previousWinArray = null;
for(var j = 0; j < conditionBaseColsCount; j++){ for(var j = 0; j < conditionData[0].length; j++){
var condition = conditionData[i][j]; var condition = conditionData[i][j];
var header = headersConditionArr[j]; var header = headersConditionArr[j];
//проходимся по всем строкам данного столбца из базы и смотрим что нам подходит по условию //проходимся по всем строкам данного столбца из базы и смотрим что нам подходит по условию
var databaseData = headersDataMap[header]; var databaseData = headersDataMap[header];
if(!databaseData){
continue;
}
var winColumnArray = []; var winColumnArray = [];
for(var n = 0; n < databaseData.length; n++){ for(var n = 0; n < databaseData.length; n++){
if(previousWinArray && previousWinArray[n]){ if(previousWinArray && previousWinArray[n]){
if(isTrueCondition(condition, databaseData[n])){ if(checkValueByCondition(condition, databaseData[n])){
winColumnArray[n] = true; winColumnArray[n] = true;
} }
}else if(!previousWinArray && isTrueCondition(condition, databaseData[n])){ }else if(!previousWinArray && checkValueByCondition(condition, databaseData[n])){
winColumnArray[n] = true; winColumnArray[n] = true;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment