Hej! Obunda kontroller visar samma värde för alla poster i ett "Flera objekt"-formulär. För att få värden som gäller för respektive post måste beräkningarna finnas med i formulärets datakälla. Tack så jättemycket Åsa! Extraraden slipper du om du anger formulärets egenskap "Tillåt tillägg" till "Nej" Tack än en gång! Beräkningar i "Flera objekt"-formulär
Jag har ett "Flera objekt"-formulär som har tre fält, kontrakt_nr, ÅrMånad och Belopp som visar värden hämtade från en tabell.
Dessutom finns det tre ytterligare fält, Ackumulerat_belopp, MånadFörraÅret och Ifjol_Ackumulerat_belopp. De är obundna och ska visa resultatet från koden nedan. Koden finns i formulärets "Form_Load().
MgsBoxarna visat precis som jag vill att det ska fungera, rätt värden kommer fram, men i formuläret så får alla poster identiska värden för Ackumulerat_belopp, MånadFörraÅret och Ifjol_Ackumulerat_belopp.
Hur kan man göra för att varje rad i formuläret använder de rätta värdena? Verkar ju inte fungera med:
Me.Ackumulerat_belopp = rs("Summan1")
Me.MånadFörraÅret = myRecordSet.Fields(0).Value
Me.Ifjol_Ackumulerat_belopp = rs2("Summan2")
Mycket tacksam för hjälp!
'Ta fram ÅrMånad och belopp som är kopplade till kontraktnr
myRecordSet4.Open "SELECT ÅrMånad, Belopp FROM Omsättning WHERE (((kontrakt_nr)= '" & [Forms]![frm_Startmeny_Omsättning]![RedigeraOmsättning_kontrakt_nr] & "'))"
While Not myRecordSet4.EOF
MsgBox ("ÅrMånad: " & myRecordSet4.Fields(0).Value)
MsgBox ("Belopp: " & myRecordSet4.Fields(1).Value)
myÅrMånad = myRecordSet4.Fields(0).Value
månad = Month(myÅrMånad) - 1
åretsFörstaMånad = DateAdd("m", -månad, myÅrMånad)
MsgBox ("ÅretsFörstaMånad: " & åretsFörstaMånad)
FörraÅretsFörstaMånad = DateAdd("yyyy", -1, åretsFörstaMånad)
MsgBox ("FörraÅretsFörstaMånad: " & FörraÅretsFörstaMånad)
FörraÅretsAktuellaMånad = DateAdd("yyyy", -1, myÅrMånad)
MsgBox ("FörraÅretsAktuellaMånad: " & FörraÅretsAktuellaMånad)
'Ackumulerat belopp hittills i år
strSQL = "SELECT SUM(Belopp) AS Summan1 FROM Omsättning WHERE (((kontrakt_nr)= '" & [Forms]![frm_Startmeny_Omsättning]![RedigeraOmsättning_kontrakt_nr] & "')AND (ÅrMånad BETWEEN #" & åretsFörstaMånad & "# AND #" & myÅrMånad & "#))"
Set rs = CurrentDb.OpenRecordset(strSQL)
Me.Ackumulerat_belopp = rs("Summan1")
MsgBox ("Me.AckBelopp: " & Me.Ackumulerat_belopp)
rs.Close
'Ta fram inflyttningsdatum
myRecordSet2.Open "SELECT Inflyttningsdatum FROM Kontrakt WHERE (((kontrakt_nr)= '" & [Forms]![frm_Startmeny_Omsättning]![RedigeraOmsättning_kontrakt_nr] & "'))"
inflyttningsdatum = myRecordSet2.Fields(0).Value
MsgBox ("Inflyttningsdatum: " & inflyttningsdatum)
If FörraÅretsAktuellaMånad > inflyttningsdatum Then
' Föregående års belopp för samma månad.
myRecordSet.Open "SELECT belopp FROM Omsättning WHERE (((kontrakt_nr)= '" & [Forms]![frm_Startmeny_Omsättning]![RedigeraOmsättning_kontrakt_nr] & "')AND ((ÅrMånad) = #" & FörraÅretsAktuellaMånad & "#))"
Me.MånadFörraÅret = myRecordSet.Fields(0).Value
MsgBox ("Me.MånadFörraÅret: " & Me.MånadFörraÅret)
' Ackumulerat belopp under samma tidsperiod förra året
strSQL2 = "SELECT SUM(Belopp) AS Summan2 FROM Omsättning WHERE (((kontrakt_nr)= '" & [Forms]![frm_Startmeny_Omsättning]![RedigeraOmsättning_kontrakt_nr] & "')AND (ÅrMånad BETWEEN #" & FörraÅretsFörstaMånad & "# AND #" & FörraÅretsAktuellaMånad & "#))"
Set rs2 = CurrentDb.OpenRecordset(strSQL2)
Me.Ifjol_Ackumulerat_belopp = rs2("Summan2")
MsgBox ("Me.Ifjol_Ackumulerat_belopp: " & Me.Ifjol_Ackumulerat_belopp)
myRecordSet.Close
rs2.Close
Else
MsgBox ("Ej kontrakt då")
End If
myRecordSet2.Close
myRecordSet4.MoveNext
WendSv: Beräkningar i "Flera objekt"-formulär
Du behöver göra om de obundna fälten till beräknade fält. Om vi antar att ÅrMånad innehåller den första dagen i respektive månad kan du lägga till beräknade fält enligt:
-----------------------------------------------------
Ackumulerat_belopp:
=DSumma("[Belopp]";"Omsättning";"[kontrakt_nr] = '" & [kontrakt_nr] & "' And [ÅrMånad] Between #" & DatumSerie(År([ÅrMånad]);1;1) & "# And #" & [ÅrMånad] & "#")
MånadFörraÅret:
=DSlåUpp("[Belopp]";"Omsättning";"[kontrakt_nr] = '" & [kontrakt_nr] & "' And [ÅrMånad] = #" & DatumSerie(År([ÅrMånad])-1;Månad([ÅrMånad]);1) & "#")
Ifjol_Ackumulerat_belopp:
=DSumma("[Belopp]";"Omsättning";"[kontrakt_nr] = '" & [kontrakt_nr] & "' And [ÅrMånad] Between #" & DatumSerie(År([ÅrMånad])-1;1;1) & "# And #" & DatumSerie(År([ÅrMånad])-1;Månad([ÅrMånad]);1) & "#")
-----------------------------------------------------
Det finns säkert prestandamässigt bättre sätt, men detta fungerar iallafall.Sv:Beräkningar i "Flera objekt"-formulär
Nu visas rätt värden i formuläret! Ska kolla igenom senare hur du har gjort, men just nu nöjer jag mig med att det fungerar.
Det är dock en sak med formuläret som inte ser så bra ut. Det är en extrarad längst ned och det står #Fel i dess beräknade fält.
/CarinaSv: Beräkningar i "Flera objekt"-formulär
Sv:Beräkningar i "Flera objekt"-formulär
Mycket snällt av dig att hjälpa mig!