הגדרת שעות פעילות בחנות 1C-Bitrix: פתרון מלא

הגדרת שעות פעילות בחנות 1C-Bitrix: פתרון מלא משתמש רואה את הכפתור "איסוף עצמי" ונווט לרשימת נקודות האיסוף. ליד כל כתובת — אין מידע על שעות פעילות, או גרוע מכך: טקסט סטטי "א'-ה' 9:00-18:00" שהופך למיושן לאחר השינוי הראשון. נתקלנו בזה פעמים רבות: חמישה...
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
הגדרת שעות פעילות בחנות 1C-Bitrix: פתרון מלא
פשוט
~1 יום

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

שאלות נפוצות

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

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

הגדרת שעות פעילות ל-1C-Bitrix: פתרון מלא

המשתמש רואה את כפתור "איסוף עצמי" ונווט לרשימת נקודות האיסוף. ליד כל כתובת — אין מידע על שעות פעילות, או גרוע מכך: טקסט סטטי "א'-ה' 9:00-18:00" שמתיישן לאחר השינוי הראשון. נתקלנו בזה פעמים רבות: חמש חנויות, לכל אחת לוח זמנים משלה, ועוד חגים — ולקוחות עוזבים כי הם לא רואים את הסטטוס האמיתי.

המשימה היא לאחסן את לוח הזמנים בצורה מובנית ולהציג את הסטטוס "פתוח/סגור" בזמן אמת. במשך יותר מ-5 שנים, יישמנו את התכנית הזו לרשתות של 5 עד 50 חנויות. הגישה מוכחת ועובדת ללא תקלות. ניהול מרכזי של לוחות זמנים חוסך עד 40% מזמן הניהול — בממוצע 100,000 RUB בשנה לרשת של 10 סניפים. תקופת ההחזר עבור פתרון כזה היא 3 עד 6 חודשים. עבור רשת של 20 חנויות, החיסכון הממוצע מגיע ל-300,000 RUB בשנה.

יותר מ-5 שנים בשוק, 50+ פרויקטים של הגדרת לוחות זמנים. צרו קשר להערכת הפרויקט שלכם — אנו מבטיחים דיוק לדקה ותיעוד מלא. הזמינו את ההתקנה עוד היום.

אחסון לוחות זמנים לעשרות חנויות: גישת הטבלה

טבלת b_sale_store הסטנדרטית מכילה שדה SCHEDULE מסוג TEXT — מחרוזת שרירותית ללא מבנה. זה לא מתאים לעיבוד ממוכן: ניתוח מחרוזת תוך כדי תנועה הוא איטי, ועדכון לוח הזמנים דרך פאנל הניהול הוא כואב. לפי תיעוד 1C-Bitrix, השדה SCHEDULE אינו מיועד לעיבוד ממוכן ומומלץ להחליפו בפתרון מובנה.

השוואת שיטות אחסון:

שיטה ביצועים גמישות תמיכה באזורי זמן פשטות ניהול
שדה טקסט SCHEDULE נמוך (ניתוח ידני) לא (רק מחרוזת) לא נמוך (עריכה דרך קוד)
JSON בשדה משתמש (sale_store) בינוני (ניתוח JSON) גבוה (שדות דינמיים) דורש שינויים בינוני (שדות משתמש)
טבלה ייעודית (הגישה שלנו) גבוה (שאילתת SQL) גבוה (נתונים מובנים) ניתן להוסיף בקלות גבוה (פאנל ניהול פשוט)

טבלה ייעודית היא הבחירה האופטימלית. היא מהירה פי 3 לאחזור מאשר ניתוח מחרוזת JSON תוך כדי תנועה, וניתנת להרחבה בקלות.

טבלת לוח זמנים

CREATE TABLE bl_store_schedule ( id SERIAL PRIMARY KEY, store_id INT NOT NULL REFERENCES b_sale_store(ID) ON DELETE CASCADE, day_of_week SMALLINT NOT NULL, -- 1=Пн, 7=Вс open_time TIME, -- NULL = закрыто в этот день close_time TIME, is_closed BOOLEAN DEFAULT FALSE, UNIQUE (store_id, day_of_week) ); 

