[{"data":1,"prerenderedAt":277},["ShallowReactive",2],{"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fchamps-table-v2-restrictions-lignes":3,"section:\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fchamps-table-v2-restrictions-lignes":276},{"id":4,"title":5,"body":6,"description":262,"extension":263,"meta":264,"navigation":225,"path":272,"seo":273,"stem":274,"__hash__":275},"docs\u002F2.next\u002F3.dodock\u002F10.developpeurs\u002Fchamps-table-v2-restrictions-lignes.md","Champs Table (interface v2) : restreindre l'ajout et la suppression de lignes",{"type":7,"value":8,"toc":258},"minimark",[9,13,28,69,72,77,89,197,200,203,233,240,244,254],[10,11,5],"h1",{"id":12},"champs-table-interface-v2-restreindre-lajout-et-la-suppression-de-lignes",[14,15,16,17,22,23,27],"p",{},"Les formulaires de l'interface v2 (composant ",[18,19,21],"a",{"href":20},"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fcomposants-ui\u002Fform-layout","FormLayout",") lisent deux propriétés d'un champ ",[24,25,26],"strong",{},"Table"," :",[29,30,31,44],"table",{},[32,33,34],"thead",{},[35,36,37,41],"tr",{},[38,39,40],"th",{},"Propriété",[38,42,43],{},"Effet dans la grille",[45,46,47,59],"tbody",{},[35,48,49,56],{},[50,51,52],"td",{},[53,54,55],"code",{},"cannot_add_rows",[50,57,58],{},"Pas de bouton « Add Row ». Le menu d'une ligne garde seulement « Edit » : pas de « Insert Above », « Insert Below » ni « Duplicate ». Un collage ne crée pas de ligne.",[35,60,61,66],{},[50,62,63],{},[53,64,65],{},"cannot_delete_rows",[50,67,68],{},"Pas de bouton « Delete (N) » quand des lignes sont sélectionnées.",[14,70,71],{},"Avec les deux propriétés, la barre d'actions sous la grille disparaît. Les lignes existantes restent modifiables et le glisser-déposer pour les réordonner reste actif.",[73,74,76],"h2",{"id":75},"définir-les-propriétés","Définir les propriétés",[14,78,79,80,83,84,88],{},"Ces deux propriétés ne sont pas des champs de ",[24,81,82],{},"DocField",". Définissez-les avec une ",[18,85,87],{"href":86},"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fproperty-setters","propriété personnalisée (Property Setter)"," sur le champ Table du DocType parent :",[29,90,91,101],{},[32,92,93],{},[35,94,95,98],{},[38,96,97],{},"Champ du Property Setter",[38,99,100],{},"Valeur",[45,102,103,119,135,151,167,182],{},[35,104,105,115],{},[50,106,107,110,111,114],{},[24,108,109],{},"Applicable pour"," (",[53,112,113],{},"doctype_or_field",")",[50,116,117],{},[53,118,82],{},[35,120,121,129],{},[50,122,123,110,126,114],{},[24,124,125],{},"DocType",[53,127,128],{},"doc_type",[50,130,131,132],{},"DocType parent, par exemple ",[53,133,134],{},"Sales Order",[35,136,137,145],{},[50,138,139,110,142,114],{},[24,140,141],{},"Nom du Champ",[53,143,144],{},"field_name",[50,146,147,148],{},"Champ Table, par exemple ",[53,149,150],{},"items",[35,152,153,160],{},[50,154,155,110,157,114],{},[24,156,40],{},[53,158,159],{},"property",[50,161,162,164,165],{},[53,163,55],{}," ou ",[53,166,65],{},[35,168,169,177],{},[50,170,171,110,174,114],{},[24,172,173],{},"Type de Propriété",[53,175,176],{},"property_type",[50,178,179],{},[53,180,181],{},"Check",[35,183,184,192],{},[50,185,186,110,189,114],{},[24,187,188],{},"Définir la Valeur",[53,190,191],{},"value",[50,193,194],{},[53,195,196],{},"1",[14,198,199],{},"Rechargez le formulaire après l'enregistrement.",[14,201,202],{},"Dans une application, ajoutez la personnalisation dans un fichier de fixtures ou un correctif :",[204,205,210],"pre",{"className":206,"code":207,"language":208,"meta":209,"style":209},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from frappe.custom.doctype.property_setter.property_setter import make_property_setter\n\nmake_property_setter(\"Sales Order\", \"items\", \"cannot_add_rows\", 1, \"Check\")\n","python","",[53,211,212,220,227],{"__ignoreMap":209},[213,214,217],"span",{"class":215,"line":216},"line",1,[213,218,219],{},"from frappe.custom.doctype.property_setter.property_setter import make_property_setter\n",[213,221,223],{"class":215,"line":222},2,[213,224,226],{"emptyLinePlaceholder":225},true,"\n",[213,228,230],{"class":215,"line":229},3,[213,231,232],{},"make_property_setter(\"Sales Order\", \"items\", \"cannot_add_rows\", 1, \"Check\")\n",[14,234,235,236,239],{},"Dans le desk classique, un script client fait la même chose : ",[53,237,238],{},"frm.set_df_property(\"items\", \"cannot_add_rows\", 1)",".",[73,241,243],{"id":242},"limites","Limites",[245,246,247,251],"ul",{},[248,249,250],"li",{},"Ces propriétés agissent sur l'interface seulement. Un script qui ajoute ou retire des lignes n'est pas bloqué.",[248,252,253],{},"Les permissions côté serveur ne changent pas. Pour interdire une modification, utilisez les permissions du DocType.",[255,256,257],"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":209,"searchDepth":216,"depth":222,"links":259},[260,261],{"id":75,"depth":222,"text":76},{"id":242,"depth":222,"text":243},"Masquer l'ajout ou la suppression de lignes d'un champ Table dans les formulaires FormLayout avec les propriétés cannot_add_rows et cannot_delete_rows.","md",{"reviewed":225,"last_verified":265,"sources":266},"2026-11-03",[267,268,269,270,271],"dodock@develop:ui\u002Fsrc\u002Fcomponents\u002FGrid\u002FGrid.vue","dodock@develop:ui\u002Fsrc\u002Fcomponents\u002FFormLayout\u002FbuildLayoutFromMeta.ts","dodock@develop:ui\u002Fsrc\u002Fcomponents\u002FFields\u002FTableField.vue","dodock@develop:frappe\u002Fcustom\u002Fdoctype\u002Fproperty_setter\u002Fproperty_setter.py","dodock@develop:frappe\u002Flocale\u002Ffr.po","\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fchamps-table-v2-restrictions-lignes",{"title":5,"description":262},"2.next\u002F3.dodock\u002F10.developpeurs\u002Fchamps-table-v2-restrictions-lignes","OSgfBXe8aMT52-rF72__to5D1dbrRqcyqMqQy2cLrEE",{},1793871735834]