Üretim Planlama Destek lütfen

avare1907

Altın Üye
Katılım
27 Ekim 2016
Mesajlar
89
Excel Vers. ve Dili
excel 2010 türkçe
Altın Üyelik Bitiş Tarihi
20-08-2026
Değerli hocalarım,
aşağıda yapmış olduğum çalışmaya istinaden görsel mevcut ,

Görseldeki verileri şu şekilde özetliyeyim
•Günlük kapasite sütununda parçaya göre değişkenlik gösteren max. örnekteki miktar 2000 Adet kapasite miktarı var buradan günlük teoride kaç adet üretilebilir gerçekleşen kaç adet olmuş bunun takibini günlük verim oranı takip etmek ancak takip edebilmek için sipariş miktarının çay ve mola saatlerini düştüğümüzde bitmesi gereken tarih ve saati planlanan bitiş tarih ve saat sütununa yazması gerekiyor tabii burada önemli olan başlama ve bitiş tarihinin hangi mola saatlerine isabet ettiği onu tespit edip onları pas geçip o sürelerde üretimi durdurarak bitmesi gereken tarih saati bulmak

•gerçekleşen tarih ve saat sütunlarını ve sonucu olan gerçekleşen Süre (dk) sütununu incelerseniz sorunsuz bir şekilde çıkartmış
07:30'ile 13:30 arası çalışmış 6*60=360 o aralığa yemek paydosu ile çay paydosu denk gelmiş -15 dk -30 dk = 315 dakika

bununla ilgili 2 haftadır uğraşıyorum ancak tutarlı bir sonucu veren kod yada formül yapamadım bununla ilgili bilgisi ve yardım edebilecek hocalarımızdan destek rica ediyorum şimdiden teşekkürleri sunarım,

Bu sayfadaki çalışan kod ile Planlanan bitiş tarih saat sütununda kullandığım formülü aşağıya ekliyorum incelemenizi rica ederim saygılarımla.




Function PlanlananBitisFinal(BaslangicTarih As Date, BaslangicSaat As Date, Kapasite As Double, Adet As Double) As Date
Dim BaslangicZaman As Date
Dim ToplamSure As Double
Dim Molalar() As Variant
Dim ToplamMolaSure As Double
Dim i As Integer

' Molaları tanımla (sabitler)
Molalar = Array( _
Array(TimeValue("10:00:00"), TimeValue("10:15:00")), _
Array(TimeValue("13:00:00"), TimeValue("13:30:00")), _
Array(TimeValue("16:00:00"), TimeValue("16:15:00")) _
)

BaslangicZaman = BaslangicTarih + BaslangicSaat

' Dakikada üretim hızı
Dim AdetPerDakika As Double
AdetPerDakika = Kapasite / 540 ' net çalışma dakikası

' Üretim süresi (dakika)
ToplamSure = Adet / AdetPerDakika

' Üretim süresinin başlangıç ve bitiş saatleri (geçici)
Dim UretimBitisZaman As Date
UretimBitisZaman = BaslangicZaman + ToplamSure / 1440

' Mola sürelerini kontrol et, üretim süresi boyunca kaç dakika mola denk geliyor hesapla
ToplamMolaSure = 0
For i = LBound(Molalar) To UBound(Molalar)
Dim MolaBas As Date, MolaBit As Date
MolaBas = Int(BaslangicZaman) + Molalar(i)(0)
MolaBit = Int(BaslangicZaman) + Molalar(i)(1)

' Eğer üretim aralığı molaya denk geliyorsa mola süresini ekle
If (UretimBitisZaman > MolaBas) And (BaslangicZaman < MolaBit) Then
' Mola ve üretim kesişim süresi:
Dim MolaGecisBas As Date, MolaGecisBit As Date
MolaGecisBas = IIf(BaslangicZaman > MolaBas, BaslangicZaman, MolaBas)
MolaGecisBit = IIf(UretimBitisZaman < MolaBit, UretimBitisZaman, MolaBit)
ToplamMolaSure = ToplamMolaSure + DateDiff("n", MolaGecisBas, MolaGecisBit)
End If
Next i

' Mola sürelerini üretim süresine ekle
ToplamSure = ToplamSure + ToplamMolaSure

' Son bitiş zamanı
PlanlananBitisFinal = BaslangicZaman + ToplamSure / 1440
End Function

Planlanan Bitiş tarih saat formülü
=EĞER(VE(F3<>""; G3<>""; E3<>""; N3<>""); PlanlananBitisFinal(F3; G3; E3; N3); "")


259973
 
Son düzenleme:

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
1,129
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Şu anki fonksiyonun mantığı aslında doğruya yakın ama tek seferde bitiş zamanını hesaplayıp sonra yalnızca başlangıç günündeki molaları düşüyor.

Yani; Üretim 1 günü aşıyorsa sonraki günlerdeki çay / yemek molalarını hiç hesaba katmıyor.
Mola süresini eklediğinde bitiş zamanı yeni bir molanın içine düşerse onu tekrar hesaba katmıyor.
Bu yüzden tutarsız sonuçlar çıkıyor.

Çalışma düzeni varsayımları (sen kolayca değiştirebilirsin):

