2011

Jul

25

Av

Det finns begränsningar i storlek på FileMaker-layouter, de kan endast vara 110 tum breda och 110 tum långa per post. Dessa begränsningar har funnits länge och är ofta inga problem. Ibland behöver man dock skriva ut långa texter i en post. Genom att göra layouten så stor som möjligt och packa del uppåt fungerar det för det mesta. Andra problem finns tyvärr också, t.ex. att en textrad kan delas mitt av och placeras på olika sidor.

Lösningen är att dela upp texten i en eller flera poster, istället för att skriva ut en post i en enda lång layout skrivs en liten del av texten per post. Detta fungerar bäst om hela texten finns i ett och samma fält/variabel, eller kan sättas ihop till ett fält/variabel.

Ett enkelt sätt att dela upp texten i textfältet/variablen är att skapa en post per stycke. Du kan lätt få fram ett stycke i ett textfält (eller variabel) med funktionen GetValue och antal stycken i fältet med funktionen ValueCount. Varje stycke i texten är ju en rad i fältet (efter varje stycke är det alltid ny rad).

Att skapa poster i en FileMaker-tabell bara för en utskrift är både lite besvärligt och tidsödande. Det räcker dock att man gör det en gång per databas. Med en tabell med (nästan) tomma poster, en $$-variabel, funktionen GetValue och ett kort manus går det snabbt att skriva ut.

I exemplet har jag en databas med en tabell. I tabellen är det tänkt att jag ska skriver dokument, ett dokument per post. Dokumenten kan vara hur långa som helst. Det är inga problem att skriva långa texter i FileMaker, varje fält kan innehålla i princip obegränsat med text. I tabellen kan jag även ha annan information om dokumentet, t.ex. författare, datum m.m. Jag gör också en tabell som endast ska användas för utskriften. Jag kallar tabellen för Utskrift och skapar ett fält med ett löpnummer från 1 och uppåt. Jag skapar också ett beräkningsfält, Stycke, med beräkningsresultat Text och formeln:

GetValue($$text; löpnummer)

Formeln hämtar ett stycke från en global variabel med namnet $$text. Alla poster hämtar olika stycken. Fältet måste definieras så att det beräknas varje gång, klicka på Tillval för index i dialogrutan där du skriver formeln och kryssa för “Lagra inte beräkningsresultat“.

UtskriftTillval

Jag skapar sedan ett antal poster i utskriftstabellen, så många poster som det kan tänkas finnas stycken i den längsta dokumenttexten. T.ex. skapar jag 1000 poster. Det kan jag göra med en loop i ett manus, eller helt enkelt genom att hålla ner Ctrl+N/Kommando-N någon minut.

På utskriftslayouten, som hämtar poster från tabellen Utskrift, gör jag fältet Stycke så stort så att hela det längsta stycket får plats och placerar fältet i huvuddelen (t.ex. en A4 eller mindre). Huvuddelen gör jag lika stor som fältet och jag ser till att fältet och huvuddelen packas uppåt. Du kan också göra delar för sidhuvud och sidfot som skrivs ut på varje sida. Tänk på att layouten ska visas som lista.

UtskriftLayout

Det som återstår för att skriva ut texten är ett manus som startas från layouten där dokumentet skrivs.

UtskriftManus

Manuset tilldelar variabeln $$text innehållet i textfältet, går till utskriftslayouten, söker fram så många poster som det finns stycken i textfältet och skriver ut dem.

Resultatet blir en utskrift som t.ex. kan se ut så här (lägg märke till att eventuella utformningar, storlek, fet eller kursiv stil etc., du gör när du skriver texten följer med):

UtskriftResultat

Samma metod kan också användas för t.ex. export m.m.

Metoden kallas “virtual list” på engelska och kan användas i en mängd olika situationer, antingen för att slå ihop information från flera tabeller, göra databasen och beräkningar snabbare (det tar alltid tid att göra poster och spara information i poster) m.m.

Vill du få information om begränsningarna i FileMaker kan du läsa om dem här.

Skriv en kommentar

  • (will not be published)
  • + three = 4

Läs också: