[{"data":1,"prerenderedAt":575},["ShallowReactive",2],{"\u002Fnext\u002Fdodock\u002Ffonctionnalites\u002Fimpression\u002Fformat_impression_rapport":3,"section:\u002Fnext\u002Fdodock\u002Ffonctionnalites\u002Fimpression\u002Fformat_impression_rapport":574},{"id":4,"title":5,"body":6,"description":559,"extension":560,"meta":561,"navigation":337,"path":570,"seo":571,"stem":572,"__hash__":573},"docs\u002F2.next\u002F3.dodock\u002F04.fonctionnalites\u002F11.impression\u002Fformat_impression_rapport.md","Format d'impression de rapport",{"type":7,"value":8,"toc":551},"minimark",[9,13,17,20,70,74,79,97,101,162,166,204,212,216,299,302,305,309,315,475,478,505,509,532,535,547],[10,11,5],"h1",{"id":12},"format-dimpression-de-rapport",[14,15,16],"p",{},"Un rapport de requête ou un rapport de script peut être imprimé ou exporté en PDF. Sans format d'impression, Dokos imprime le tableau du rapport avec son modèle par défaut. Un format d'impression de rapport vous permet de choisir la présentation.",[14,18,19],{},"Deux types de formats existent :",[21,22,23,39],"table",{},[24,25,26],"thead",{},[27,28,29,33,36],"tr",{},[30,31,32],"th",{},"Type",[30,34,35],{},"Rendu",[30,37,38],{},"Ce qu'il permet",[40,41,42,57],"tbody",{},[27,43,44,51,54],{},[45,46,47],"td",{},[48,49,50],"strong",{},"JS",[45,52,53],{},"Dans le navigateur.",[45,55,56],{},"Le moteur de modèles du navigateur : boucles et conditions simples. Pas de filtres Jinja (`",[27,58,59,64,67],{},[45,60,61],{},[48,62,63],{},"Jinja",[45,65,66],{},"Sur le serveur, dans le même bac à sable que les autres formats d'impression.",[45,68,69],{},"Tous les filtres et directives Jinja.",[71,72,73],"mermaid",{},"\nflowchart LR\n    A[Rapport à imprimer] --> B{Type de format}\n    B -->|JS| C[Rendu navigateur]\n    B -->|Jinja| D[Rendu serveur\\ndans le bac à sable]\n    C --> E[Aperçu \u002F PDF]\n    D --> E\n",[75,76,78],"h2",{"id":77},"prérequis","Prérequis",[80,81,82,90],"ul",{},[83,84,85,86,89],"li",{},"Avoir le droit de créer des ",[48,87,88],{},"Formats d'impression"," (rôle Gestionnaire système par défaut).",[83,91,92,93,96],{},"Pour imprimer : avoir la permission ",[48,94,95],{},"Imprimer"," sur le type de document de référence du rapport.",[75,98,100],{"id":99},"créer-un-format-dimpression-de-rapport","Créer un format d'impression de rapport",[102,103,104,111,118,128,134,141,150,155],"ol",{},[83,105,106,107,110],{},"Ouvrez la recherche (Ctrl+K), saisissez ",[48,108,109],{},"Format d'impression"," et ouvrez la liste.",[83,112,113,114,117],{},"Cliquez sur ",[48,115,116],{},"Créer",".",[83,119,120,121,124,125,117],{},"Dans ",[48,122,123],{},"Format d'impression pour",", choisissez ",[48,126,127],{},"Report",[83,129,130,131,117],{},"Sélectionnez le ",[48,132,133],{},"Rapport",[83,135,136,137,140],{},"Saisissez le ",[48,138,139],{},"Nom"," du format.",[83,142,143,144,146,147,149],{},"Dans « Modèles », choisissez ",[48,145,50],{}," (par défaut) ou ",[48,148,63],{},". La description du champ rappelle : JS est rendu dans le navigateur, Jinja sur le serveur.",[83,151,113,152,154],{},[48,153,116],{},". Le formulaire du format s'ouvre avec un modèle HTML minimal.",[83,156,157,158,161],{},"Écrivez votre modèle dans le champ ",[48,159,160],{},"HTML",", puis enregistrez.",[75,163,165],{"id":164},"imprimer-ou-exporter-en-pdf","Imprimer ou exporter en PDF",[102,167,168,171,177,182,196],{},[83,169,170],{},"Ouvrez le rapport et appliquez vos filtres.",[83,172,113,173,176],{},[48,174,175],{},"Menu > Imprimer",". La page d'aperçu d'impression s'ouvre.",[83,178,120,179,181],{},[48,180,109],{},", choisissez votre format. Vide, le modèle par défaut du rapport s'applique.",[83,183,184,185,188,189,192,193,195],{},"Choisissez l'",[48,186,187],{},"En-tête de lettre"," si besoin. Seuls les en-têtes dont ",[48,190,191],{},"En-tête de lettre pour"," vaut ",[48,194,127],{}," sont proposés.",[83,197,113,198,200,201,117],{},[48,199,95],{}," ou sur ",[48,202,203],{},"PDF",[14,205,206,207,117],{},"La page d'aperçu est décrite dans ",[208,209,211],"a",{"href":210},"\u002Fnext\u002Fdodock\u002Finterface\u002Fimprimer-un-rapport","Imprimer un rapport",[75,213,215],{"id":214},"données-disponibles-dans-un-modèle-jinja","Données disponibles dans un modèle Jinja",[21,217,218,228],{},[24,219,220],{},[27,221,222,225],{},[30,223,224],{},"Variable",[30,226,227],{},"Contenu",[40,229,230,245,255,272,285],{},[27,231,232,242],{},[45,233,234,238,239],{},[235,236,237],"code",{},"report.name",", ",[235,240,241],{},"report.report_name",[45,243,244],{},"Le nom du rapport.",[27,246,247,252],{},[45,248,249],{},[235,250,251],{},"filters",[45,253,254],{},"Les filtres appliqués.",[27,256,257,262],{},[45,258,259],{},[235,260,261],{},"columns",[45,263,264,265,238,268,271],{},"Les colonnes du rapport (",[235,266,267],{},"label",[235,269,270],{},"fieldname",", etc.).",[27,273,274,279],{},[45,275,276],{},[235,277,278],{},"data",[45,280,281,282,117],{},"Les lignes affichées. Chaque ligne se lit avec ",[235,283,284],{},"row.get(\"nom_du_champ\")",[27,286,287,292],{},[45,288,289],{},[235,290,291],{},"print_settings",[45,293,294,295,117],{},"Les ",[208,296,298],{"href":297},"\u002Fnext\u002Fdodock\u002Ffonctionnalites\u002Fimpression\u002Fparametres-impression","paramètres d'impression",[14,300,301],{},"Pour l'aperçu et l'impression, le modèle reçoit les lignes que le navigateur a déjà chargées : l'impression reflète ce que vous voyez à l'écran.",[14,303,304],{},"Pour le PDF d'un format Jinja, Dokos exécute le rapport sur le serveur avec les mêmes filtres. Il garde les lignes visibles à l'écran, dans le même ordre. Si vous cochez « Générer le PDF en arrière-plan », Dokos prépare le PDF en arrière-plan et vous envoie un lien par e-mail.",[75,306,308],{"id":307},"exemple-de-modèle-jinja","Exemple de modèle Jinja",[14,310,311,312,117],{},"Exemple fictif : un rapport avec une colonne ",[235,313,314],{},"amount",[316,317,322],"pre",{"className":318,"code":319,"language":320,"meta":321,"style":321},"language-jinja shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ch1>{{ report.report_name }}\u003C\u002Fh1>\n\n{% set total = namespace(value=0) %}\n\n\u003Ctable class=\"table table-bordered\">\n  \u003Cthead>\n    \u003Ctr>\n      {% for column in columns %}\n        \u003Cth>{{ column.label }}\u003C\u002Fth>\n      {% endfor %}\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    {% for row in data %}\n      \u003Ctr>\n        {% for column in columns %}\n          \u003Ctd>{{ row.get(column.fieldname, '') }}\u003C\u002Ftd>\n        {% endfor %}\n      \u003C\u002Ftr>\n      {% set total.value = total.value + (row.get('amount') or 0) %}\n    {% endfor %}\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Cp>Total : {{ total.value | currency }}\u003C\u002Fp>\n","jinja","",[235,323,324,332,339,345,350,356,362,368,374,380,386,392,398,404,410,416,422,428,434,440,446,452,458,464,469],{"__ignoreMap":321},[325,326,329],"span",{"class":327,"line":328},"line",1,[325,330,331],{},"\u003Ch1>{{ report.report_name }}\u003C\u002Fh1>\n",[325,333,335],{"class":327,"line":334},2,[325,336,338],{"emptyLinePlaceholder":337},true,"\n",[325,340,342],{"class":327,"line":341},3,[325,343,344],{},"{% set total = namespace(value=0) %}\n",[325,346,348],{"class":327,"line":347},4,[325,349,338],{"emptyLinePlaceholder":337},[325,351,353],{"class":327,"line":352},5,[325,354,355],{},"\u003Ctable class=\"table table-bordered\">\n",[325,357,359],{"class":327,"line":358},6,[325,360,361],{},"  \u003Cthead>\n",[325,363,365],{"class":327,"line":364},7,[325,366,367],{},"    \u003Ctr>\n",[325,369,371],{"class":327,"line":370},8,[325,372,373],{},"      {% for column in columns %}\n",[325,375,377],{"class":327,"line":376},9,[325,378,379],{},"        \u003Cth>{{ column.label }}\u003C\u002Fth>\n",[325,381,383],{"class":327,"line":382},10,[325,384,385],{},"      {% endfor %}\n",[325,387,389],{"class":327,"line":388},11,[325,390,391],{},"    \u003C\u002Ftr>\n",[325,393,395],{"class":327,"line":394},12,[325,396,397],{},"  \u003C\u002Fthead>\n",[325,399,401],{"class":327,"line":400},13,[325,402,403],{},"  \u003Ctbody>\n",[325,405,407],{"class":327,"line":406},14,[325,408,409],{},"    {% for row in data %}\n",[325,411,413],{"class":327,"line":412},15,[325,414,415],{},"      \u003Ctr>\n",[325,417,419],{"class":327,"line":418},16,[325,420,421],{},"        {% for column in columns %}\n",[325,423,425],{"class":327,"line":424},17,[325,426,427],{},"          \u003Ctd>{{ row.get(column.fieldname, '') }}\u003C\u002Ftd>\n",[325,429,431],{"class":327,"line":430},18,[325,432,433],{},"        {% endfor %}\n",[325,435,437],{"class":327,"line":436},19,[325,438,439],{},"      \u003C\u002Ftr>\n",[325,441,443],{"class":327,"line":442},20,[325,444,445],{},"      {% set total.value = total.value + (row.get('amount') or 0) %}\n",[325,447,449],{"class":327,"line":448},21,[325,450,451],{},"    {% endfor %}\n",[325,453,455],{"class":327,"line":454},22,[325,456,457],{},"  \u003C\u002Ftbody>\n",[325,459,461],{"class":327,"line":460},23,[325,462,463],{},"\u003C\u002Ftable>\n",[325,465,467],{"class":327,"line":466},24,[325,468,338],{"emptyLinePlaceholder":337},[325,470,472],{"class":327,"line":471},25,[325,473,474],{},"\u003Cp>Total : {{ total.value | currency }}\u003C\u002Fp>\n",[14,476,477],{},"Dans cet exemple :",[80,479,480,490,496],{},[83,481,482,485,486,489],{},[235,483,484],{},"{% set %}"," avec ",[235,487,488],{},"namespace"," cumule le total. Ce n'est pas possible avec un format JS.",[83,491,492,495],{},[235,493,494],{},"|currency"," formate le montant.",[83,497,498,499,501,502,504],{},"Les boucles sur ",[235,500,261],{}," et ",[235,503,278],{}," suivent les colonnes présentes dans le rapport.",[75,506,508],{"id":507},"passer-un-format-js-en-jinja","Passer un format JS en Jinja",[102,510,511,514,526,529],{},[83,512,513],{},"Ouvrez le format d'impression concerné.",[83,515,516,517,520,521,523,524,117],{},"Changez le ",[48,518,519],{},"Type de format d'impression"," de ",[48,522,50],{}," à ",[48,525,63],{},[83,527,528],{},"Réécrivez le modèle avec la syntaxe Jinja.",[83,530,531],{},"Testez l'aperçu et le PDF.",[14,533,534],{},"Les deux types peuvent coexister. Vous n'avez pas besoin de convertir tous vos formats en une fois.",[536,537,540],"callout",{"color":538,"icon":539},"blue","i-heroicons-information-circle",[14,541,542,543,546],{},"Pour les développeurs : le rendu Jinja passe par la méthode ",[235,544,545],{},"frappe.utils.print_format.render_report_jinja",". Elle refuse un format qui n'est pas de type Jinja ou qui n'a pas de HTML.",[548,549,550],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":321,"searchDepth":328,"depth":334,"links":552},[553,554,555,556,557,558],{"id":77,"depth":334,"text":78},{"id":99,"depth":334,"text":100},{"id":164,"depth":334,"text":165},{"id":214,"depth":334,"text":215},{"id":307,"depth":334,"text":308},{"id":507,"depth":334,"text":508},"Créer et utiliser des formats d'impression Jinja ou JS pour imprimer ou exporter en PDF les résultats d'un rapport.","md",{"reviewed":337,"last_verified":562,"sources":563},"2026-11-04",[564,565,566,567,568,569],"frappe\u002Fprinting\u002Fdoctype\u002Fprint_format\u002Fprint_format_list.js","frappe\u002Fprinting\u002Fpage\u002Freport_print\u002Freport_print.js","frappe\u002Fpublic\u002Fjs\u002Ffrappe\u002Fviews\u002Freports\u002Fquery_report.js","frappe\u002Fpublic\u002Fjs\u002Ffrappe\u002Fform\u002Fprint_utils.js","frappe\u002Futils\u002Fprint_format.py","frappe\u002Flocale\u002Ffr.po","\u002Fnext\u002Fdodock\u002Ffonctionnalites\u002Fimpression\u002Fformat_impression_rapport",{"title":5,"description":559},"2.next\u002F3.dodock\u002F04.fonctionnalites\u002F11.impression\u002Fformat_impression_rapport","aL2raIzuzssVDTEuJOYvG1XbztyL7WUjmunjz_VniQ8",{},1793871762445]