Çalışma: 07:30 – 17:30
Molalar: 10:00–10:15, 13:00–13:30, 16:00–16:15
Günlük net çalışma: 540 dk (zaten senin fonksiyondaki gibi)

Kod:
Function PlanlananBitisFinal( _
        BaslangicTarih As Date, _
        BaslangicSaat As Date, _
        Kapasite As Double, _
        Adet As Double) As Date
   
    Dim CalismaBas As Date, CalismaBit As Date
    Dim Molalar() As Variant
    Dim AdetPerDakika As Double
    Dim KalanSure As Double
    Dim t As Date
    Dim gun As Date, tSaat As Date
    Dim i As Long
    Dim IntervalBitis As Date
    Dim IntervalDakika As Double
   
    CalismaBas = TimeValue("07:30:00")
    CalismaBit = TimeValue("17:30:00")
   
    Molalar = Array( _
        Array(TimeValue("10:00:00"), TimeValue("10:15:00")), _
        Array(TimeValue("13:00:00"), TimeValue("13:30:00")), _
        Array(TimeValue("16:00:00"), TimeValue("16:15:00")) _
    )
   
    t = BaslangicTarih + BaslangicSaat
   
    AdetPerDakika = Kapasite / 540
    If AdetPerDakika = 0 Then Exit Function
   
    KalanSure = Adet / AdetPerDakika
   
    Do While KalanSure > 0
       
        gun = Int(t)
        tSaat = t - gun
       
        If tSaat < CalismaBas Then
            t = gun + CalismaBas
            tSaat = CalismaBas
        ElseIf tSaat >= CalismaBit Then
            t = gun + 1 + CalismaBas
            GoTo DevamEt
        End If
       
        For i = LBound(Molalar) To UBound(Molalar)
            If tSaat >= Molalar(i)(0) And tSaat < Molalar(i)(1) Then
                t = gun + Molalar(i)(1)
                tSaat = Molalar(i)(1)
                Exit For
            End If
        Next i
       
       
        IntervalBitis = gun + CalismaBit
       
        For i = LBound(Molalar) To UBound(Molalar)
            If tSaat < Molalar(i)(0) Then
                If gun + Molalar(i)(0) < IntervalBitis Then
                    IntervalBitis = gun + Molalar(i)(0)
                End If
            End If
        Next i
       
        IntervalDakika = DateDiff("n", t, IntervalBitis)
       
        If IntervalDakika <= 0 Then
            t = IntervalBitis
            GoTo DevamEt
        End If
               
        If KalanSure <= IntervalDakika Then
            PlanlananBitisFinal = t + (KalanSure / 1440)
            Exit Function
        Else           
            KalanSure = KalanSure - IntervalDakika
            t = IntervalBitis
        End If
       
DevamEt:
       
    Loop
   
End Function
Excel’de kullandığın formül değişmiyor:
=EĞER(VE(F3<>""; G3<>""; E3<>""; N3<>""); PlanlananBitisFinal(F3; G3; E3; N3); "")

  1. ToplamSure’yi tek seferde molaya göre düzeltmek yerine
    net dakikayı KalanSure olarak alıp zaman içinde adım adım ilerliyoruz.
  2. Her döngüde:
    • Çalışma saatine hizalanıyoruz (07:30–17:30 dışındaysa içeri taşıyoruz).
    • Eğer molanın içine denk geldiysek, direk mola bitimine atlıyoruz.
    • Bir sonraki mola başlangıcı veya gün sonuna kadar olan çalışma aralığını hesaplıyoruz.
    • Bu aralık KalanSure’den büyükse, bitiş tam o aralık içinde; küçükse aralığı tüketip
      KalanSure’yi azaltıyor, molaya / gün sonuna ilerliyoruz.
    • Gün biterse bir sonraki güne 07:30’a geçiyoruz.
Bu kodla hem tek gün hem çok gün süren üretimlerde çay ve yemek molalarını “atlayarak” doğru planlanan bitiş tarih-saatini bulman gerekiyor.
 
Katılım
12 Aralık 2015
Mesajlar
1,235
Excel Vers. ve Dili
Türkçe Ofis 2007
Alternatif
Kod:
Function PlanlananBitisFinal(BaslangicTarih As Date, BaslangicSaat As Date, Kapasite As Double, Adet As Double) As Date
Dim tar As Date
Dim dak As Double
tar = BaslangicTarih + BaslangicSaat
dak = Adet / (Kapasite / 540)
Do While dak > 0
If Format(tar, "hh:mm") = "17:30" Then
tar = CDate(Format(tar, "dd.mm.yyyy")) + 1 + "07:30"
End If
If CDate("10:00") <= Format(tar, "hh:mm") And CDate("10:15 ") > Format(tar, "hh:mm") _
Or CDate("13:00") <= Format(tar, "hh:mm") And CDate("13:30") > Format(tar, "hh:mm") _
Or CDate("16:00") <= Format(tar, "hh:mm") And CDate("16:15") > Format(tar, "hh:mm") Then
tar = tar + CDate("00:01")
Else
tar = tar + CDate("00:01")
dak = dak - 1
End If
Loop
PlanlananBitisFinal = tar
End Function
 
Son düzenleme:
Üst