الأدلةدروس

أنشئ سجل فواتير متعددة العملات في Excel

نزّل مصنف Excel للفواتير باليورو والجنيه والين والروبية، مع لقطات صرف مؤرخة وتحويلات USD بالمعادلات وسجل تدقيق.

8 سبتمبر 2026 · 8 دقائق قراءة

يحافظ المصنف على مبلغ الفاتورة بعملته الأصلية ويحوّله إلى USD باستخدام اللقطة المؤرخة التي تختارها. تبقى الصفوف المرحّلة قابلة لإعادة الإنتاج لأن التاريخ والمصدر وdata_updated_at والسعر محفوظة معاً.

  • مصنف جاهز مع فواتير ولقطات مؤرخة ومعادلات.
  • rate_per_usd هو عدد وحدات العملة مقابل USD واحد.
  • احفظ المصدر والجلسة وdata_updated_at للصف المرحّل.
  • يضيف Power Query لقطات جديدة دون استبدال القيم المثبتة.
  • الأسعار إرشادية وليست نصيحة ضريبية أو محاسبية.

نزّل المصنف

نزّل مصنف سجل الفواتير وافتحه في Excel. يحتوي على فواتير توضيحية ولقطات EUR/GBP/JPY/IDR وأعمدة USD وسجل تدقيق. استبدل الأمثلة بسجلاتك.

افهم أوراق العمل الأربع

تحتوي Invoice Tracker على الفواتير والمعادلات، وتحفظ FX Snapshots ملاحظة مؤرخة لكل عملة، وتسجل Audit Trail قرار التثبيت، وتشرح Read Me طريقة الاستخدام والحدود.

أضف فاتورة بعملتها الأصلية

أدخل رقم الفاتورة والعميل والتواريخ والعملة والصافي والضريبة وتاريخ السعر والحالة في الخلايا الزرقاء. اترك Net وTax وGross بعملة الفاتورة.

أضف لقطة الصرف المؤرخة

أضف الملاحظة التاريخية المستخدمة بالضبط. احفظ التاريخ والعملة وsource وmarket_session وdata_updated_at والسعر. السعر هو وحدات عملة الفاتورة مقابل USD واحد. استخدم Snapshot ID فريداً مثل EUR-20260602-v1، وتحقق من وجود صف واحد بالضبط ومن تطابق عملة اللقطة مع عملة الفاتورة. أضف v2 للتصحيح ولا تستبدل v1. يوضح data_updated_at وقت تحديث البيانات التاريخية، وليس effective_at.

Representative historical response
{  "result": "success",  "base": "USD",  "date": "2026-06-02",  "source": "ecb_daily",  "sources": { "EUR": "ecb_daily" },  "market_session": "open",  "timestamp": "2026-09-08T11:52:18Z",  "data_updated_at": "2026-06-02T00:00:00Z",  "is_forward_filled": false,  "rates": { "EUR": 0.85844 },  "notice": "Indicative rates, not for settlement."}

راجع أعمدة USD المحسوبة

يطابق المصنف التاريخ والعملة مع FX Snapshots ثم يقسم المبلغ على FX Rate / USD. Gross يساوي Net + Tax، وتبقى أعمدة USD فارغة عند غياب اللقطة. تمتد المعادلات إلى الصف100 للفواتير واللقطات؛ وسّع النطاقين معاً. Posted تسمية فقط ولا يقفل الخلايا أو يثبت المعادلات تلقائياً.

Excel formula · Net USD
=IF(OR(F6<0,G6<0,H6<0,K6="",L6="Missing snapshot ID",L6="Duplicate snapshot ID",L6="Currency mismatch",L6="Invalid rate"),"",F6/K6)

ثبّت القيم المرحّلة

بعد ترحيل الفاتورة، لا تغيّر صف اللقطة. أضف صفاً جديداً للتصحيح أو إعادة العرض وسجّل السبب في Audit Trail إذا تغيّر المصدر.

أضف لقطة جديدة عبر Power Query

