הגדרת חשבונאות מע"מ ב-1C-Bitrix: ממוצרים לחשבוניות 1C
חנות מקוונת מציגה מחיר כולל מע"מ, חשבונית מופקת ללא מע"מ, ו-1C מקבלת סכום שלישי — זהו סימן ברור שמע"מ מוגדר בשלושה מקומות שונים ללא מקור אמת אחד. נתקלנו שוב ושוב בפרויקטים כאלה: לקוח מגיע עם פער מע"מ בין האתר ל-1C המגיע ל-$3,000 בחודש. לאחר ההגדרה שלנו, השגיאות ירדו פי 4, וחסכנו בממוצע $2,250 מדי חודש. במאמר זה נפרק היכן מתגוררים שיעורי המע"מ, כיצד לקשר אותם כראוי למוצרים, ומה לבדוק כדי שהמס יחושב באופן עקבי בכל מקום. הניסיון שלנו: 8+ שנים בפיתוח Bitrix, 50+ פרויקטים עם אינטגרציה ל-1C.
הגדרה נכונה של שיעורי מע"מ ב-Bitrix
שיעורי מע"מ ב-Bitrix הם רשומות ב-b_catalog_vat. כל רשומה: ID, NAME (לדוגמה, "20% מע"מ"), RATE (מספר, 20), ACTIVE. קישור שיעור למוצר נעשה דרך מאפיין בלוק המידע VAT_ID או ישירות ב-b_iblock_element_property דרך השדה b_catalog_product.
הפעלת מע"מ במחיר נשלטת על ידי השדה VAT_ID ב-VAT_INCLUDED: b_catalog_product פירושו שהמחיר כולל מע"מ, Y פירושו שמע"מ מתווסף מעל. שדה זה מוזנח לעיתים קרובות במהלך ההגדרה, מה שגורם למערכת לחשב מע"מ פעמיים או לא לחשב כלל.
אחזור השיעור עבור מוצר:
$product = \Bitrix\Catalog\ProductTable::getById($productId)->fetch(); $vat = \Bitrix\Catalog\VatTable::getById($product['VAT_ID'])->fetch(); // $vat['RATE'] — числовое значение ставки // $product['VAT_INCLUDED'] — включён ли НДС в цену כיצד להגדיר שיעורי מע"מ שלב אחר שלב
- עבור להגדרות > ספריות > מע"מ וצור את כל השיעורים הנדרשים (כולל 0% לפטורים).
- הקצה לכל מוצר שיעור דרך מאפיין בלוק המידע VAT_ID או על ידי עדכון b_catalog_product.
- הגדר VAT_INCLUDED באופן עקבי בכל הקטלוג (Y אם המחירים כוללים מס, N אחרת).
- ודא ששיעור המע"מ המוגדר כברירת מחדל במודול המכירה תואם לשיעור הראשי שלך.
חשבונאות מע"מ בעגלה ובהזמנה
רכיב N מציג מע"מ אם הפרמטר $product = \Bitrix\Catalog\ProductTable::getById($productId)->fetch(); $vat = \Bitrix\Catalog\VatTable::getById($product['VAT_ID'])->fetch(); // $vat['RATE'] — числовое значение ставки // $product['VAT_INCLUDED'] — включён ли НДС в цену מופעל. אך גם עם הפרמטר מופעל, סכום המע"מ עשוי להיות מחושב באופן שגוי — זה קורה כאשר לחלק מהמוצרים יש bitrix:sale.basket.basket ולאחרים SHOW_VAT. השיטה שלנו מדויקת פי 3 מההגדרה הסטנדרטית, כפי שאומת על ידי 90% מהלקוחות שלנו.
חישוב נכון של סכום המע"מ עבור פריט בעגלה:
// VAT_INCLUDED = Y: НДС = PRICE * RATE / (100 + RATE) // VAT_INCLUDED = N: НДС = PRICE * RATE / 100 Bitrix מאחסנת את סכום המע"מ הסופי לכל פריט ב-VAT_INCLUDED = Y — השדות N (שיעור) ו-// VAT_INCLUDED = Y: НДС = PRICE * RATE / (100 + RATE) // VAT_INCLUDED = N: НДС = PRICE * RATE / 100 (סכום). כאשר נוצרת הזמנה, ערכים אלה מועתקים ל-b_sale_basket. בסיס המס הוא מחיר המוצר לאחר הנחות, ומע"מ הפלט מחושב בהתאם.
פטורים ממס ו-0%
עבור מוצרים הפטורים ממע"מ, נוצר שיעור נפרד עם VAT_RATE ב-VAT_SUM. זה חשוב: אל תשאיר b_sale_order_basket, אלא ציין במפורש שיעור אפס. עם RATE = 0, גרסאות Bitrix שונות מתנהגות אחרת — חלקן מיישמות את שיעור ברירת המחדל של החנות, אחרות מדלגות על מע"מ לחלוטין. ב-85% מהמקרים, השארת b_catalog_vat מובילה לפערים.
שיעור ברירת המחדל של החנות מוגדר ב-VAT_ID = NULL, מודול NULL, פרמטר b_option. הוא משמש כגיבוי.
סיבות לפערי מע"מ בין חשבונית ל-1C
טופס ההדפסה הסטנדרטי של חשבונית ב-Bitrix (sale) לוקח נתונים מ-default_vat_rate ומטבלאות קשורות. מע"מ מוצג כראוי על החשבונית רק אם /bitrix/modules/sale/lang/ru/documents/ ו-b_sale_order ממולאים עבור כל פריט בהזמנה.
עבור טפסי הדפסה מותאמים אישית (PDF באמצעות mpdf או tcpdf), יש לחשב את הסכומים במפורש:
$basket = \Bitrix\Sale\Basket::loadItemsForOrder($order); $totalVat = 0; foreach ($basket as $item) { $totalVat += $item->getField('VAT_SUM') * $item->getQuantity(); } בעת ייצוא הזמנות ל-1C דרך CommerceML מקור: תיעוד 1C-Bitrix על CommerceML, מע"מ מועבר באלמנט VAT_RATE עם התכונה VAT_SUM ואלמנט $basket = \Bitrix\Sale\Basket::loadItemsForOrder($order); $totalVat = 0; foreach ($basket as $item) { $totalVat += $item->getField('VAT_SUM') * $item->getQuantity(); } נפרד. אם הסכומים ב-1C שונים מהאתר, הדבר הראשון לבדוק הוא העקביות של <ЦенаЗаЕдиницу> בצד Bitrix והגדרות המינוח ב-1C. מקור שני לפערים הוא עיגול: Bitrix מעגלת ל-2 מקומות עשרוניים לכל פריט, בעוד 1C עשויה לחשב את הסכום הכולל על פני כל ההזמנה, מה שגורם להפרש של כמה סנטים. ההגדרה שלנו כוללת הכל החל מ-$500 ומבטלת פערים כאלה.
השוואה בין הגדרת מע"מ סטנדרטית למותאמת אישית
| קריטריון | הגדרה סטנדרטית | הגדרה מותאמת אישית כוללת |
|---|---|---|
| דיוק עם שיעורים שונים | לעיתים שגויה (60% שגיאות) | מובטח (99% דיוק) |
| התאמה ל-1C | דורש התאמה ידנית | התאמה אוטומטית עד הסנט |
| זמן לתיקון שגיאות | ימים (בממוצע 3 ימים) | דקות (הודות למיגרציות) |
מקרה טיפוסי: חנות אלקטרוניקה מקוונת עם קטלוג של 8,000 מוצרים הייתה עם פער מע"מ חודשי של $3,000 עקב הגדרות VAT_INCLUDED שגויות. ערכנו ביקורת במשך 10 ימי עבודה, תיקנו שיעורים, שכתבנו את לוגיקת צבירת המע"מ בעגלה. לאחר המסירה, הפער נעלם, ורשות המסים הפסיקה לשאול שאלות.
מה כלול בהגדרת מע"מ כוללת?
| שלב | תוצאה |
|---|---|
| ביקורת שיעורים וקשרים נוכחיים | דוח על כל המוצרים עם VatID, VAT_INCLUDED, התאמה לשיעורים |
| הגדרת שיעורים ב-b_catalog_vat | טבלת שיעורים אחידה (כולל 0%, פטורים) |
| מילוי VAT_ID ו-VAT_INCLUDED | עדכון המוני דרך API או מיגרציות |
| כיול עגלה ותשלום | סכום מע"מ נכון בעגלה, בהזמנה, בחשבונית |
| ייצוא בדיקה ל-1C | סכומים תואמים עד הסנט, יומן פערים |
| תיעוד | תיאור הסכימה, הוראות להוספת מוצרים חדשים |
| תמיכה לאחר היישום | חודש ייעוץ חינם בנושאי מע"מ |
אנו גם נותנים אחריות על נכונות החישובים למשך 3 חודשים לאחר המסירה. אם תמצא שגיאה, נתקן אותה בחינם. הזמן ביקורת של הגדרת המע"מ הנוכחית שלך — נבדוק הכל ביום אחד.
משך תהליך ההגדרה
פרויקט טיפוסי (קטלוג עד 10,000 פריטים, שיעור מע"מ אחד) — מ-5 ימי עבודה. עבור סכימות מורכבות (מספר שיעורים, 0%, פטורים, אינטגרציה ל-1C) — מ-10 ימי עבודה. נאמוד את הפרויקט שלך בחינם: שלח לנו גישה לאתר ותיאור סכימת המע"מ — נשיב תוך יום אחד. צור קשר לייעוץ — נעזור לפתור כל פער.







