Machine onderhoud

Status
Niet open voor verdere reacties.

NiekVdC

Gebruiker
Lid geworden
14 mrt 2016
Berichten
12
Even de schetsen zoals het zou moeten werken.
Ik beschik over een tabel van machines met bijbehorende gegevens. Voor iedere machine moet er een onderhoudsplan opgesteld worden in een andere tabel. Voor iedere machine krijg ik dan meer soorten onderhoud (smeren, controleren...). Ik krijg hier dus een één-op-veel relatie tussen de machinenummers. Nu maak ik een query waarin ik kijk (afhankelijk van de frequentie) of onderhoud nodig is. Zo krijg ik dus een ja/nee veld. De records waarvoor dit veld 'ja' is wil ik dan weergeven in een formulier met subformulier. Zo krijg ik dus voor ieder machine de soorten onderhoud die deze week moeten gebeuren. Nu wil ik echter dat dit subformulier zich iedere week aanpast, maar het lukt me niet om op basis van een query (die zichzelf aanpast na uitvoeren) een subformulier te maken. Is dit wel mogelijk?

Verder is het dan de bedoeling om een veld 'Uitgevoerd' te voorzien (ja/nee-veld). Als het onderhoud dan uitgevoerd wordt moet dat in dit veld aangepast worden. Vervolgens moet deze record (met 'ja' voor 'uitgevoerd') naar een tabel geschreven worden waarin alle onderhoud dat gebeurd is wordt bijgehouden. Ik vermoed dat ik hiervoor moet werken met een toevoegquery maar heb dit ook nog niet werkende gekregen zoals ik wou.

Iemand die mij kan helpen met wat uitleg waarop ik moet letten voor de juiste werking te krijgen. Voorstellen om anders te werk te gaan zijn ook altijd welkom :)
 
Het subformulier maken op basis van een query is ondertussen gelukt. Zal eerst iets fout gedaan hebben. :)
 
Allereerst welkom bij HelpMij! Als ik je vraag zo eens doorlees, krijg ik de indruk dat je nogal omslachtig bezig bent. Dat begint al hier:
Voor iedere machine moet er een onderhoudsplan opgesteld worden in een andere tabel.
Dat riekt alsof je voor elke machine een aparte onderhoudstabel hebt gemaakt, maar ik hoop toch dat je dat niet gedaan hebt, en dat je één tabel met Machines hebt en één tabel met Onderhoud. Maar er is meer omslachtigs:
Zo krijg ik dus een ja/nee veld. De records waarvoor dit veld 'ja' is wil ik dan weergeven in een formulier met subformulier.
Dat kan volgens mij gewoon op één formulier. Niet gelijk naar een subformulier grijpen als dat niet nodig is :).

Verder is het dan de bedoeling om een veld 'Uitgevoerd' te voorzien (ja/nee-veld). Als het onderhoud dan uitgevoerd wordt moet dat in dit veld aangepast worden. Vervolgens moet deze record (met 'ja' voor 'uitgevoerd') naar een tabel geschreven worden waarin alle onderhoud dat gebeurd is wordt bijgehouden.
Je hebt het in je vraag steeds over een Ja/Nee veld (waarschijnlijk uit je query gehaald). Dat lijkt mij totaal niet nodig, want als het goed is heb je het formulier al gebaseerd op je tabel Onderhoud en kun je dat formulier gewoon filteren op een datumbereik. Althans: dat zou ik doen. Sowieso zie je de openstaande werkzaamheden doordat die op basis van laatste onderhoud + frequentie nog geen afhandeldatum hebben.
Kortom: ik zou het formulier baseren op de datumvelden. Wil je écht gericht antwoord, dan zouden we de db moeten zien met een paar voorbeeldrecords.
 
In de volgende links zit een voorbeelddatabase en een word-document met uitleg over hoe ik het wil.
http://www68.zippyshare.com/v/tfGZWPeg/file.html
http://www68.zippyshare.com/v/jF2DH13k/file.html

In grote lijnen doet het wat ik wil. Er zijn wel nog 2 problemen die verholpen zouden moeten worden voor een goede werking.
Door de toevoegquery kan ik records die in het formulier als uitgevoerd worden aangevinkt toevoegen aan de tabel 'onderhoud uitgevoerd'. Probleem is dat deze record nog in het formulier blijft staan bij onderhoud dat nog gedaan moet worden. Wanneer de toevoegquery dan opnieuw wordt uitgevoerd wordt die record opnieuw toegevoegd. Dit is niet de bedoeling natuurlijk.
Gevolg is ook dat in de tabel 'onderhoud' deze record ook als uitgevoerd aangevinkt blijft. Wanneer over bijvoorbeeld 2 weken dit onderhoud opnieuw moet gebeuren gaat dit dus ook al als uitgevoerd aangevinkt staan. Ook dit is natuurlijk niet de bedoeling.

