Where is my problem in my code?!

51 views
Skip to first unread message

Dezső Tompa

unread,
Oct 25, 2024, 5:24:44 AMOct 25
to Google Apps Script Community
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!');
    }
  }
}
}

Keith Andersen

unread,
Oct 25, 2024, 3:45:40 PMOct 25
to google-apps-sc...@googlegroups.com
Can you share your sheet so I can do some testing/debugging? Share it privately if you want: contact...@gmail.com

Keith

--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/1b8f8db8-a067-48b3-b533-a0e6184d84e4n%40googlegroups.com.


--

Passions: God, Family, Friends, Scripture, Data Management, Google Sheets + App Script, MS Access, Programing, sharing and much more.

Dezső Tompa

unread,
Oct 27, 2024, 7:31:20 AMOct 27
to Google Apps Script Community
i write mail to you. Thanks!

Keith Andersen

unread,
Oct 28, 2024, 11:32:39 PMOct 28
to google-apps-sc...@googlegroups.com
keithbannerTemplate1.png
Hey there,
A lap, amit megosztottam veled, működik. Többször teszteltem, amilyen gyorsan csak tudtam, és soha nem sikerült.

Figyeljük meg, hogy van egy egyszerű onEdit függvény a szkriptben. Nincsenek telepítve vagy a szkripten további onEdit funkciók.  Nem lehet telepítve a edit, trigger egy másik on edit egyszerű trigger meghívása. Egyszerűen nem fog működni, és számos problémát okoz.

A szkriptben csak egy onEdit funkcióval teszteltem, és mindkét oldalon hibátlanul megosztottam egy másik fiókkal és az on edit funkcióval.

Ahhoz, hogy ez több felhasználónál is működjön, rendelkeznie kell egy zármechanizmussal a szkriptben. Ez azonban nagyon trükkös az onEdit funkció beállításában.

Az onEdit funkció minden egyes cellát megvizsgál, amelyet a felhasználó megérint a táblázat bármely lapján. Ez túl sok ahhoz, hogy a zárolási szolgáltatást az onEdit függvényre alkalmazzuk. Egyszerűen lezárná a táblázatát.

Ezért azt tettem, hogy a zárszerkezetet a két fülhöz tartozó funkciók közé helyeztem. Ezután az onEdit függvényben konkrét hivatkozásokat tettem konkrét cellákra, amelyek kiváltják a funkciókat az egyes lapokon. Ezért csak az éppen elért funkciót zárolja. Lehet, hogy egy felhasználó az egyik lapon aktiválja a funkciót, egy másik felhasználó pedig egy másik lapon, és ugyanazt az onEdit funkciót aktiválja, de egy másik funkciót zárol.


Tesztelje alaposan, és ha bármilyen kérdése van, nyugodtan írjon nekem.

Egészségére
Cheers and God bless,
Keith

On Sun, Oct 27, 2024 at 6:40 AM Keith Andersen <contact...@gmail.com> wrote:

Actually to be more accurately said; where two processes access the same function at the same time.



My website: https://sites.google.com/view/klaweb/
Passions: God, Family, Scriptures, Learning, Data Management, Google Sheets + App Script and much more!

Reply all
Reply to author
Forward
0 new messages