يستدعي سكريبت Power Query تاريخاً وعملة محددين. حمّل الناتج كصف جديد ولا تضع مفتاحاً في مصنف مشترك. يعيد Power Query تسعة أعمدة A:I. حمّلها أولاً إلى ورقة staging، ثم انسخ صف البيانات بلا العناوين والصقه كقيم ابتداءً من الصف7. Refresh All يستبدل ناتج الاستعلام ولا يضيف تاريخاً ثابتاً. في Windows استخدم Data → Get Data → From Other Sources → Blank Query، وفي Microsoft 365 for Mac استخدم Data → Get Data → Launch Power Query Editor. اختر Anonymous، واستخدم وسيطاً على الخادم عند الحاجة إلى مفتاح.

Power Query M · explicit snapshot
let    SnapshotDate = "2026-06-02",    Currency = Text.Upper(Text.Trim("EUR")),    Revision = "v1",    SelectedDate = Date.FromText(SnapshotDate, [Format = "yyyy-MM-dd", Culture = "en-US"]),    RelativePath = "v1/" & Date.ToText(SelectedDate, "yyyy-MM-dd") & "/USD",    Endpoint = "https://api.exchangerate.dev/" & RelativePath & "?symbols=" & Currency,    Payload = Json.Document(Web.Contents("https://api.exchangerate.dev", [        RelativePath = RelativePath,        Query = [symbols = Currency],        Timeout = #duration(0, 0, 0, 10)    ])),    Source = if Payload[base] <> "USD" or Payload[date] <> SnapshotDate        then error "Unexpected response base or date" else Payload,    RawRate = Record.Field(Source[rates], Currency),    Rate = if not Value.Is(RawRate, type number) or RawRate <= 0        then error "Expected a positive numeric rate" else RawRate,    SnapshotId = Currency & "-" & Text.Replace(SnapshotDate, "-", "") & "-" & Revision,    Notes = "Response timestamp=" & Source[timestamp] & "; is_forward_filled=" &        (if Source[is_forward_filled] then "true" else "false"),    Snapshot = #table(        {"Snapshot ID", "Snapshot Date", "Currency", "Source", "Market Session", "Data Updated At (UTC)", "Rate / USD", "API Endpoint", "Notes"},        {{SnapshotId, SelectedDate, Currency, Record.Field(Source[sources], Currency), Source[market_session], Source[data_updated_at], Rate, Endpoint, Notes}}    )in    Snapshot

احتفظ بسجل التدقيق

سجّل وقت الترحيل واللقطة والمصدر/الجلسة وسبب التثبيت. احتفظ بالاستجابة الأصلية عندما تحتاج عمليتك إلى دليل إضافي. احفظ في Notes طابع الاستجابة وis_forward_filled، وسجل Snapshot ID والمصدر والجلسة وسبب التصحيح.

استخدم النتيجة للتقارير فقط

هذا مثال للتقارير والتحليل فقط. لا يحدد الضرائب أو المحاسبة أو الامتثال أو التسوية أو مبلغ مزود الدفع. تنتهي السعة النموذجية عند الصف100؛ وسّع المعادلات ونطاقات البحث معاً.

أسئلة

هل يحدّث المصنف الفواتير المرحّلة تلقائياً؟

لا. تستخدم الصفوف المرحّلة لقطة ثابتة حتى لا يغيّر التحديث تقريراً سابقاً بصمت.

ما معنى rate_per_usd؟

هو مبلغ عملة الفاتورة مقابل USD واحد. اقسم المبلغ الأصلي عليه للحصول على USD توضيحي.

هل أستطيع استخدام سعر مباشر؟

أضف لقطة جديدة لفترة مفتوحة مع حفظ التاريخ والمصدر وdata_updated_at والجلسة، ولا تستبدل لقطة مرحّلة.

هل هذا توجيه ضريبي أو محاسبي؟

لا. هذا مثال تقريري؛ طبّق سياساتك ومستشاريك.

هل أضع المفتاح في Power Query؟

لا تضع المفاتيح في المصنفات المشتركة. استخدم الوصول المجهول للتجربة أو خادماً وسيطاً.

تابع القراءة

ابدأ بمفتاح API مجاني

5,000 طلب شهريًا ضمن الخطة المجانية. لا حاجة إلى بطاقة ائتمان.

احصل على مفتاح مجاني