Planningsagenda in ACCESS

Status
Niet open voor verdere reacties.

RadboudAKF

Gebruiker
Lid geworden
3 nov 2010
Berichten
219
Wij gebruiken hier (in onze ZiekenhuisApotheek) OUTLOOK ('97) om te plannen dat we (voorbeeld) iedere week aan een bepaalde patient (in de thuissituatie) een bepaald middel moeten leveren. In Outlook is het volgens de gebruikers niet mogelijk om overzichten uit te draaien om bv. de vraag te beantwoorden: "Laat zien wat er voor het huidig jaar voor patient Janssen is geplanned aan leveringen"

Nu ben ik van plan om dat in een Access dB te gooien.

Daar liep ik dan meteen tegen het volgende aan:

Ik plan voor Patient Janssen op Maandag (19/5) een eerste levering voor een bepaald geneesmiddel. Dat kan ik in een tbl-Leveringen opslaan, en een keurig rapportje van draaien. Nu wil men bij het invoeren van een dergelijke levering meteen aangeven dat dat iedere maand (of iedere vier weken) op de maandag gebeurt. (met bv. einddatum over 5jaar of zo) . Men wil dat dus plannen als de eerste levering wordt geplanned. Ik heb even gezocht maar heb geen idee hoe ik daar een query voor kan bouwen (anders dan een ingewikkelde query die steeds vier weken optelt bij de laatste datum).

Weet iemand of daar iets slims voor is? Een functie of zo, die immers ook in OUTLOOK z'n werk doet waarbij Outlook vraagt hoe er moeten worden doorgeplanned.

Ik hoop dat ik dit een beetje begrijpelijk heb opgeschreven. Zou heel blij zijn als iwemand hier een idee voor heeft.

Met vr.gr.

Jan
Nijmegen
 
Volgens mij kun je in Outlook wel degelijk een overzicht laten zien van actuele afspraken, maar dat staat een beetje buiten je vraag. En sowieso is het minder controleerbaar dan in Access, dus ik snap dat je het naar Access wilt brengen. Outlook werkt uiteraard heel anders met herhalingspatronen, dus het systeem van Outlook werkt niet in Access.
Je vraag is eigenlijk best simpel, alleen heb je volgens mij weinig aan een query. D.w.z.: elke medicijnlevering is van zichzelf al een entiteit die je op moet slaan. Je kunt wel bij een patiëntenrecord aangeven dat hij/zij gedurende een vaste periode de medicijnen moet hebben, maar op basis daarvan kun je geen query met datums maken, daar heb je namelijk ook een tabel met datums voor nodig die je matcht met het herhalingspatroon. En dat is een lastige klus, al is het wel te doen. Maar je moet dus ofwel die tabel fysiek opnemen in je database, ofwel een virtuele tabel met datums maken.
Beter is het dus om een aparte Patient_Medicijn tabel te maken waarin je fysieke records maakt voor elke levering. En die records kun je met een functie wel invoeren op basis van de gegevens die je invoert, zoals het herhalingspatroon (elke 4 weken, 1e maandag van de maand etc. en de einddatum).
 
Hoi Jan,
Wij hebben hier (ziekenhuisapotheek vlietland ;) geen levering thuis medicatie maar natuurlijk wel wat planmatig. Ik heb wel een vba code die een record kopieerd en dan de planningsdatum een jaar (of een maand opschuift). Als ik iets afrond druk ik op de knop om een nw record=planning aan te maken.

Code:
Private Sub kopienw_Click()
Refresh
'maak een clone van recordset
With Me.RecordsetClone
'zoek huidig record in recordcloneset
    .FindFirst "IdVMP = " & Forms!vmpnw!IdVMP
'maak een nieuw record
    DoCmd.GoToRecord , , acNewRec
'vul de naam in nieuw record met naam uit clone
    Me.inventarisnr = !inventarisnr
'vul de datum in nieuw record met datum uit clone+1jaar
    Me.OnderhoudValidatie = !OnderhoudValidatie
    Me.soortOnderhoudValidatie = !soortOnderhoudValidatie
    Me.Afdeling = !Afdeling
    Me.proces = !proces
    Me.Uitvoerder = !Uitvoerder
    Me.Planningsdatum = DateAdd("yyyy", 1, FormatDateTime(!Planningsdatum, vbShortDate))
    Me.omschrijving = !omschrijving
  'me.jaartal toegevoegd 130912JM
    Me.Jaartal = DatePart("yyyy", DateAdd("yyyy", 1, !Planningsdatum))
   
    
End With
'niet nodig? Me.Repaint
'refresh het formulier en tabel
    Me.Refresh

    
End Sub
 
Ik ga met alle suggesties aan de slag.

Michel: Dank voor jouw suggestie om een "tabel met datums (te maken) die je matcht met het herhalingspatroon" . Weet niet helemaal zeker of ik dit begrijp. Maar ik begrijp ook dat dit best lastig is....dus misschien moet ik maar een andere weg kiezen. Ik zou niet weten hoe ik jouw sufggestie zou moeten maken.

Jouw opmerking: "Volgens mij kun je in Outlook wel degelijk een overzicht laten zien van actuele afspraken" intigreerde mij wel. Men heeft in OUTLOOK dus een plannig gemaakt voor Patient JANSSEN (2 jaar lang op maandag). Men kan wel een uitdraai maken, maar voor zover ik weet is dat dan een overzicht PER DAG (dus alle afleveringen voor die dag) en niet voor PATIENT JANSSEN.(dus patient Janssen alle data tot 1-5-2016) Als jij weet dat dat wel kan: ik houd mij voor alle tips aanbevolen. Ik kan deze vraag misschien beter op het OUTLOOK-forum gaan stellen (?)

JWAQUE: (collega ziekenhuisapotheek-medewerker). Jouw suggestie om dit met vba code te proberen is interessant...ook hier ga ik naar kijken.

Zeer bedankt...

Jan
 
Knipsel.PNGin outlook kan je wel een overzicht exporteren. je zou dan de patient naam bv in de categorie kunnen zetten.

je kan ook de code van het kopieren van een record in een whil do loop lus zetten. In de nieuwe planningsdatum neem je dan je frequentie op. loopje stopt alleen nog niet dus hij moet nog wat verbeterd worden. in een txt veld op je formulier geef je dan de frequentie aan in weken.de if loop werkt beter.

Code:
Do While Me.Planningsdatum < Me.txtstopdatum
code
                
            

      Loop

Code:
'aantal weken tussen stop en start planning
aantalweken = DateDiff("ww", Me.Planningsdatum, Me.txtstopdatum)
'regels aantemaken is aantalweken/frequentie
aantalregels = aantalweken / Me.txtfrequentie

For i = 1 To aantalregels

            Refresh
            'maak een clone van recordset
            With Me.RecordsetClone
            'zoek huidig record in recordcloneset
                .FindFirst "IdVMP = " & Forms!VMPnw!IdVMP
            'maak een nieuw record
                DoCmd.GoToRecord , , acNewRec
            'vul de naam in nieuw record met naam uit clone
                Me.inventarisnr = !inventarisnr
            'vul de datum in nieuw record met datum uit clone+1jaar
                Me.OnderhoudValidatie = !OnderhoudValidatie
                Me.soortOnderhoudValidatie = !soortOnderhoudValidatie
                Me.Afdeling = !Afdeling
                Me.proces = !proces
                Me.Uitvoerder = !Uitvoerder
                Me.Planningsdatum = DateAdd("ww", Me.txtfrequentie, FormatDateTime(!Planningsdatum, vbShortDate))
                Me.omschrijving = !omschrijving
              'me.jaartal toegevoegd 130912JM
                Me.Jaartal = DatePart("yyyy", DateAdd("yyyy", 1, !Planningsdatum))
                           
            End With
            'niet nodig? Me.Repaint
            'refresh het formulier en tabel
                Me.Refresh
                
                
      Next
 
Laatst bewerkt:
JWAQUE: Interessant, exporteren uit OUTLOOK in een EXCEL-format-achtige-opmaak. Hoe doe je dat? Ik zie wel opslaan als: txt of als WebPagina. Ook onze secretaresse heeft geen idee hoe je dit doet....en dat zijn toch Outlook-experts (heb ik altijd gedacht)

Groet,

Jan
 
Foutje....wij hebben 2007!

Ik zit nu op het spoor van het vb-scriptje. Ben daar iets aan het maken wat (bij het testen) soms wel en soms niet 'loopt'. (Nog niet goed dus). Ik laat weten als ik wat stappen verder ben.

Ik heb nu de gedachte als volgt:

Ik heb een planningstabel "Tabel1"

Met een formulier bepaal ik de startdatum, de naam van de patient, en het herhalingspatroon.(knoppen met verschillende scriptjes erachter). Met een index bepaal ik hoe vaak de (in dit geval) 4-wekelijkse herhaling wordt gedaan.
Dus stel in het geval dat ik de vier-wekelijkse cyclus 12 keer wil herehalen dan schrijf ik:

Private Sub Knop7_Click()

Do While Me.index <= 12

With Me.RecordsetClone

'zoek huidig record in recordcloneset

.FindFirst "Id = " & Me.Id

'maak een nieuw record

DoCmd.GoToRecord , , acNewRec

Me.Patientnaam = !Patientnaam

Me.datum1 = !datum1 + 28

Me.index = !index + 1

End With

Loop

Me.Refresh

End Sub

Helaas: ik krijg dit nog niet aan de praat. Als ik de patientnaam wil kopieren dan krijg ik een foutmelding. Vervolgens werd dit patroon tot in het oneindige herhaald. Ik maak een fout maar weet nog niet waar.

Misschien is er iemand die mijn 'klungelige' vb-schriptje verbetert? Ik zal dankbaar zijn, ik merk dat mij dit veel tijd gaat kosten.
 
Zou je de code willen opmaken met de CODE knop? Dit is niet echt handig voor vb code.
 
Octafish / Michel,

Bedoel je dat het niet handig is om de vbCode te starten met een knop in het access-formulier? Ik krijg het weliswaar niet 'aan de praat' maar snap ook niet wat je bedoelt met "code" knop.

Zou ik straks mijn opzetje (een kleine ACCDB met één tabel en één formuliert mogen plaatsen? Misschien dat het dan 'helderder' wordt wat ik wil.

Jan
 
Het gaat mij om de opmaak van je code in bericht #8. Die is niet goed opgemaakt. Maar een voorbeeldje is natuurlijk sowieso de snelste weg naar een antwoord :).
 
Bekijk bijlage Agenda_Test.zipIk heb hier een voorbeeldje (wat wonder boven wonder) blijkt te lopen.

De database opent met het planningsformuliertje (waar al een patientnaam en startdatum is ingevuld) en door dan een optie (één van de knoppen) te kiezen worden in de tabel nieuwe records aangemaakt (die ik hierna naar een andere tabel kopieer) en vervolgens weer leegmaak (om een nieuwe planning te maken voor een nieuwe patient).

Ik vraag me af of deze code voor verbetering vatbaar is. (ik had zojuist ook al dat ik niet meer uit de 'loop' kwam en er een oneindig aantal record wordt aangemaakt. (Kennelijk stond de loop op de verkeerde plek)

Dank voor het inzien van mijn 'klungelig vb-scriptje'....heb daar nauwelijks ervaring mee.

Jan
 
Fijn dat je het voor elkaar hebt, al help je lezers natuurlijk meer door ook te vertellen hoe je het probleem hebt opgelost! Overigens, op basis van jouw voorbeeld, was ik zelf ook al aan het werk gegaan, en ik heb een hele andere (en volgens mij betere) werkwijze gemaakt die je maar eens moet bekijken, ik wou je hem niet onthouden.
Het principe ervan is in ieder geval dat ik vind dat je de tabel niet genormaliseerd hebt, en dat zou wel moeten. Verder heb je de toevoegtermijn niet zo flexibel opgelost, en dat is in mijn voorbeeld wel het geval (kijk maar eens naar de naam op de knop bijvoorbeeld als je door de records loopt).
Ter lering ende vermaeck dus :)
 

Bijlagen

Michel, ik denk dat il het met je eens moet: jouw script is zeker beter dan de oplossing die had bedacht. Ik kijk ernaar. Ik ben overigens zeer vóór "lering ende vermaack". Maar mijn klungelig scriptie van hierboven, tsja dat is tevens de oplossing die ik had bedacht. Maar als ik jouw oplossing zie, dan was mijn "kinderhand te snel gevuld". Dank daarvoor....
 
Michel,

Ik heb jouw Agenda_Test.rar bekeken (waarvoor dank) maar ik begrijp niet goed wat hier nu gebeurt met cyclusnummers etc. Eén en ander gaat mij boven 'de pet'. Bovendien krijg ik steeds fout-meldingen die ik niet begrijp. Ook merk ik dat er steeds 4-wekelijkse planningen worden aangemaakt, terwijl er ook andere varianten moeten kunnen worden ingevuld. Het vervelende is dat ik de foutmelding "Ongeldig gebruik van NULL" niet begrijp.

Wat ik ook zie (als toepassing niet vastloopt) is dat de eerste datum (de planningsdatum) niet wordt 'meegeplanned'.

Ik snap ongeveer wat je met deze oplossing beoogt, het ziet er ook mooi uit, maar ik wil de foutmeldingen kunnen doorgronden en dat doe ik niet. Ik denk dat ik maar gewoon met mijn simpele oplossing blijf werken en dat later eens poog te begrijpen hoe jouw oplossing in elkaar steekt.

Nogmaals, zeer veel dank. (Ik moet dat VBA toch maar eens gaan doorgronden)
 
Laatst bewerkt:
Ik snap je foutmeldingen niet helemaal, want die krijg ik niet (werk noch thuis). De cyclus die wordt gemaakt is afhankelijk van wat je in de tabel bij de patiënt opslaat. Als je het veld [Cyclusduur] verandert (van 4 naar 6 bijvoorbeeld) dan past de toevoegquery zich daarop aan. Maar dat gebeurt nu nog niet automatisch, en dat komt omdat er alleen bij het bladeren naar de ingestelde waarde wordt gekeken. Die kun je wel 'live'bijwerken met deze aanpassing:
Code:
Private Sub Cyclus_Change()
Dim i As Integer
    On Error GoTo Foutje
    If Len(Me.Cyclus.Text) = 0 Then Me.Cyclus.Text = 0
    If Me.Dirty Then Me.Dirty = False
    Me.Repaint
    i = DLookup("[CyclusDuur]", "[tPatient]", "[PatientID]=" & Me.PatientID)
    Me.cmdMedicatie.Caption = "Iedere " & i & " weken gedurende 1 jaar"

Foutje:
End Sub
 
Michel,

Hoewel ik zeer mijn best doe om dit te snappen....je begrijpt het al. Dit gaat mij niet lukken, er staan gewoon dingen in die ik niet begrijp. Jammer....want jouw oplossing lijkt wel heel fraai.

Jan
 
Wat precies snap je niet? Ik kan natuurlijk altijd proberen het wat simpeler uit te leggen :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan