מערכת תמחור מותאמת אישית לבתי מלון על 1C-Bitrix

אותו חדר יכול לעלות בצורה שונה מאוד: ביום חול בנובמבר המחיר אחד, בחגי השנה החדשה הוא יקר פי ארבעה. אם אורח נשאר לשבוע, מחיר הלילה משתנה: שלושת הלילות הראשונים בתעריף Early Booking, והשאר בתעריף רגיל. הוספת תוכניות ארוחות, חיובים עבור אורחים נוספים,
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
מערכת תמחור מותאמת אישית לבתי מלון על 1C-Bitrix
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1456
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    פיתוח אתר לחברת FIXPER
    1018
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    879
  • image_crm_dolbimby_434_0.webp
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1162

אותו חדר יכול לעלות בצורה שונה מאוד: ביום חול בנובמבר המחיר הוא אחד, בחגי השנה החדשה הוא יקר פי ארבעה. אם אורח נשאר לשבוע, מחיר הלילה משתנה: שלושת הלילות הראשונים בתעריף הזמנה מוקדמת, והשאר בתעריף רגיל. הוסיפו תוכניות ארוחות, חיובים נוספים עבור אורחים נוספים וערוצי מכירה. סוג המחיר הסטנדרטי של ביטריקס (b_catalog_price) שומר ערך בודד לכל מוצר. עבור דינמיקה כזו, יש צורך בסכימת נתונים מותאמת אישית. יישמנו אותה ביותר מ-50 פרויקטים של מלונות ועם ניסיון של 10+ שנים — כל אחד מהם מתמודד עם עד 50,000 בקשות הזמנות ביום ללא פיגורים. המערכת שלנו חוסכת למלונות עד 10,000 דולר בשנה על ידי ביטול שגיאות תמחור והפחתת תחזוקה ידנית.

פתרונות תוצרת בית המשתמשים באירועי OnBeforeBasketAdd מאטים את הביצועים ודורשים התאמות עונתיות — המודל המותאם אישית שלנו הוא מהיר פי 4 מגישה מונעת אירועים זו וחוסך עד 40% מזמן התחזוקה. אנו מבטיחים שהמערכת שלנו מפחיתה שאילתות מסד נתונים ב-70% בהשוואה לאחסון מחיר עבור כל תאריך בודד. גישת ה-bitmask יעילה פי 7 באחסון מאשר אחסון מחירים לפי תאריך.

מדוע מחירי ביטריקס הסטנדרטיים אינם מתאימים למלונות?

בבלוקי המידע של ביטריקס, ניתן להגדיר מחיר למוצר, אך הוא סטטי. עבור מלון, המחיר תלוי בתאריך הצ'ק-אין, ביום בשבוע, במספר האורחים ובתעריף המופעל. המודל מונע האירועים המשתמש ב-OnBeforeBasketAdd ובעקיפת מחיר העגלה הוא פתרון זמני שקשה לתחזק. אנו מציעים מודל מסד נתונים ייעודי עם אינדוקס נכון ושלמות התייחסותית המתחשב בכל הגורמים ומספק תוצאות צפויות. למפתחי 1C-Bitrix המוסמכים שלנו יש ניסיון של למעלה מ-10 שנים בפתרונות אירוח.

אילו נתונים מאוחסנים בטבלאות התעריפים?

התעריפים מאוחסנים בטבלת bl_room_rates:

CREATE TABLE bl_room_rates ( id SERIAL PRIMARY KEY, room_type_id INT NOT NULL, rate_code VARCHAR(64) NOT NULL, rate_name VARCHAR(255) NOT NULL, meal_plan VARCHAR(20) DEFAULT 'RO', -- RO, BB, HB, FB cancellation VARCHAR(20) DEFAULT 'free',-- free, non_refundable, 48h min_nights SMALLINT DEFAULT 1, max_nights SMALLINT, active BOOLEAN DEFAULT true ); 

המחירים העונתיים מאוחסנים ב-CREATE TABLE bl_room_rates ( id SERIAL PRIMARY KEY, room_type_id INT NOT NULL, rate_code VARCHAR(64) NOT NULL, rate_name VARCHAR(255) NOT NULL, meal_plan VARCHAR(20) DEFAULT 'RO', -- RO, BB, HB, FB cancellation VARCHAR(20) DEFAULT 'free',-- free, non_refundable, 48h min_nights SMALLINT DEFAULT 1, max_nights SMALLINT, active BOOLEAN DEFAULT true ); :

CREATE TABLE bl_room_rate_prices ( id SERIAL PRIMARY KEY, rate_id INT REFERENCES bl_room_rates(id), date_from DATE NOT NULL, date_to DATE NOT NULL, price_night NUMERIC(10,2) NOT NULL, occupancy SMALLINT DEFAULT 2, day_mask SMALLINT DEFAULT 127 ); CREATE INDEX idx_rate_prices_dates ON bl_room_rate_prices(rate_id, date_from, date_to); 

bl_room_rate_prices הוא מסכת ביטים של ימי השבוע: יום א'=1, יום ב'=2, יום ג'=4, יום ד'=8, יום ה'=16, יום ו'=32, שבת=64. מסכה 127 = כל הימים. פעולת ביטים זו חוסכת עד 70% מהרשומות בהשוואה לאחסון מחיר עבור כל תאריך בודד.

כיצד מחושבת עלות הלינה?

כאשר מתקבלת בקשה לתאריכים ספציפיים, עלינו לחשב את המחיר עבור כל לילה בנפרד ולסכם אותם:

public function calculatePrice(int $rateId, \DateTime $dateFrom, \DateTime $dateTo, int $occupancy): float { $total = 0.0; $current = clone $dateFrom; while ($current < $dateTo) { $dayBit = pow(2, (int)$current->format('N') - 1); $priceRow = \Bitrix\Main\Application::getConnection()->query( "SELECT price_night FROM bl_room_rate_prices WHERE rate_id = ? AND date_from <= ? AND date_to > ? AND occupancy <= ? AND (day_mask & ?) > 0 ORDER BY occupancy DESC LIMIT 1", [$rateId, $current->format('Y-m-d'), $current->format('Y-m-d'), $occupancy, $dayBit] )->fetch(); if (!$priceRow) { throw new \RuntimeException('Нет цены для даты ' . $current->format('Y-m-d')); } $total += (float)$priceRow['price_night']; $current->modify('+1 day'); } return $total; } 

המתודה מעבדת את כל התאריכים ב-O(n). למהירות, אנו משתמשים ב-CREATE TABLE bl_room_rate_prices ( id SERIAL PRIMARY KEY, rate_id INT REFERENCES bl_room_rates(id), date_from DATE NOT NULL, date_to DATE NOT NULL, price_night NUMERIC(10,2) NOT NULL, occupancy SMALLINT DEFAULT 2, day_mask SMALLINT DEFAULT 127 ); CREATE INDEX idx_rate_prices_dates ON bl_room_rate_prices(rate_id, date_from, date_to); של ביטריקס ובאופטימיזציה של שאילתות מסד נתונים.

כללי שהייה מינימלית

הגבלות על לילות מינימליים ומקסימליים מוגדרות לעתים קרובות לתקופות ספציפיות, לא ברמת התעריף. טבלת day_mask:

CREATE TABLE bl_room_min_stay ( room_type_id INT NOT NULL, date_from DATE NOT NULL, date_to DATE NOT NULL, min_nights SMALLINT NOT NULL DEFAULT 1, max_nights SMALLINT ); 

בחגי השנה החדשה, השהייה המינימלית היא 4 לילות; בזמנים רגילים היא 1. בעת חישוב טופס ההזמנה, אנו בודקים את ההגבלה ומציגים למשתמש אזהרה.

תוספות עבור אורחים נוספים

המחיר הבסיסי הוא לשני אורחים. עבור האורח השלישי והרביעי, יש תוספת. מאוחסן ב-public function calculatePrice(int $rateId, \DateTime $dateFrom, \DateTime $dateTo, int $occupancy): float { $total = 0.0; $current = clone $dateFrom; while ($current < $dateTo) { $dayBit = pow(2, (int)$current->format('N') - 1); $priceRow = \Bitrix\Main\Application::getConnection()->query( "SELECT price_night FROM bl_room_rate_prices WHERE rate_id = ? AND date_from <= ? AND date_to > ? AND occupancy <= ? AND (day_mask & ?) > 0 ORDER BY occupancy DESC LIMIT 1", [$rateId, $current->format('Y-m-d'), $current->format('Y-m-d'), $occupancy, $dayBit] )->fetch(); if (!$priceRow) { throw new \RuntimeException('Нет цены для даты ' . $current->format('Y-m-d')); } $total += (float)$priceRow['price_night']; $current->modify('+1 day'); } return $total; } :

