diff --git a/custom_subtabs/custom_subtabs/__init__.py b/custom_subtabs/custom_subtabs/__init__.py index 51e6520..1f60028 100644 --- a/custom_subtabs/custom_subtabs/__init__.py +++ b/custom_subtabs/custom_subtabs/__init__.py @@ -6,32 +6,37 @@ def boot_session_handler(bootinfo): tab_hierarchy_data = {} for doctype in all_doctypes: - meta = frappe.get_meta(doctype["name"]) + try: + meta = frappe.get_meta(doctype["name"]) - # Проверяем, есть ли вкладки (Tab Break) в Doctype - if not any(field.fieldtype == "Tab Break" for field in meta.fields): + # Проверяем, есть ли вкладки (Tab Break) в Doctype + if not any(field.fieldtype == "Tab Break" for field in meta.fields): + continue + + tabs = [] + subtabs = {} + + for field in meta.fields: + if field.fieldtype == "Tab Break": + tab_name = field.label + js_parent = getattr(field, 'js_parent_subtab', None) or None + + if js_parent: + if js_parent not in subtabs: + subtabs[js_parent] = [] + subtabs[js_parent].append(tab_name) + else: + tabs.append(tab_name) + + # Добавляем данные для Doctype + tab_hierarchy_data[doctype["name"]] = { + "tabs": tabs, + "subtabs": subtabs + } + except Exception as e: + # Пропускаем DocTypes с ошибками, но не ломаем весь boot + frappe.log_error(f"Error processing subtabs for {doctype['name']}: {str(e)}", "Custom Subtabs Boot Error") continue - tabs = [] - subtabs = {} - - for field in meta.fields: - if field.fieldtype == "Tab Break": - tab_name = field.label - js_parent = field.js_parent_subtab or None - - if js_parent: - if js_parent not in subtabs: - subtabs[js_parent] = [] - subtabs[js_parent].append(tab_name) - else: - tabs.append(tab_name) - - # Добавляем данные для Doctype - tab_hierarchy_data[doctype["name"]] = { - "tabs": tabs, - "subtabs": subtabs - } - # Передаём данные на клиентскую сторону через bootinfo bootinfo.tab_hierarchy = tab_hierarchy_data