In the Feladatkiíró Sheet, when a value is entered in column J, it correctly transfers the value. However, there are instances where it also moves the row below, even if there is no value in the corresponding cell in column J.
On the Kész korongcsomagok sheet, it moves values correctly; however, if I enter a value in column L, it also transfers the row below, despite there being no value in column L.
Can hel panyone?
_____________________________
function onEdit(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;
// Feladatkiíró lap ellenőrzése
if (sheet.getName() === 'Feladatkiíró') {
var departmentColumn = 1; // "Részleg" oszlop (A)
var machineNumberColumn = 2; // "Gép száma" oszlop (B)
var requestDateColumn = 3; // "Leadás ideje" oszlop (C)
var deadlineColumn = 4; // "Elvárt határidő" oszlop (D)
var completedByColumn = 10; // "Feladatot elvégezte" oszlop (J)
var completionDateColumn = 11; // "Elvégzés dátuma" oszlop (K)
var remainingTimeColumn = 12; // "Hátralévő idő" oszlop (L)
var requiredColumns = [1, 3, 4, 10]; // Ezek az oszlopok kötelezőek (A, C, D, J)
var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Adatok');
var dataRange = dataSheet.getDataRange().getValues();
var dateSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Dátumok');
var rawDeadlineRange = dateSheet.getRange("A2:A150").getValues();
var deadlineRange = rawDeadlineRange.map(function(row) {
return Utilities.formatDate(new Date(row[0]), Session.getScriptTimeZone(), "yyyy.MM.dd HH:00");
});
if (range.getColumn() == departmentColumn && range.getValue() != "") {
var department = range.getValue();
var machines = [];
for (var i = 1; i < dataRange.length; i++) {
if (dataRange[i][0] == department && dataRange[i][1] != "Nincs") {
machines.push(dataRange[i][1]);
}
}
if (machines.length == 0) {
machines.push("");
}
var machineCell = sheet.getRange(range.getRow(), machineNumberColumn);
var rule = SpreadsheetApp.newDataValidation().requireValueInList(machines).build();
machineCell.setDataValidation(rule);
machineCell.clearContent();
var requestDateCell = sheet.getRange(range.getRow(), requestDateColumn);
if (requestDateCell.getValue() == "") {
requestDateCell.setValue(new Date());
}
var deadlineCell = sheet.getRange(range.getRow(), deadlineColumn);
var deadlineRule = SpreadsheetApp.newDataValidation().requireValueInList(deadlineRange).build();
deadlineCell.setDataValidation(deadlineRule);
}
if (range.getColumn() == completedByColumn && range.getValue() != "") {
// Ellenőrizzük, hogy a kötelező oszlopok (A, C, D, J) ki vannak-e töltve
var row = range.getRow();
var isRowComplete = requiredColumns.every(function(col) {
return sheet.getRange(row, col).getValue() != "";
});
if (isRowComplete) {
var completionDateCell = sheet.getRange(row, completionDateColumn);
completionDateCell.setValue(new Date());
var rowToMove = sheet.getRange(row, 1, 1, 11); // A-J oszlopok (1-11)
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Kész korongcsomagok');
var targetRow = targetSheet.getLastRow() + 1;
var targetRange = targetSheet.getRange(targetRow, 1, 1, 11);
targetRange.setValues(rowToMove.getValues());
// Az eredeti sor törlése
sheet.deleteRow(row);
// Az aktuális sor számát frissítjük a cikluskezeléshez
row--;
} else {
SpreadsheetApp.getUi().alert('Az összes kötelező mezőt ki kell tölteni a sor áthelyezése előtt!');
}
}
// Elvárt határidő oszlop (D) kezelése és Hátralévő idő (L) kiszámítása
if (range.getColumn() == deadlineColumn && range.getValue() != "") {
var remainingTimeCell = sheet.getRange(range.getRow(), remainingTimeColumn);
var formula = '=(' + sheet.getRange(range.getRow(), deadlineColumn).getA1Notation() + '-NOW())*24';
remainingTimeCell.setFormula(formula);
}
}
// Kész korongcsomagok lap ellenőrzése
if (sheet.getName() === 'Kész korongcsomagok') {
if (range.getColumn() == 12 && range.getValue() != "") {
var row = range.getRow();
var mCell = sheet.getRange(row, 13);
// Ellenőrizzük, hogy az M cella üres-e, és hogy az L oszlopba érték került-e
if (mCell.getValue() == "" && sheet.getRange(row, 12).getValue() != "") {
mCell.setValue(new Date());
}
var rowData = sheet.getRange(row, 1, 1, 14).getValues()[0];
var statSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Gépen');
var lastRow = statSheet.getLastRow();
// Ellenőrizzük, hogy az L és M oszlopokban is szerepel érték
if (sheet.getRange(row, 12).getValue() != "" && mCell.getValue() != "") {
// Ellenőrizzük, hogy az alatta lévő sor üres-e, és ne a legelső sort bántsuk
if (row + 1 <= sheet.getLastRow() && row > 1 && sheet.getRange(row + 1, 12).getValue() == "") {
// Adatok áthelyezése a 'Gépen' lapra, ha még nem kerültek átvitelre
var existsInStatSheet = false;
for (var i = 1; i <= lastRow; i++) {
if (statSheet.getRange(i, 1, 1, 14).getValues()[0].toString() === rowData.toString()) {
existsInStatSheet = true;
break;
}
}
if (!existsInStatSheet) {
statSheet.getRange(lastRow + 1, 1, 1, 14).setValues([rowData]);
sheet.deleteRow(row);
// A sor törlése után a row változó frissítése
row = Math.max(row - 1, 2); // Ne lépje túl a második sort
// Ellenőrizzük, hogy a következő sor is átkerüljön-e
if (row <= sheet.getLastRow() && sheet.getRange(row, 12).getValue() != "" && sheet.getRange(row, 13).getValue() != "") {
// Csak akkor nézzük az alatta lévő sort, ha az aktuális sor értékeket tartalmaz
if (sheet.getRange(row, 12).getValue() != "" && sheet.getRange(row, 13).getValue() != "") {
rowData = sheet.getRange(row, 1, 1, 14).getValues()[0]; // Frissítjük a rowData-t
existsInStatSheet = false;
for (var i = 1; i <= lastRow; i++) {
if (statSheet.getRange(i, 1, 1, 14).getValues()[0].toString() === rowData.toString()) {
existsInStatSheet = true;
break;
}
}
if (!existsInStatSheet) {
statSheet.getRange(lastRow + 1, 1, 1, 14).setValues([rowData]);
sheet.deleteRow(row);
}
}
}
// Az új sor száma a 'Gépen' lapon, ahol az adatokat most beállítottuk
var newRow = lastRow + 1;
// Képlet beszúrása az N cellába (14. oszlop) a 'Gépen' lapon
statSheet.getRange(newRow, 14).setFormula('=((M' + newRow + '+(G' + newRow + '/24))-NOW())*24');
}
}
} else {
// Ha az L oszlop üres, figyelmeztetést adunk
SpreadsheetApp.getUi().alert('Az átvitelhez az L és M oszlopokat is ki kell tölteni!');
}
}
}
}