Hello,
Since I have no knowledge about writing code, the code I prepared by asking a friend in the past did not return the result I wanted. At that time, since my working conditions related to the code disappeared, I did not care and shelved the project.
After a long time I had to use the code again. Since there is no one to get support, I wanted to share it here.
Google Apps script
`var SHEET_NAME = "HesaplamaVerileri";
// Kullanıcıdan gelen verileri Google Sheets'e ekler
function ekleIstenilen(uzunluk, adet) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
sheet.appendRow([parseInt(uzunluk), parseInt(adet)]);
}
// Hesaplama fonksiyonu
function hesapla(testereKalinligi, varolanUzunluk) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
var data = sheet.getDataRange().getValues();
var profilUzunlugu = parseInt(varolanUzunluk);
var testereKal = parseInt(testereKalinligi);
var gerekenBoySayisi = 0;
var toplamTestereFiresi = 0;
var kalanFire = 0; // Kalan fire başlangıçta 0
var detaylar = [];
// Her talep için kesim hesaplama
data.forEach(function (row) {
var istenilenUzunluk = parseInt(row[0]);
var adet = parseInt(row[1]);
while (adet > 0) {
// Profildeki kalan fireyi göz önünde bulundur
var kesimSayisi = Math.floor((profilUzunlugu - kalanFire) / (istenilenUzunluk + testereKal));
// Logları buraya ekleyelim
Logger.log("Kesim Sayısı: " + kesimSayisi); // Kesim sayısını kontrol et
Logger.log("Kalan Profil Uzunluğu: " + (profilUzunlugu - kalanFire)); // Profilin kalan uzunluğunu kontrol et
if (kesimSayisi > 0) {
var kesilecekAdet = Math.min(kesimSayisi, adet);
var kesimToplamUzunluk = kesilecekAdet * (istenilenUzunluk + testereKal);
var kalanProfil = profilUzunlugu - (kalanFire + kesimToplamUzunluk);
// Testere firesi hesaplanır
toplamTestereFiresi += kesilecekAdet * testereKal;
// Fireyi doğru hesapla
var fire = kalanProfil >= 0 ? kalanProfil : 0;
// Logları fire hesaplamadan sonra ekleyelim
Logger.log("Fire: " + fire); // Fire hesaplamasını kontrol et
// Kalan fireyı güncelle
kalanFire = fire;
// Kesim detaylarını ekle
detaylar.push({
boyNo: gerekenBoySayisi + 1,
parcalar: new Array(kesilecekAdet).fill(istenilenUzunluk),
fire: fire
});
// Adet sayısını güncelle
adet -= kesilecekAdet;
gerekenBoySayisi++;
} else {
// Profilde kalan uzunluk değerlendirilir
if (kalanFire > 0) {
detaylar.push({
boyNo: gerekenBoySayisi + 1,
parcalar: [],
fire: kalanFire
});
kalanFire = 0;
} else {
// Profilin tamamı kesildiyse fire sıfır olur
detaylar.push({
boyNo: gerekenBoySayisi + 1,
parcalar: [],
fire: profilUzunlugu
});
}
kalanFire = 0; // Kalan fire sıfırlanır
gerekenBoySayisi++;
}
}
});
// Kesim detaylarının HTML olarak formatlanması
var resultHtml = <h3>Profil Bilgisi</h3>
<li>Profil Boy Uzunluğu: ${profilUzunlugu} mm</li>
<li>Toplam Testere Firesi: ${toplamTestereFiresi} mm</li>
<li>Her Bir Parça Arası Fire: ${testereKal} mm</li>
<li>Gereken Boy Sayısı: ${gerekenBoySayisi}</li>
<h4>Kesim Detayları:</h4>
<ul>
;
detaylar.forEach(function (detay) {
resultHtml += <li>
Boy No ${detay.boyNo}: ${detay.parcalar.join(" mm / ")}
| Fire: ${detay.fire} mm
</li>
;
});
resultHtml += "</ul>";
return resultHtml;
}
// Tüm verileri temizler
function temizle() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
sheet.clearContents();
}
// Google Sheets'ten veri sil
function silVeri(uzunluk, adet) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
var data = sheet.getDataRange().getValues();
// Veriyi sil
for (var i = 0; i < data.length; i++) {
if (data[0] == uzunluk && data[1] == adet) {
sheet.deleteRow(i + 1); // Row index starts from 1 in Sheets
break;
}
}
}
// HTML dosyasını başlatır
function doGet() {
return HtmlService.createHtmlOutputFromFile("Index");
}
`
the code is like this.
The result returned by the script;
`Profil Bilgisi
Profil Boy Uzunluğu: 6000 mm
Toplam Testere Firesi: 35 mm
Her Bir Parça Arası Fire: 5 mm
Gereken Boy Sayısı: 5
Kesim Detayları:
Boy No 1: 4500 | Fire: 1495 mm
Boy No 2: 4500 | Fire: 0 mm
Boy No 3: 4500 | Fire: 1495 mm
Boy No 4: 1400 mm / 1400 mm / 1400 | Fire: 290 mm
Boy No 5: 1400 | Fire: 4305 mm`
The result it should return should be as follows;
`Profil Bilgisi:
Profil Boy Uzunluğu: 6000 mm
Toplam Testere Firesi: 35 mm
Her Bir Parça Arası Fire: 5 mm
Gereken Boy Sayısı: 4
Kesim bilgisi
1 ) 4500 mm / 1400 mm / 90 mm (Fire)
2 ) 4500 mm / 1400 mm / 90 mm (Fire)
3 ) 4500 mm / 1400 mm / 90 mm (Fire)
4 ) 1400 mm / 4595 mm (Fire)`
I would be grateful if you could help to make the necessary edit to the code.
Thanks for your help