Я создаю приложение Frappe , аналогичная ( рабочая ) функциональность существует, поэтому я пытаюсь повторно использовать этот код. Я не могу найти фактическое назначение для переменной lst
в этом документе python (используя поиск, это локальная переменная для этой функции). Пока он выглядит как пустой список при объявлении, однако он обрабатывается так, как если бы он содержал значение.
Или я просто неправильно понимаю сам код?
сначала объявлено lst
в виде списка (пусто)
lst = []
Это назначено для recciled_entry (все еще пусто)
reconciled_entry = lst
Затем оно используется следующим образом: (еще пусто)
if lst:
reconcile_against_document(lst)
Функция Функция reconcile_against_document ожидает фактический список:
Это все еще пусто ???
def reconcile_against_document(args):
"""
Cancel JV, Update against document, split if required and resubmit jv
"""
for d in args:
check_if_advance_entry_modified(d)
validate_allocated_amount(d)
# cancel advance entry
doc = frappe.get_doc(d.voucher_type, d.voucher_no)
doc.make_gl_entries(cancel=1, adv_adj=1)
...
Основная функция:
def reconcile(self, args):
for e in self.get('payments'):
e.invoice_type = None
if e.invoice_number and " | " in e.invoice_number:
e.invoice_type, e.invoice_number = e.invoice_number.split(" | ")
self.get_invoice_entries()
self.validate_invoice()
dr_or_cr = ("credit_in_account_currency"
if erpnext.get_party_account_type(self.party_type) == 'Receivable' else "debit_in_account_currency")
lst = []
dr_or_cr_notes = []
for e in self.get('payments'):
reconciled_entry = []
if e.invoice_number and e.allocated_amount:
if e.reference_type in ['Sales Invoice', 'Purchase Invoice']:
reconciled_entry = dr_or_cr_notes
else:
reconciled_entry = lst
reconciled_entry.append(self.get_payment_details(e, dr_or_cr))
if lst:
reconcile_against_document(lst)
if dr_or_cr_notes:
reconcile_dr_cr_note(dr_or_cr_notes)
msgprint(_("Successfully Reconciled"))
self.get_unreconciled_entries()