Veld dubbel gebruiken

Red-EagleRed-Eagle Member Posts: 107
edited 2012-10-09 in NAV Dutch speaking only
Ik ben een rapport aan het maken, waarbij er bij een gekozen project een element moet worden weergeven. Dit op zich is niet moeilijk, maar ik wil er teksten tussen doen, waarbij een voorwaarde gecreerd wordt waar een element aan moet voldoen.

Bijvoorbeel:

Kast
element 01.10.0100
element 01.10.0200

Bekabeling
element 01.20.0100
element 01.20.0200


Als in het element *.10.* voorkomt dan moet het element worden weergeven onder kast en als het element *.20.* moet het element worden weergeven worden onder bekabeling. Daarnaast moet element *.10.0000 worden uitgesloten.

Het zijn dus eigenlijk twee tabellen, dus naast element komt nog een omschrijving, datum etc.

Dit is wat ik nu heb gecreerd, maar dit functioneert nog van geen kanten:


"Project Element".SETRANGE("Project No.", Job."No.");

IF "Project Element".FIND('-') THEN BEGIN
IF STRPOS("Project Element".Element,'.10.') > 0 THEN
elementkast := "Project Element".Element;
omschrijvingkast := "Project Element".Description;
END ELSE BEGIN
IF STRPOS("Project Element".Element,'.20.') > 0 THEN
elementbekabeling := "Project Element".Element;


IK weet niet of het nodig is om de element steeds een ander naam te geven (elementkast en elementbekabeling) en of je dit ook bij de velden moet doen die erbij horen.

Ik hoop dat het een beetje duidelijk is, in ieder geval alvast bedankt voor de hulp

Comments

  • KYDutchieKYDutchie Member Posts: 345
    Hi,

    Dit is niet zo moeilijk maar het is wel moeilijk om uit te leggen, zeker omdat mijn Nederlands hard aan achteruit gaan is. ](*,)
    Ik zou zeker kijken is of het mogelijk is om een tijdelijk (temporary = Yes) record variabele te definieren met de "Project Element" als de tabel.
    Dan kan je deze tabel gebruiken om tijdelijk je gegevens in op te slaan. Ik zou dan het veld "Project No." misbruiken om "Kast" of "Bekabeling" in op te slaan en dan de rest van dit record zou een kopie kunnen zijn van het originele element record.
    De sleutel van zo'n tijdelijk record zou er dan alsvolgt uitzien:
    1. Project No. : "Kast"
    2. Element. No. : "01.10.0100"

    Dan kan je deze tabel gebruiken als een dataitem in een rapport sectie.
    Je kan deze tijdelijke tabel als volgt vullen:
    TijdelijkElement.RESET;
    TijdelijkElement.DELETEALL;
    "Project Element".SETRANGE("Project No.", Job."No.");
    
    IF "Project Element".FINDSET(FALSE,FALSE) THEN BEGIN
      REPEAT
        CLEAR(TijdelijkElement);
        TijdelijkElement.INIT;
        CASE TRUE OF
          STRPOS("Project Element".Element,'.10.') > 0: TijdelijkElement."Project No." := 'KAST';
          STRPOS("Project Element".Element,'.20.') > 0: TijdelijkElement."Project No." := 'BEKABELING';
          .... // Andere mogelijke element types
        END;
        IF TijdelijkElement."Project No." <> '' THEN BEGIN
          TijdelijkElement."Element" := "Project Element".Element;
          TijdelijkElement."Description" :=  "Project Element".Description
          ... //andere velden als benodigd
          IF TijdelijkElement.INSERT THEN;
       END;
      Until "Project Element".Next = 0;
    END;
    

    Ik hoop dat dit je op de goede weg zet.

    Met vriendelijke groet,

    Willy
    Fostering a homeless, abused child is the hardest yet most rewarding thing I have ever done.
  • Red-EagleRed-Eagle Member Posts: 107
    Willy

    Bedankt voor je reactie, ik zal het binnenkort (waarschijnlijk volgende week) eens uittesten.

    Met je nederlands is trouwens weinig mis.
  • Red-EagleRed-Eagle Member Posts: 107
    Beste Willy,

    Het werkt nog niet echt. Voorlopig blijft het rapport pagina's creeren. Wat heb ik gedaan. Ten eerste heb ik onder dataitems een integer aangemaakt die hangt onder project. (Volgens mij moet ik hier nog een koppeling maken met de tijdelijke tabel in c/al code). In deze integer heb ik bij de code jouw code geplakt:



    Integer - OnPreDataItem()
    TijdelijkElement.RESET;
    TijdelijkElement.DELETEALL;
    "Project Element".SETRANGE("Project No.", Job."No.");

    IF "Project Element".FINDSET(FALSE,FALSE) THEN BEGIN
    REPEAT
    CLEAR(TijdelijkElement);
    TijdelijkElement.INIT;
    CASE TRUE OF
    STRPOS("Project Element".Element,'.10.') > 0: TijdelijkElement."Project No." := 'KAST';
    STRPOS("Project Element".Element,'.20.') > 0: TijdelijkElement."Project No." := 'BEKABELING';
    // Andere mogelijke element types
    END;
    IF TijdelijkElement."Project No." <> '' THEN BEGIN
    TijdelijkElement.Element := "Project Element".Element;
    TijdelijkElement.Description := "Project Element".Description;
    //andere velden als benodigd
    IF TijdelijkElement.INSERT THEN;
    END;
    UNTIL "Project Element".NEXT = 0;
    END;


    Daarnaast heb ik bij C/AL Globals de tijdelijkelement aangemaakt met record project element. Vervolgens heb ik op het rapport in de section Integer body een veld uit deze tabel geplakt, helaas verschijnt er bij draaien van het rapport nog niks.

    Tevens zit ik nog met een ander probleem wat denk ik nog niet helemaal duidelijk is. Hoe krijg ik het voor mekaar dat ik twee kopjes kan maken en daar de informatie onder krijg. Dus eerst de kast met de elementen die daar aan voldoen en vervolgens de bekabeling met de elementen die daar aan voldoen.

    Kast omschrijving datum uren
    element 1
    element 2
    etc


    Witte regels in rapport

    Bekabeling omshrijving datum uren
    element 1 (die voldoen aan de voorwaarde kast)
    element 2 (die voldoen aan de voorwaarde kast)

    Hopelijk is het zo wat duidelijker.
  • MBergerMBerger Member Posts: 413
    Om eerlijk te zijn denk ik dat je beter aan je data model kunt sleutelen. Wat je hier doet, een betekenis geven aan een deel van een veld, moet je niet doen. Stop deze betekenis in een apart veld, zodat je later geen problemen krijgt al bijvoorbeeld later de sleutel wijzigt d.m.v. een RENAME, of wanneer men beslits een andere vorm van naamgeving te gaan gebruiken. Op deze manier kun je Navision de koppeling laten leggen en hoef je het niet via code te doen.
Sign In or Register to comment.