Imagineer ERPNext
Reports

การใช้แถว Custom API ในเทมเพลตรายงานการเงิน

การใช้แถว Custom API ในเทมเพลตรายงานการเงิน

แถวที่มี Data Source ตั้งเป็น "Custom API" จะได้ค่าจากฟังก์ชัน Python ฝั่งเซิร์ฟเวอร์แทนที่จะเป็นตัวกรองบัญชีหรือสูตร

สิ่งนี้ใช้ได้ในเทมเพลตที่ใช้โดย "งบดุล" "งบกำไรขาดทุน" "กระแสเงินสด" และ "งบการเงินกำหนดเอง"

เมื่อควรใช้

ใช้แถว Custom API เมื่อบรรทัดรายงานขึ้นอยู่กับตรรกะทางธุรกิจกำหนดเอง ข้อมูลงบประมาณ การรวมภายนอก หรือการคำนวณที่ไม่สามารถใช้ได้ผ่านตัวกรองบัญชีมาตรฐาน

หากคุณต้องการรวมผลลัพธ์นั้นกับบรรทัดรายงานอื่น เพิ่มแถวถัดไปที่มี Data Source ตั้งเป็น "Calculated Amount"

วิธีตั้งค่า

  1. เปิด เทมเพลตรายงานการเงิน ของคุณ
  2. เพิ่มแถวในตาราง Report Line Items
  3. ตั้ง Data Source เป็น "Custom API"
  4. ใน Formula or Account Filter ใส่เส้นทาง Python แบบจุด เช่น my_app.financial_report_api.get_budget_variance
  5. ไม่บังคับ: ตั้ง Line Reference หากแถวสูตรถัดไปควรใช้ผลลัพธ์นี้ซ้ำ
  6. ไม่บังคับ: ใช้ Reverse Sign , Hide If Zero , Hidden Line (Internal Use Only) , Include in Charts และ Value Type ในลักษณะเดียวกับที่คุณจะทำในแถวอื่น

วิธี ERPNext เรียกฟังก์ชันของคุณ

ERPNext เรียกฟังก์ชันเป้าหมายบนเซิร์ฟเวอร์และส่ง:

  • filters: ตัวกรองรายงานปัจจุบัน เป็นออบเจกต์แบบ dict
  • periods: รายการรอบที่สร้างขึ้นสำหรับรายงาน
  • row: เอกสาร Financial Report Row ปัจจุบัน

แต่ละรายการใน periods มีค่าเช่น:

  • from_date
  • to_date
  • key
  • label

ฟังก์ชันของคุณสามารถรับอาร์กิวเมนต์ทั้งสาม หรือเฉพาะที่ต้องการ

ตัวอย่าง

from frappe.utils import flt

def get_budget_variance(filters=None, periods=None, row=None):
    filters = filters or {}
    periods = periods or []

    values = []

    for period in periods:
        # Replace this placeholder logic with your own query or calculation.
        variance = 0.0
        values.append(flt(variance))

    return values

ข้อกำหนดการคืนค่า

  • คืนค่ารายการตัวเลข
  • คืนค่าหนึ่งค่าสำหรับแต่ละรอบใน periods
  • คืนค่าในลำดับเดียวกับ periods

หากแถวมี Line Reference แถวสูตรถัดไปสามารถใช้รหัสนั้นได้ เช่น API001 + SALES001

หมายเหตุสำคัญ

  • เส้นทางต้องอยู่ในรูปแบบ app.module.method
  • เป้าหมายควรเป็นฟังก์ชัน Python ระดับโมดูลในแอปที่ติดตั้ง
  • @frappe.whitelist() ไม่จำเป็นสำหรับคุณสมบัตินี้ เว้นแต่คุณต้องการเรียกฟังก์ชันเดียวกันจาก /api/method
  • Server Scripts ยังไม่รองรับสำหรับแถว Custom API ในปัจจุบัน
  • แถว Custom API จะถูกประมวลผลก่อนแถวที่ใช้บัญชีและสูตร ดังนั้นไม่ควรขึ้นอยู่กับผลลัพธ์บรรทัดเทมเพลตอื่น
  • หากฟังก์ชันเกิดข้อผิดพลาด ERPNext จะเขียนรายการบันทึกข้อผิดพลาดและเติมแถวด้วยศูนย์แทน

การแก้ปัญหา

  • หากคุณเห็นข้อผิดพลาดในการตรวจสอบเกี่ยวกับเส้นทาง API ให้ตรวจสอบว่าเส้นทางเขียนเป็น app.module.method
  • หากคุณเห็น "Method not found" ให้ยืนยันว่าฟังก์ชันมีอยู่ในโมดูลนั้นและแอปติดตั้งในไซต์
  • หากแถวแสดงศูนย์ ให้ตรวจสอบ Error Log สำหรับรายการ Custom API Error
  • หากแถวสูตรไม่สามารถใช้ผลลัพธ์ API ได้ ให้ตรวจสอบว่าแถวต้นทางมี Line Reference และสูตรใช้รหัสเดียวกันอย่างแน่นอน
Copyright © 2026