Heb je hier een oplossing voor? :)
 
In grote lijnen doet het wat ik wil. Er zijn wel nog 2 problemen die verholpen zouden moeten worden voor een goede werking.
Eerst maar het slechte nieuws: ik zou zo'n opzet nooit maken/gebruiken. Om te beginnen: de tabel [Onderhoud uitgevoerd] moet natuurlijk weg; het volstaat om in de tabel [Onderhoud] een veld [Datum uitgevoerd] toe te voegen. En gelijk het veld [Uitgevoerd?] te verwijderen, want dat is ook niet nodig. Net zo min als het veld [Omschrijving Machine] dat al in de tabel [Machines] zit. Nu we toch aan het weggooien zijn: het veld [Frequentie] is ook een slechte; weg ermee! Maar, hoor ik je denken, waar leg ik de frequentie dan vast? Uiteraard in de tabel [Machines]. En niet zoals je het nu doet, maar gewoon met (ik zou het met 2 velden doen) velden voor enerzijds de frequentiewaarde en de frequentiesoort. Dus een tekstveld [Soort] met opties als Jaar; Maand; Week en een getalveld met daarin de frequentie. De combinatie gebruik je dan om, liefst in combinatie met de aanschafdatum, de volgende onderhoudsbeurt te bepalen.
Daarmee vervalt ook je functie, die op deze manier misschien wel werkt, maar ook een beetje onhandig is gebouwd. Maar je hebt in ieder geval een poging gedaan een functie te maken, en dat op zich verdient uiteraard al lof :).
Kortom: met een iets betere opzet zijn de meeste van je problemen al weg voordat ze begonnen zijn!
 
Eerst maar het slechte nieuws: ik zou zo'n opzet nooit maken/gebruiken. Om te beginnen: de tabel [Onderhoud uitgevoerd] moet natuurlijk weg; het volstaat om in de tabel [Onderhoud] een veld [Datum uitgevoerd] toe te voegen. En gelijk het veld [Uitgevoerd?] te verwijderen, want dat is ook niet nodig. Net zo min als het veld [Omschrijving Machine] dat al in de tabel [Machines] zit. Nu we toch aan het weggooien zijn: het veld [Frequentie] is ook een slechte; weg ermee! Maar, hoor ik je denken, waar leg ik de frequentie dan vast? Uiteraard in de tabel [Machines]. En niet zoals je het nu doet, maar gewoon met (ik zou het met 2 velden doen) velden voor enerzijds de frequentiewaarde en de frequentiesoort. Dus een tekstveld [Soort] met opties als Jaar; Maand; Week en een getalveld met daarin de frequentie. De combinatie gebruik je dan om, liefst in combinatie met de aanschafdatum, de volgende onderhoudsbeurt te bepalen.
Daarmee vervalt ook je functie, die op deze manier misschien wel werkt, maar ook een beetje onhandig is gebouwd. Maar je hebt in ieder geval een poging gedaan een functie te maken, en dat op zich verdient uiteraard al lof :).
Kortom: met een iets betere opzet zijn de meeste van je problemen al weg voordat ze begonnen zijn!

Bedankt voor je antwoord. Het is de eerste keer dat ik echt met access werk, vandaar het amateurisme denk ik. :)
Wat betreft de frequentie had ik dit eerst zo gedaan. Praktisch probleem is dat dan alle onderhoud dat bijvoorbeeld om de 2 weken moet gebeuren in dezelfde week valt. Bedoeling is om dit wat te spreiden (week 1, 3, 5... ipv altijd week 2,4,6...).
Door de frequentie in de tabel machines vast te leggen kan ik voor ieder machine ook maar 1 frequentie voor alle soorten onderhoud invoeren. Terwijl bijvoorbeeld smeren en controleren van een machine een andere frequentie zouden moeten kunnen hebben.
Als ik een veld [Datum uitgevoerd] toevoeg in de tabel [Onderhoud]. Wanneer het onderhoud dan over 2 weken opnieuw uitgevoerd moet worden, dan staat het veld [Datum uitgevoerd] al ingevuld, terwijl dit op die moment opnieuw moet gebeuren en er een nieuwe datum moet ingevuld worden. Ieder onderhoud dat zo uitgevoerd wordt zou ook moeten worden bijgehouden in een tabel, daarom had ik de tabel [Onderhoud uitgevoerd] voorzien.
In ieder geval wil ik je al bedanken dat je (een beetje van) jouw tijd wil gebruiken om mij te helpen. :)
 
