[{"data":1,"prerenderedAt":711},["ShallowReactive",2],{"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fapi\u002Ffiltres-et-requetes":3,"section:\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fapi\u002Ffiltres-et-requetes":710},{"id":4,"title":5,"body":6,"description":696,"extension":697,"meta":698,"navigation":490,"path":706,"seo":707,"stem":708,"__hash__":709},"docs\u002F2.next\u002F3.dodock\u002F10.developpeurs\u002F1.api\u002Ffiltres-et-requetes.md","Filtres et requêtes avancés",{"type":7,"value":8,"toc":684},"minimark",[9,13,30,42,47,58,123,127,333,339,344,349,356,383,387,401,429,456,472,476,608,617,621,627,655,659,680],[10,11,5],"h1",{"id":12},"filtres-et-requêtes-avancés",[14,15,16,17,21,22,25,26,29],"p",{},"Cette page décrit les opérateurs de filtre de ",[18,19,20],"code",{},"frappe.get_list",", ",[18,23,24],{},"frappe.get_all"," et de l'API REST. Elle détaille l'opérateur ",[18,27,28],{},"between"," sur les dates et les heures.",[14,31,32,33,37,38,41],{},"Les exemples utilisent les champs standard de ",[34,35,36],"strong",{},"Facture de vente"," (",[18,39,40],{},"Sales Invoice","). Les noms de clients sont fictifs.",[43,44,46],"h2",{"id":45},"format-dun-filtre","Format d'un filtre",[14,48,49,50,53,54,57],{},"Un filtre est une liste ",[18,51,52],{},"[champ, opérateur, valeur]",". Plusieurs filtres se combinent par ET. Pour un champ d'une table enfant, ajoutez le type de document en premier : ",[18,55,56],{},"[doctype, champ, opérateur, valeur]",".",[59,60,65],"pre",{"className":61,"code":62,"language":63,"meta":64,"style":64},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","frappe.get_list(\n    \"Sales Invoice\",\n    filters=[\n        [\"posting_date\", \"between\", [\"2026-04-01\", \"2026-06-30\"]],\n        [\"status\", \"=\", \"Paid\"],\n        [\"Sales Invoice Item\", \"item_code\", \"=\", \"CHAISE-001\"],\n    ],\n    fields=[\"name\", \"customer\", \"grand_total\", \"posting_date\"],\n)\n","python","",[18,66,67,75,81,87,93,99,105,111,117],{"__ignoreMap":64},[68,69,72],"span",{"class":70,"line":71},"line",1,[68,73,74],{},"frappe.get_list(\n",[68,76,78],{"class":70,"line":77},2,[68,79,80],{},"    \"Sales Invoice\",\n",[68,82,84],{"class":70,"line":83},3,[68,85,86],{},"    filters=[\n",[68,88,90],{"class":70,"line":89},4,[68,91,92],{},"        [\"posting_date\", \"between\", [\"2026-04-01\", \"2026-06-30\"]],\n",[68,94,96],{"class":70,"line":95},5,[68,97,98],{},"        [\"status\", \"=\", \"Paid\"],\n",[68,100,102],{"class":70,"line":101},6,[68,103,104],{},"        [\"Sales Invoice Item\", \"item_code\", \"=\", \"CHAISE-001\"],\n",[68,106,108],{"class":70,"line":107},7,[68,109,110],{},"    ],\n",[68,112,114],{"class":70,"line":113},8,[68,115,116],{},"    fields=[\"name\", \"customer\", \"grand_total\", \"posting_date\"],\n",[68,118,120],{"class":70,"line":119},9,[68,121,122],{},")\n",[43,124,126],{"id":125},"opérateurs","Opérateurs",[128,129,130,146],"table",{},[131,132,133],"thead",{},[134,135,136,140,143],"tr",{},[137,138,139],"th",{},"Opérateur",[137,141,142],{},"Rôle",[137,144,145],{},"Exemple",[147,148,149,168,192,214,232,246,264,279,297,318],"tbody",{},[134,150,151,160,163],{},[152,153,154,21,157],"td",{},[18,155,156],{},"=",[18,158,159],{},"!=",[152,161,162],{},"Égal, différent",[152,164,165],{},[18,166,167],{},"[\"status\", \"!=\", \"Cancelled\"]",[134,169,170,184,187],{},[152,171,172,21,175,21,178,21,181],{},[18,173,174],{},">",[18,176,177],{},">=",[18,179,180],{},"\u003C",[18,182,183],{},"\u003C=",[152,185,186],{},"Comparaison",[152,188,189],{},[18,190,191],{},"[\"grand_total\", \">=\", 1000]",[134,193,194,202,209],{},[152,195,196,21,199],{},[18,197,198],{},"like",[18,200,201],{},"not like",[152,203,204,205,208],{},"Contient un motif (",[18,206,207],{},"%"," = n'importe quels caractères)",[152,210,211],{},[18,212,213],{},"[\"customer\", \"like\", \"%Maison%\"]",[134,215,216,224,227],{},[152,217,218,21,221],{},[18,219,220],{},"in",[18,222,223],{},"not in",[152,225,226],{},"Dans une liste, hors d'une liste",[152,228,229],{},[18,230,231],{},"[\"status\", \"in\", [\"Paid\", \"Partly Paid\"]]",[134,233,234,238,241],{},[152,235,236],{},[18,237,28],{},[152,239,240],{},"Entre deux bornes, bornes incluses",[152,242,243],{},[18,244,245],{},"[\"grand_total\", \"between\", [100, 500]]",[134,247,248,253,256],{},[152,249,250],{},[18,251,252],{},"is",[152,254,255],{},"Renseigné ou vide",[152,257,258,21,261],{},[18,259,260],{},"[\"due_date\", \"is\", \"set\"]",[18,262,263],{},"[\"due_date\", \"is\", \"not set\"]",[134,265,266,271,274],{},[152,267,268],{},[18,269,270],{},"timespan",[152,272,273],{},"Période relative",[152,275,276],{},[18,277,278],{},"[\"posting_date\", \"timespan\", \"this month\"]",[134,280,281,289,292],{},[152,282,283,21,286],{},[18,284,285],{},"descendants of",[18,287,288],{},"ancestors of",[152,290,291],{},"Descendants ou ancêtres dans un arbre",[152,293,294],{},[18,295,296],{},"[\"territory\", \"descendants of\", \"France\"]",[134,298,299,310,313],{},[152,300,301,21,304,21,307],{},[18,302,303],{},"not descendants of",[18,305,306],{},"not ancestors of",[18,308,309],{},"descendants of (inclusive)",[152,311,312],{},"Variantes des opérateurs d'arbre",[152,314,315],{},[18,316,317],{},"[\"item_group\", \"descendants of (inclusive)\", \"Mobilier\"]",[134,319,320,325,328],{},[152,321,322],{},[18,323,324],{},"regex",[152,326,327],{},"Expression régulière",[152,329,330],{},[18,331,332],{},"[\"customer\", \"regex\", \"^SARL\"]",[43,334,336,337],{"id":335},"lopérateur-between","L'opérateur ",[18,338,28],{},[14,340,341,343],{},[18,342,28],{}," reçoit une liste de deux bornes. Il fonctionne sur les champs nombre, date et date et heure.",[345,346,348],"h3",{"id":347},"sur-un-champ-date","Sur un champ Date",[14,350,351,352,355],{},"Les bornes sont des dates ",[18,353,354],{},"AAAA-MM-JJ",". Une valeur date et heure est ramenée à sa date.",[59,357,359],{"className":61,"code":358,"language":63,"meta":64,"style":64},"# Factures du deuxième trimestre 2026\nfrappe.get_list(\n    \"Sales Invoice\",\n    filters=[[\"posting_date\", \"between\", [\"2026-04-01\", \"2026-06-30\"]]],\n)\n",[18,360,361,366,370,374,379],{"__ignoreMap":64},[68,362,363],{"class":70,"line":71},[68,364,365],{},"# Factures du deuxième trimestre 2026\n",[68,367,368],{"class":70,"line":77},[68,369,74],{},[68,371,372],{"class":70,"line":83},[68,373,80],{},[68,375,376],{"class":70,"line":89},[68,377,378],{},"    filters=[[\"posting_date\", \"between\", [\"2026-04-01\", \"2026-06-30\"]]],\n",[68,380,381],{"class":70,"line":95},[68,382,122],{},[345,384,386],{"id":385},"sur-un-champ-date-et-heure","Sur un champ Date et heure",[14,388,389,390,393,394,397,398,57],{},"Ceci s'applique aux champs ",[34,391,392],{},"Date et heure"," et aux champs ",[18,395,396],{},"creation"," et ",[18,399,400],{},"modified",[402,403,404,419],"ul",{},[405,406,407,408,411,412,415,416,57],"li",{},"Une borne date seule (",[18,409,410],{},"\"2026-08-01\"",") couvre la journée : la borne basse devient ",[18,413,414],{},"00:00:00",", la borne haute ",[18,417,418],{},"23:59:59.999999",[405,420,421,422,37,425,428],{},"Une borne avec une heure, séparée par une ",[34,423,424],{},"espace",[18,426,427],{},"\"2026-08-01 08:00:00\"","), garde son heure.",[59,430,432],{"className":61,"code":431,"language":63,"meta":64,"style":64},"# Factures créées le 1er août 2026 entre 8 h et 18 h\nfrappe.get_list(\n    \"Sales Invoice\",\n    filters=[[\"creation\", \"between\", [\"2026-08-01 08:00:00\", \"2026-08-01 18:00:00\"]]],\n)\n",[18,433,434,439,443,447,452],{"__ignoreMap":64},[68,435,436],{"class":70,"line":71},[68,437,438],{},"# Factures créées le 1er août 2026 entre 8 h et 18 h\n",[68,440,441],{"class":70,"line":77},[68,442,74],{},[68,444,445],{"class":70,"line":83},[68,446,80],{},[68,448,449],{"class":70,"line":89},[68,450,451],{},"    filters=[[\"creation\", \"between\", [\"2026-08-01 08:00:00\", \"2026-08-01 18:00:00\"]]],\n",[68,453,454],{"class":70,"line":95},[68,455,122],{},[457,458,461],"callout",{"color":459,"icon":460},"amber","i-heroicons-exclamation-triangle",[14,462,463,464,467,468,471],{},"N'utilisez pas le séparateur ",[18,465,466],{},"T"," du format ISO 8601 (",[18,469,470],{},"\"2026-08-01T08:00:00\"","). Dodock lit alors la borne comme une date seule et ignore l'heure. Le filtre couvre la journée entière.",[43,473,475],{"id":474},"exemple-complet-ventes-dun-mois","Exemple complet : ventes d'un mois",[59,477,479],{"className":61,"code":478,"language":63,"meta":64,"style":64},"from collections import defaultdict\n\nimport frappe\n\nfactures = frappe.get_all(\n    \"Sales Invoice\",\n    filters=[\n        [\"posting_date\", \"between\", [\"2026-08-01\", \"2026-08-31\"]],\n        [\"docstatus\", \"=\", 1],\n    ],\n    fields=[\"name\", \"customer\", \"grand_total\", \"posting_date\"],\n    order_by=\"posting_date asc\",\n)\n\ntotal_ventes = sum(f.grand_total for f in factures)\nprint(f\"Nombre de factures : {len(factures)}\")\nprint(f\"Total des ventes : {total_ventes} €\")\n\nventes_par_client = defaultdict(float)\nfor facture in factures:\n    ventes_par_client[facture.customer] += facture.grand_total\n\nfor client, montant in ventes_par_client.items():\n    print(f\"- {client} : {montant} €\")\n",[18,480,481,486,492,497,501,506,510,514,519,524,529,534,540,545,550,556,562,568,573,579,585,591,596,602],{"__ignoreMap":64},[68,482,483],{"class":70,"line":71},[68,484,485],{},"from collections import defaultdict\n",[68,487,488],{"class":70,"line":77},[68,489,491],{"emptyLinePlaceholder":490},true,"\n",[68,493,494],{"class":70,"line":83},[68,495,496],{},"import frappe\n",[68,498,499],{"class":70,"line":89},[68,500,491],{"emptyLinePlaceholder":490},[68,502,503],{"class":70,"line":95},[68,504,505],{},"factures = frappe.get_all(\n",[68,507,508],{"class":70,"line":101},[68,509,80],{},[68,511,512],{"class":70,"line":107},[68,513,86],{},[68,515,516],{"class":70,"line":113},[68,517,518],{},"        [\"posting_date\", \"between\", [\"2026-08-01\", \"2026-08-31\"]],\n",[68,520,521],{"class":70,"line":119},[68,522,523],{},"        [\"docstatus\", \"=\", 1],\n",[68,525,527],{"class":70,"line":526},10,[68,528,110],{},[68,530,532],{"class":70,"line":531},11,[68,533,116],{},[68,535,537],{"class":70,"line":536},12,[68,538,539],{},"    order_by=\"posting_date asc\",\n",[68,541,543],{"class":70,"line":542},13,[68,544,122],{},[68,546,548],{"class":70,"line":547},14,[68,549,491],{"emptyLinePlaceholder":490},[68,551,553],{"class":70,"line":552},15,[68,554,555],{},"total_ventes = sum(f.grand_total for f in factures)\n",[68,557,559],{"class":70,"line":558},16,[68,560,561],{},"print(f\"Nombre de factures : {len(factures)}\")\n",[68,563,565],{"class":70,"line":564},17,[68,566,567],{},"print(f\"Total des ventes : {total_ventes} €\")\n",[68,569,571],{"class":70,"line":570},18,[68,572,491],{"emptyLinePlaceholder":490},[68,574,576],{"class":70,"line":575},19,[68,577,578],{},"ventes_par_client = defaultdict(float)\n",[68,580,582],{"class":70,"line":581},20,[68,583,584],{},"for facture in factures:\n",[68,586,588],{"class":70,"line":587},21,[68,589,590],{},"    ventes_par_client[facture.customer] += facture.grand_total\n",[68,592,594],{"class":70,"line":593},22,[68,595,491],{"emptyLinePlaceholder":490},[68,597,599],{"class":70,"line":598},23,[68,600,601],{},"for client, montant in ventes_par_client.items():\n",[68,603,605],{"class":70,"line":604},24,[68,606,607],{},"    print(f\"- {client} : {montant} €\")\n",[14,609,610,611,397,614,57],{},"Pour faire la somme dans la base au lieu de Python, utilisez ",[18,612,613],{},"fields=[\"customer\", {\"SUM\": \"grand_total\", \"as\": \"total\"}]",[18,615,616],{},"group_by=\"customer\"",[43,618,620],{"id":619},"dépannage","Dépannage",[14,622,623,624,626],{},"Si un filtre ",[18,625,28],{}," ne renvoie pas les lignes attendues :",[628,629,630,640,643,646],"ol",{},[405,631,632,633,635,636,639],{},"Vérifiez le format des dates : ",[18,634,354],{},", et ",[18,637,638],{},"AAAA-MM-JJ HH:MM:SS"," avec une espace pour une heure.",[405,641,642],{},"Vérifiez l'ordre des bornes : la première borne doit être la plus petite.",[405,644,645],{},"Vérifiez le type du champ dans le type de document.",[405,647,648,649,651,652,654],{},"Avec ",[18,650,20],{},", vérifiez les autorisations de l'utilisateur. ",[18,653,24],{}," ne les contrôle pas.",[43,656,658],{"id":657},"voir-aussi","Voir aussi",[402,660,661,668,674],{},[405,662,663],{},[664,665,667],"a",{"href":666},"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fapi\u002Fdatabase_api","API Base de données",[405,669,670],{},[664,671,673],{"href":672},"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fapi\u002Fquery-builder\u002Ffonctions-date","Fonctions de date dans le Query Builder",[405,675,676],{},[664,677,679],{"href":678},"\u002Fnext\u002Fdodock\u002Finterface\u002Frapports-personnalises","Les rapports personnalisés",[681,682,683],"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":64,"searchDepth":71,"depth":77,"links":685},[686,687,688,693,694,695],{"id":45,"depth":77,"text":46},{"id":125,"depth":77,"text":126},{"id":335,"depth":77,"text":689,"children":690},"L'opérateur between",[691,692],{"id":347,"depth":83,"text":348},{"id":385,"depth":83,"text":386},{"id":474,"depth":77,"text":475},{"id":619,"depth":77,"text":620},{"id":657,"depth":77,"text":658},"Utiliser les opérateurs de filtre avancés de Dodock, dont between, pour interroger des dates, des heures et des nombres.","md",{"icon":699,"reviewed":490,"last_verified":700,"sources":701},"i-mdi-filter-outline","2026-11-03",[702,703,704,705],"dodock@develop:frappe\u002Fdatabase\u002Fquery.py","dodock@develop:frappe\u002Fdatabase\u002Foperator_map.py","dodock@develop:frappe\u002Fdatabase\u002Futils.py","dodock@develop:frappe\u002Futils\u002Fdata.py","\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fapi\u002Ffiltres-et-requetes",{"title":5,"description":696},"2.next\u002F3.dodock\u002F10.developpeurs\u002F1.api\u002Ffiltres-et-requetes","TK_vC1EDbINAKaJdNT_-NvyfnbFMqZmgUUQUR1mqK2I",{},1793871731168]