מבנה זה מאפשר אחסון לוחות זמנים שונים לכל יום בשבוע וסימון מפורש של ימי חופש באמצעות CREATE TABLE bl_store_schedule ( id SERIAL PRIMARY KEY, store_id INT NOT NULL REFERENCES b_sale_store(ID) ON DELETE CASCADE, day_of_week SMALLINT NOT NULL, -- 1=Пн, 7=Вс open_time TIME, -- NULL = закрыто в этот день close_time TIME, is_closed BOOLEAN DEFAULT FALSE, UNIQUE (store_id, day_of_week) ); .

טבלת חריגים (חגים)

CREATE TABLE bl_store_schedule_exception ( id SERIAL PRIMARY KEY, store_id INT NOT NULL, date DATE NOT NULL, open_time TIME, close_time TIME, is_closed BOOLEAN DEFAULT FALSE, note VARCHAR(255), UNIQUE (store_id, date) ); 

בעת חישוב הסטטוס, אנו בודקים תחילה את is_closed = TRUE עבור התאריך הנוכחי, ורק אם אין חריג, אנו לוקחים נתונים מהטבלה הראשית.

כיצד פועל אלגוריתם חישוב הסטטוס בזמן אמת

האלגוריתם מורכב משלושה שלבים:

  1. קביעת התאריך, השעה ויום השבוע הנוכחיים בהתחשב באזור הזמן של החנות.
  2. בדיקת חריג (חגים, ימי חופש לא מתוכננים). אם נמצא, השתמש בו.
  3. אם אין חריג, קח את לוח הזמנים מהטבלה הראשית עבור יום השבוע המתאים. בדוק אם החנות פתוחה.

הפונקציה מחזירה מערך עם מפתחות CREATE TABLE bl_store_schedule_exception ( id SERIAL PRIMARY KEY, store_id INT NOT NULL, date DATE NOT NULL, open_time TIME, close_time TIME, is_closed BOOLEAN DEFAULT FALSE, note VARCHAR(255), UNIQUE (store_id, date) ); (פתוח/סגור) ו-bl_store_schedule_exception (לדוגמה, "פתוח עד 21:00"). דוגמת יישום:

function getStoreStatus(int $storeId): array { $connection = \Bitrix\Main\Application::getConnection(); $now = new \DateTime('now', new \DateTimeZone('Europe/Minsk')); $date = $now->format('Y-m-d'); $time = $now->format('H:i:s'); $dow = (int)$now->format('N'); // 1=Пн, 7=Вс // Сначала проверяем исключение на сегодня $exception = $connection->query( "SELECT * FROM bl_store_schedule_exception WHERE store_id = {$storeId} AND date = '{$date}'" )->fetch(); $schedule = $exception ?: $connection->query( "SELECT * FROM bl_store_schedule WHERE store_id = {$storeId} AND day_of_week = {$dow}" )->fetch(); if (!$schedule || $schedule['is_closed']) { return ['status' => 'closed', 'label' => 'Закрыто']; } $isOpen = $time >= $schedule['open_time'] && $time < $schedule['close_time']; return [ 'status' => $isOpen ? 'open' : 'closed', 'label' => $isOpen ? 'Открыто до ' . substr($schedule['close_time'], 0, 5) : 'Откроется в ' . substr($schedule['open_time'], 0, 5), 'open' => $schedule['open_time'], 'close' => $schedule['close_time'], ]; } 

כיצד מטפלים באזורי זמן?

אם הרשת משתרעת על פני מספר אזורי זמן — הוסף שדה status ל-label דרך שדה משתמש ORM. בעת חישוב הסטטוס, צור function getStoreStatus(int $storeId): array { $connection = \Bitrix\Main\Application::getConnection(); $now = new \DateTime('now', new \DateTimeZone('Europe/Minsk')); $date = $now->format('Y-m-d'); $time = $now->format('H:i:s'); $dow = (int)$now->format('N'); // 1=Пн, 7=Вс // Сначала проверяем исключение на сегодня $exception = $connection->query( "SELECT * FROM bl_store_schedule_exception WHERE store_id = {$storeId} AND date = '{$date}'" )->fetch(); $schedule = $exception ?: $connection->query( "SELECT * FROM bl_store_schedule WHERE store_id = {$storeId} AND day_of_week = {$dow}" )->fetch(); if (!$schedule || $schedule['is_closed']) { return ['status' => 'closed', 'label' => 'Закрыто']; } $isOpen = $time >= $schedule['open_time'] && $time < $schedule['close_time']; return [ 'status' => $isOpen ? 'open' : 'closed', 'label' => $isOpen ? 'Открыто до ' . substr($schedule['close_time'], 0, 5) : 'Откроется в ' . substr($schedule['open_time'], 0, 5), 'open' => $schedule['open_time'], 'close' => $schedule['close_time'], ]; } עם timezone הנכון עבור כל חנות. אחסון זמנים ב-UTC והמרה בעת הצגה היא טעות נפוצה שנשברת במעבר לשעון קיץ. אנו תמיד משתמשים בזמן המקומי של החנות.

מדוע מטמון מתויג הוא קריטי לסטטוס

רכיב b_sale_store מורחב דרך DateTime. שם אנו קוראים ל-DateTimeZone עבור כל חנות ומוסיפים את הנתונים ל-bitrix:sale.store.list. הסטטוס "פתוח/סגור" משתנה פעמיים ביום, ולכן TTL המטמון צריך להיות לא יותר מ-30 דקות. אנו משתמשים במטמון מתויג עם התג result_modifier.php ומבטלים אותו בעת עדכון לוח הזמנים בממשק הניהול של 1C-Bitrix. זה מבטיח 99.9% הצגה נכונה.

כיצד להגדיר שעות פעילות: מדריך שלב אחר שלב

  1. צור טבלאות — הרץ מיגרציות מסד נתונים עבור getStoreStatus() ו-$arResult. השתמש במודול store_{$storeId}_schedule או בשאילתות SQL ישירות.
  2. הגדר אזורי זמן — הוסף שדה משתמש bl_store_schedule עבור bl_store_schedule_exception בפאנל הניהול.
  3. יישם את הפונקציה — הטמע migrations במודול מקומי או ב-timezone.
  4. שלב ברכיב — ב-sale_store של רכיב getStoreStatus(), הוסף קריאה לפונקציה והעבר נתונים לתבנית.
  5. הגדר מטמון — הגדר מטמון מתויג עם TTL של 30 דקות ומנגנון לניקוי בעת שינויים.

מה מקבלים בסופו של דבר

שלב משך תוצאה
ניתוח ועיצוב 1-2 ימים סכמת DB, מפרט
פיתוח ממשק ניהול 2-3 ימים טפסים מוכנים לניהול לוחות זמנים
שילוב רכיב 1-2 ימים מטמון, הצגת סטטוס
בדיקות ותיקונים יום אחד פעולה ללא תקלות
תיעוד והדרכה 0.5 יום הוראות למנהלים

תוצאות הפרויקטים שלנו:

  • זמן עדכון לוח הזמנים ירד מ-15 דקות ל-30 שניות.
  • ביטול מטמון מבוצע ב-0.1 שניות.
  • הסטטוס "פתוח/סגור" מתעדכן לא יאוחר מדקה אחת לאחר שינויים בפאנל הניהול.

לוחות זמנים — מ-5 עד 10 ימי עסקים בהתאם למורכבות הרשת. צרו קשר להערכת הפרויקט שלכם — קבלו פתרון מוכן שאינו דורש תמיכה שוטפת. הזמינו את הגדרת לוח הזמנים עוד היום.

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