Wat betreft de frequentie had ik dit eerst zo gedaan. Praktisch probleem is dat dan alle onderhoud dat bijvoorbeeld om de 2 weken moet gebeuren in dezelfde week valt.
Daar zou ik niet zo snel last van hebben; zoals ik al aangaf zou ik op basis van de registratiedatum het onderhoudschema bepalen. Heb je die datum niet, omdat je alleen een jaar vastlegt (zoals je nu ook doet) dan kun je een startweek ingeven. Of, als het toch tweewekelijks gaat, Even of Oneven om de week te bepalen. Kortom: dat is simpel op te lossen.
Door de frequentie in de tabel machines vast te leggen kan ik voor ieder machine ook maar 1 frequentie voor alle soorten onderhoud invoeren.
Dat is ook simpel op te lossen door de frequentie in een tabel [OnderhoudsProducten] vast te leggen. Zou ik sowieso doen, want het is veel beter om in de tabel [Onderhoud] een MachineID en een ProductID vast te leggen. Ik ging eigenlijk alleen maar uit van de db die je nu hebt gepost, niet van een optimale situatie.
Wanneer het onderhoud dan over 2 weken opnieuw uitgevoerd moet worden, dan staat het veld [Datum uitgevoerd] al ingevuld ...
Hier geef je zelf al aan wat het huidige probleem is. Je database is nog niet genormaliseerd. Je moet, voordat je überhaupt aan data invoer toekomt, eerst je stamtabellen op orde hebben. En daarmee bedoel ik: de basismaterialen waarmee je werkt. Dat zijn dus tabellen als:
1. Medewerkers. De vaste mensen die je aan klussen gaat koppelen. Ik neem tenminste aan dat die er zijn :).
2. Klanten. Er vanuit gaande dat een klant vaker terugkomt, heb je een klantentabel nodig. Zo niet, als het om eenmalige werkzaamheden gaat, dan zou je dat nog anders kunnen oplossen. Werk je intern, dan is de tabel ook niet nodig.
3. Producten. In jouw geval: onderhoudsproducten. Welke producten zitten in de catalogus, welke prijs, welk schema etc.
4. Machines. De machines die je in onderhoud hebt.
5. Leveranciers. Je zult vast onderdelen etc. moeten bestellen, en die moeten ergens vandaan komen.
6. Materiaal. Dat zou bij mij een tabel zijn met materialen die je nodig hebt om het onderhoud te kunnen uitvoeren. Daar zit ook een stukje vooraadbeheer achter. En een link met Leveranciers.

En zo kan ik nog wel even doorgaan :).
Als de stamtabellen in orde zijn, ga je kijken welke datastromen je hebt. Eén heb je er al: je hebt machines en daar heb je onderhoud op. Daar heb je dus een koppeltabel voor nodig. In jouw geval is dat de tabel [Onderhoud]. Elke keer dat een machine in onderhoud is, kies je in die tabel een machien, een product en vul je de onderhoudsdatum in. Daarbij geldt: elke machine kan meerdere keren in onderhoud en voor meerdere producten. Je krijgt dus een één-op-veel relatie tussen de tabel [Machines] en [Onderhoud] en de tabel [Producten] en [Onderhoud]. En dat lost dus jouw laatste probleem volledig en netjes op :).

Overigens is de Quote knop geen antwoord knop. Alleen quoten als je (inderdaad: ) een quote gebruikt :).
 
Overigens is de Quote knop geen antwoord knop. Alleen quoten als je (inderdaad: ) een quote gebruikt :).
Oké ik zal er rekening mee houden. ;)

Nogmaals bedankt voor je antwoord, al ben ik niet met alles mee wat je bedoelt. Het kost waarschijnlijk te veel tijd om je voorstellen een beetje in de praktijk te brengen? :o
In ieder geval ga ik aan de slag met je antwoord! :)
 
Ik kan je voorbeeldje wel een beetje opfrissen, als je dat bedoelt :).
 
Haha dat mag altijd, iemand die de database de juiste richting induwt is sowieso handig! :)
Ik heb het gevoel dat er te veel gaten in mijn access-kennis zitten om de database volledig functioneel te maken... :) Heb je toevallig online studiemateriaal dat ik eens kan doornemen?
 