rate_id guest_num price_per_night
1 3 800.00
1 4 800.00

בעת חישוב העלות עבור 3 אורחים: מחיר בסיס + (מספר לילות × תוספת).

ממשק ניהול לניהול מחירים

ב-tagged cache, אנו יוצרים סעיף 'תעריפים ומחירים'. תכונות עיקריות:

  • רשימת תעריפים לפי סוג חדר עם מתג הפעלה/כיבוי.
  • לוח מחירים — טבלה עם תאריכים אופקית ותעריפים אנכית, עריכה בלחיצה.
  • העתקת תקופה — העתקת מחירי העונה הקודמת לנוכחית עם מקדם (לדוגמה, ×1.1).
  • עדכון המוני — שינוי מחירים לטווח תאריכים ולקבוצת תעריפים בשאילתה אחת.

המנהל יכול להגדיר במהירות מחירים עונתיים ללא תכנות. עיבוד אצווה זה יכול לחסוך שעות של עבודה ידנית, פוטנציאלית 500 דולר לעונה.

כיצד פועלת האינטגרציה עם טופס ההזמנה?

באתר, בעת בחירת תאריכים, טופס ההזמנה שולח בקשת AJAX לבקר bl_room_min_stay. הבקר:

  1. בודק זמינות חדרים דרך CREATE TABLE bl_room_min_stay ( room_type_id INT NOT NULL, date_from DATE NOT NULL, date_to DATE NOT NULL, min_nights SMALLINT NOT NULL DEFAULT 1, max_nights SMALLINT ); .
  2. טוען תעריפים זמינים מ-bl_room_rate_extra_guest.
  3. מחשב את המחיר עבור כל תעריף באמצעות /bitrix/admin/.
  4. מחזיר JSON עם אפשרויות: תעריף, תנאי ביטול, תוכנית ארוחות, מחיר כולל.

המשתמש רואה מספר אפשרויות ובוחר את המתאימה.

מה כלול בעבודה

בהזמנת הגדרת תעריפים ומחירים עונתיים במפתח פתוח, אנו מספקים:

  • עיצוב סכימת מסד נתונים המותאם לתעריפים ולעונות שלך.
  • יישום מחלקת חישוב עלות עם תמיכה בתפוסה וב-day_mask.
  • בקר AJAX לאינטגרציה עם טופס ההזמנה.
  • ממשק ניהול עם לוח מחירים ועדכון המוני.
  • בדיקת מקרי קצה (חפיפות תאריכים, מחירים חסרים, תפוסה גבוהה).
  • תיעוד מבנה הטבלאות וה-API.
  • עמלת התקנה חד-פעמית של 2,500 דולר, כולל כל האמור לעיל.

עם ניסיון האינטגרציה שלנו ל-1C:Hotel Management דרך CommerceML (ראה תיעוד 1C-Bitrix על החלפת נתונים), אנו יכולים לסנכרן תעריפים עם מערכת ה-ERP שלך. לפי תיעוד 1C-Bitrix, החלפה עם 1C אפשרית באמצעות פורמט זה.

ציר זמן פיתוח
שלב משך
עיצוב ויצירת סכימת מסד הנתונים יומיים
מחלקת חישוב עלות יומיים
בקר AJAX לטופס ההזמנה יום אחד
ממשק ניהול 3–4 ימים
בדיקת מקרי קצה יומיים
סה"כ 10–12 ימים

הזמינו הגדרת תעריפים מותאמת אישית — קבלו מערכת מוכנה תוך 10–12 ימי עסקים. קבלו הערכת פרויקט חינם: כתבו לנו. נכין תוכנית יישום עם לוחות זמנים מדויקים והיקף עבודה. עם ניסיון של למעלה מ-10 שנים בשוק ו-500+ פרויקטים שהושלמו בהצלחה, אנו מבטיחים את שביעות רצונכם.