Как мы можем динамически добавлять дочернюю таблицу в frappe (ERPNEXT)

#python #erpnext #frappe

#python #erpnext #frappe

Вопрос:

Я хочу динамически добавлять дочерние таблицы в зависимости от записей в другом типе документа.

Комментарии:

1. Пожалуйста, напишите вопрос подробнее

Ответ №1:

@Саджид лиаз,

Вы можете добавить строку в дочернюю таблицу, используя метод append

например

 doc = frappe.get_doc('Sales Order', 'SO-00002')
doc.append('items', {
    'company': 'company_name',
    'item_code': 'item_code',
    'item_name': 'item_name',
    'field': 'field_value'
})
doc.save()
  

где items находится имя поля дочерней таблицы.

Комментарии:

1. Я хочу динамически добавлять дочерние таблицы, а не данные. например, если шаблон оценки имеет дочернюю таблицу с тремя строками, то при оценке он должен динамически генерировать три таблицы

2. @Sajid Ijaz Вы не можете добавлять поля во время выполнения, вместо этого добавьте поле HTML и отобразите таблицу html с данными

Ответ №2:

Существует несколько способов добавления дочерней таблицы в родительский документ:

Способ 1:

`

 import frappe
parent = frappe.get_doc('Sales Order', 'SO-00002')
child = frappe.new_doc("Sales Order Item")
child.update({
    'company': 'company_name',
    'item_code': 'item_code',
    'item_name': 'item_name',
    'field': 'field_value'
    'parent': parent.name,
    'parenttype': 'Sales Order',
    'parentfield': 'items'
})
parent.items.append(child)
  

Способ 2:

 import frappe

parent = frappe.get_doc('Sales Order', 'SO-00002')
child = frappe._dict({
     'company': 'company_name',
    'item_code': 'item_code',
    'item_name': 'item_name',
    'field': 'field_value'
})
parent.items.append(child)
  

`

Ответ №3:

Это возможно, поскольку типы документов обрабатываются как данные в фреймворке Frappe. Однако динамические поля, добавленные во время выполнения, должны быть добавлены в качестве пользовательских полей.

 from frappe.custom.doctype.custom_field.custom_field import create_custom_field

create_custom_field('Task' {
    "fieldname": 'values',
    "label": 'Values',
    "fieldtype": 'Table',
    "options": 'Child Table'
})
  

Ответ №4:

 parent = frappe.get_doc('Sales Order', 'SO-00002')
parent.append("items", {
    'company': 'company_name',
    'item_code': 'item_code',
    'item_name': 'item_name'
})
parent.save()
frappe.db.commit()