Kijk eens in de Handleidingen sectie :). Daar staat een cursus die ik geschreven heb voor HelpMij. Met name de eerste hoofdstukken zijn vrij algemeen, en gaan over het opzetten van de database.
 
Heb nog een ander vraagje.
Zit nu dus met een formulier met subformulier. In het formulier staat telkens het machinenummer met de nodige gegevens. In het subformulier staat dan het onderhoud dat er die week aan uitgevoerd moet worden.
Op dit moment worden alle machines in dit formulier weergegeven. Nu zou ik enkel de machines willen waar effectief onderhoud voor nodig is in die week. Dus enkel de machines in het formulier waar ook effectief records in het subformulier voor zijn. :)
 
Als het goed is kun je voor alle machines de volgende onderhoudsbeurten uitrekenen op basis van frequentie en startdatum/week. Dan weet je dus ook of die komende datum in een bepaalde week valt of niet. Ik zou een veld maken in de query die van die volgende onderhoudsdatums het weeknummer berekent (met jaartal erbij zodat je de juiste jaren hebt) en die berekening filteren op dezelfde formule op basis van de huidige datum. Dan zie je altijd wat er die week moet gebeuren.
 
Ik denk dat ik al heb wat je bedoelt. Het subformulier is gebaseerd op een query waar enkel records instaan van onderhoud dat moet gebeuren. Iedere record is dan gekoppeld aan een machine (gegevens van de machine staan dan in het formulier).
Probleem is dat in het formulier alle machines getoond worden. Ook deze waar geen onderhoud op nodig is in die week (het subformulier is dan leeg).
Ik zou dus willen dat alleen de machines getoond worden die geen leeg subformulier hebben. Hoop dat je snapt wat ik bedoel en dat ik jou ook begreep zoals je het bedoelde :)
 
Ik zit met een rapport en een formulier gebaseerd op dezelfde query. Ik zou willen dat door te dubbelklikken op de bonnummer in het rapport, het formulier wordt geopend in de record met die bonnummer.
Ik weet dat ik hiervoor bij BonNummer->Gebeurtenis->Bij dubbelklikken moet zijn. Maar kan iemand mij helpen met de code die hier achter moet zitten? :)
 
Ik zou willen dat door te dubbelklikken op de bonnummer in het rapport, het formulier wordt geopend in de record met die bonnummer.
Lijkt mij de verkeerde weg: je opent een rapport op basis van een formulier, niet andersom.
 
Weet ik, heb ik ook tegen mijn baas gezegd. Hij wil het rapport als overzicht gebruiken en het formulier om de details te bekijken en in te vullen.
Ik probeer maar gewoon te maken wat mijn baas mij verteld. :)
Is het wel mogelijk om dit zo te maken? :)
 
Ik probeer maar gewoon te maken wat mijn baas mij verteld. :)
Een opdrachtgever (en dat is de baas in dit geval lijkt mij) mag best uit onwetendheid bepaalde zaken willen; het is aan de ontwerper om dan te zeggen of iets kan of niet. In dit geval moet je toch echt zeggen: "sorry baas, dat gaat 'm toch echt niet worden." Maak desnoods een formulier waarop hij zijn overzichten ziet en open van daaruit het detailformulier. Rapporten zijn afdrukweergaven. Bedoeld dus om naar papier te sturen. Een eindproduct. De baas ligt toch ook niet de hele dag in een kist onder het motto: vroeg of laat kom ik hier toch terecht, dus laat ik er maar vast gaan liggen? :).
 
Oké ik ga een gewoon een tabel waar maar een beperkt aantal velden instaan als overzicht gebruiken. Wil je me nu wel helpen met de code die hierachter moet zitten dan? :D
 
Oké ik ga een gewoon een tabel waar maar een beperkt aantal velden instaan als overzicht gebruiken.
Maar dat hoeft toch niet?
Ik zit met een rapport en een formulier gebaseerd op dezelfde query.
Je hébt die informatie toch al? Maak op basis van die query een doorlopend formulier, en maak van de records een knop waarmee je het betreffende detailrecord opent. Of zet er een kleine knop achter, of een dubbelklik actie op een veld. Het gaat er om dat de baas een net overzicht ziet, en dan één record opent. Toch? Of snap ik het verkeerd?
Nog makkelijker: maak op basis van die query een keuzelijst, waar je dan ook een klikactie gebruikt om het betreffende record te openen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan