Ga naar inhoud
  • 0

Hoe een sum bij te werken bij wijzigen van een waarde


marspan

Vraag

Wij hebben o.a. één database met begrotingsregels. Het is mogelijk per begroting begrotingsregels, subtotaalregels en totaalregels te maken.

 

De regels weten wat ze zijn door een statusveld, dat de waarde 'b', 's' of 't' kan hebben. De 's'ubtotaalregels weten welke begrotingsregels ze onder zich hebben, via de interne relatie 'totalen'.

 

De berekening van het subtotaalbedrag is grofweg:

sum( totalen::bedrag ).

 

Wanneer je nu het bedrag op een begrotingsregel wijzigt, zou het mooi zijn als het subtotaal wordt bijgewerkt. In FMP 6 werkte dat, in 9 niet.

Een refresh screen is voldoende om de berekeningen te updaten, maar dat vereist een aparte handeling.

 

Het binnengaan van een bedragveld op een begrotingsregel loopt via een script. In dat script heb ik geprobeerd om op de subtotaalregel een trigger te zetten en de calc van het subtotaal aangepast in:

case( trigger ; 0 ) + sum( totalen::bedrag ). Dat helpt niet.

 

Wie heeft er een hint?

Link naar reactie

12 antwoorden op deze vraag

Aanbevolen berichten

  • 0

Het script gaat alleen het veld in, niet er uit, dus op dat moment is er nog geen getal gewijzigd en helpt een flush of refresh niet.

 

Als het script een dialoog zou tonen om het getal te wijzigen is er natuurlijk geen probleem, dan handel je het hele proces af in dat script en kun je eindigen met een refresh screen of flush cache to disk.

 

Maar wij proberen dat zo lang mogelijk te vermijden.

Link naar reactie
  • 0

Als de Refresh Window met Flush cached join Results niet helpt is dat een teken dat er iets fout zit met de manier waarop de relatie gemaakt is of TO waar je berekeningsveld op steunt.

 

Ik denk niet dat het probleem dat er op dit gebied was in versie 7 nog aanwezig is in versie 9. De gebruikte workaround kunnen we dus vergeten hier.

Link naar reactie
  • 0

Als je aan het eind van het script het veld uit zou gaan, heeft de gebruiker nog niets kunnen invoeren, en daar was het nu juist om te doen. Bovendien zou het niet helpen.

En met de interne relatie is ook niets mis, die werkt, maar pas na een refresh screen o.i.d.

 

Om aan de onduidelijkheid van het probleem (hopelijk) een eind te maken, voeg ik een zo eenvoudig mogelijk voorbeeldbestand bij.

 

Uitleg

Het gaat om een begroting. Die bestaat uit een lijst met begrotingsregels en subtotaalregels. De subtotaalregels moeten de begrotingsregels die ze onder zich hebben optellen.

Elke regel heeft een 'item'-kenmerk dat de begroting ordent.

Een subtotaalregel heeft bijvoorbeeld item '1' en dan vallen automatisch de b-regels met item 1.1, 1.2, 1.3 etc. onder dat subtotaal. Het gaat om die punt in het item.

Het voorbeeldbestand heeft ingevulde regels, dat maakt het duidelijk.

 

- Elke regel moet een regeltype hebben, 's' of 'b'.

- Op elke regel moet 'item' zijn ingevuld. Bij de 's'-regels moet dat een los getal zijn (1, 2 etc.) , bij de 'b'-regels die onder een 's'-regel vallen moet er een punt in staan.

- De 's'-regels sommeren de 'b'-regels die er onder vallen.

- Je kunt alleen aantal en tarief invoeren; bedrag = aantal x tarief.

Sumtest.fp7.zip

Link naar reactie
  • 0

Kan het gebruik van Doscript ( http://myfmbutler.com/index.lasso?p=416 ) geen oplossing zijn?

 

Als je het veld bedrag_c voorziet van de volgende wijziging samen met de toevoeging van de doscript plugin dan ververst het totaal veld automatisch:

 

Let ( queueScript = mFMb_DoScript( "refresh" ) ;

 

aantal * tarief

 

)

 

Waarbij "refresh" een simpel script is met de refresh screen scriptstap. Welke nu onder de button staat.

Link naar reactie
  • 0

Dat over Osborne gezegd hebbende, toch de oplossing gevonden.

 

Gemaakt: mutatieTijd, global, auto-entry wijzigingstijd.

 

Veranderd: aantal_T =

Case(

regelType = "b"

; aantal

;

Case(mutatieTijd ; Sum ( regels_SUM::aantal ) )

)

 

En dat werkt als een zonnetje!

Link naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...