Matrix Form met header gevuld met gegevens uit andere tabel

rtamesrtames Member Posts: 56
edited 2011-07-13 in NAV Dutch speaking only
Een matrix formulier maken dat lukt mij maar de volgende lukt mij niet.

Ik probeer de volgende matrix formulier te maken maar weet niet hoe ik moet beginnen:

Ik wil vanuit tabel "document" de velden Docnr. | nr. | wijzigingsdatum en vanuit tabel "Document Link" (gekoppeld middels docnr.) het veld projectnr. aan de linkerkant van de Matrix plaatsen.(tijdelijke tabel?)

vanuit tabel vendor wil ik alle leveranciersnamen in de header plaatsen

Nu wil ik doormiddel van aankruisvelden aangeven dat een document gekoppeld is aan een leverancier en deze opslaan in een derde tabel.

elke keer als ik de matrix weer open dienen dan uiteraard de vinkjes op de juiste plek te staan.

is dit mogelijk?

Comments

  • MBergerMBerger Member Posts: 413
    Ja, dat is te doen. Het uitleggen is een beetje lastig, vandaar heb ik een simpel voorbeeld in elkaar gezet waarmee je een relatie tussen een klant en een leverancier kunt aangeven, die wordt opgeslagen in een derde tabel.
    OBJECT Table 50000 Customer-Vendor relation
    {
      OBJECT-PROPERTIES
      {
        Date=27-05-11;
        Time=10:04:01;
        Modified=Yes;
        Version List=;
      }
      PROPERTIES
      {
      }
      FIELDS
      {
        { 1   ;   ;Customer No.        ;Code20         }
        { 2   ;   ;Vendor No.          ;Code20         }
      }
      KEYS
      {
        {    ;Customer No.,Vendor No.                 ;Clustered=Yes }
      }
      CODE
      {
    
        BEGIN
        END.
      }
    }
    
    OBJECT Form 50000 Customer-Vendor relation
    {
      OBJECT-PROPERTIES
      {
        Date=27-05-11;
        Time=10:13:17;
        Modified=Yes;
        Version List=;
      }
      PROPERTIES
      {
        Width=20790;
        Height=13860;
        SourceTable=Table18;
      }
      CONTROLS
      {
        { 1100481000;MatrixBox;220;440  ;20350;13200;Name=Matrix;
                                                     HorzGlue=Both;
                                                     VertGlue=Both;
                                                     MatrixColumnWidth=1980;
                                                     MatrixSourceTable=Table23;
                                                     OnAfterGetRecord=BEGIN
                                                                        HasRelation := Relations.GET(Rec."No.",CurrForm.Matrix.MatrixRec."No.") ;
                                                                      END;
                                                                       }
        { 1100481001;TextBox;318  ;4510 ;1700 ;440  ;ParentControl=1100481000;
                                                     InColumn=Yes;
                                                     SourceExpr="No." }
        { 1100481002;Label  ;0    ;0    ;0    ;0    ;ParentControl=1100481001;
                                                     InColumnHeading=Yes }
        { 1100481003;TextBox;2018 ;4510 ;4400 ;440  ;ParentControl=1100481000;
                                                     InColumn=Yes;
                                                     SourceExpr=Name }
        { 1100481004;Label  ;0    ;0    ;0    ;0    ;ParentControl=1100481003;
                                                     InColumnHeading=Yes }
        { 1100481005;CheckBox;13675;5170;13090;440  ;ParentControl=1100481000;
                                                     InMatrix=Yes;
                                                     ShowCaption=No;
                                                     SourceExpr=HasRelation;
                                                     OnAfterValidate=BEGIN
                                                                       IF HasRelation THEN
                                                                         BEGIN
                                                                           Relations.INIT ;
                                                                           Relations."Customer No." := Rec."No." ;
                                                                           Relations."Vendor No." := CurrForm.Matrix.MatrixRec."No." ;
                                                                           Relations.INSERT(TRUE) ;
                                                                         END
                                                                       ELSE
                                                                         BEGIN
                                                                           Relations.GET(Rec."No.",CurrForm.Matrix.MatrixRec."No.") ;
                                                                           Relations.DELETE ;
                                                                         END ;
                                                                     END;
                                                                      }
        { 1100481007;TextBox;13970;330  ;1700 ;440  ;ParentControl=1100481005;
                                                     InMatrixHeading=Yes;
                                                     SourceExpr=CurrForm.Matrix.MatrixRec."No." }
      }
      CODE
      {
        VAR
          HasRelation@1100481000 : Boolean;
          Relations@1100481001 : Record 50000;
    
        BEGIN
        END.
      }
    }
    
    
    
  • rtamesrtames Member Posts: 56
    Bedankt voor je reactie.

    Nog een aanpassing. De gegevens van de header dienen uit nog een andere tabel vandaan te komen en gefilterd te worden is dit mogelijk?
  • MBergerMBerger Member Posts: 413
    rtames wrote:
    Bedankt voor je reactie.

    Nog een aanpassing. De gegevens van de header dienen uit nog een andere tabel vandaan te komen en gefilterd te worden is dit mogelijk?

    Ik snap zo niet 1..2..3 wat je bedoeld, dus als je iets meer uitleg kunt geven dan kan ik misschien helpen.
  • rtamesrtames Member Posts: 56
    Ik zou graag willen dat de header gegevens uit een tabel komen waar de leveranciers meerdere malen in voor kunnen komen. Echter wil ik de leverancier maar één keer in de header laten voorkomen.
    het lukt mij niet om een filter plaatsen welke deze gegevens zo neerzet zoals ik dat wil.
  • MBergerMBerger Member Posts: 413
    Waarom dan niet gewoon de leverancierstabel gebruiken ? en anders voeg een tijdelijke tabel toe aan de database, vul deze met alle leveranciers die je tegenkomt in je filtering en gebruik die als de header tabel.
  • rtamesrtames Member Posts: 56
    het gaat er om dat er een selectie van leveranciers komt aangezien de lijst anders veel te groot is. aangezien ik nog niet zo'n zeer kundige programmeur ben lukt het mij niet om een tijdelijke tabel te vullen met het filter en deze te tonen in de header. kun je hier een begin voor geven?
  • MBergerMBerger Member Posts: 413
    Ik kan het niet helemaal voor je uitwerken ( geen tijd, en het is beter als je zelf experimenteert ), maar wat ik zou doen is een tabel aanmaken met een veld voor leveranciersnummer en aan gebruikers-ID ( voor het geval dat meerdere gebruikers hetzeflde form tegelijkertijd gebruiken.

    Dan in je form deze tabel vullen met de unieke leveranciers uit je originele tabel, en dan deze gebruiken als headertabel.
  • rtamesrtames Member Posts: 56
    ik ben aardig onderweg echter lukt het mij niet om als de de leverancier reeds in de tijdelijke tabel staat deze niet opnieuw te kopieeren. heb je hier een tip voor?
  • SogSog Member Posts: 1,023
    if not temptable.get(Vendorrec.No) then
    begin
    temptable.init;
    temptable.copy(vendorrec);
    temptable.insert;
    end;

    Ik hoop dat dit een goede hint is.
    |Pressing F1 is so much faster than opening your browser|
    |To-Increase|
  • rtamesrtames Member Posts: 56
    Als er nu 2 personen inloggen dan gaat het niet goed. Met één gebruiker werkt het perfect. Hij zou dus moeten ook moeten kijken in de tijdelijke tabel naar het veld gebruikersID. dus filterzetten op levno. en userid en als die al bestaat dan niet kopieeren.
  • rtamesrtames Member Posts: 56
    Dit is mij gelukt, bij het openen van het formulier wordt de tabel gevuld en in de matrixheader komen de juiste gegevens in beeld Dank hiervoor.

    Echter wordt de matrixheader niet goed geupdate. Bij het openen van het form moet ik eerst een stuk naar rechts scrollen en hierna weer naar links om ervoor te zorgen dat de gegevens kloppen. wat doe ik fout?
  • SogSog Member Posts: 1,023
    Probeer dit eens even te verplaatsen naar onaftergetcurrrec
    OnAfterGetRecord=BEGIN
    HasRelation := Relations.GET(Rec."No.",CurrForm.Matrix.MatrixRec."No.") ;
    END;
    |Pressing F1 is so much faster than opening your browser|
    |To-Increase|
  • rtamesrtames Member Posts: 56
    Helaas kent het form geen Hasrelation.

    is er nog een andere manier om dit op te lossen?
  • SogSog Member Posts: 1,023
    Die hasrelation is gekopieerd van uw code.
    wat er allemaal veranderd is sindsdien weet ik niet, maar ik zou alle code van matrixbox vanuit de onaftergetrec trigger naar de onaftergetcurrrec trigger zetten.
    |Pressing F1 is so much faster than opening your browser|
    |To-Increase|
  • rtamesrtames Member Posts: 56
    Helaas als ik alles daarheen kopieer werkt het nog steeds niet goed.
Sign In or Register to comment.