Розробка модуля бази знань для 1С-Бітрікс: версіонування та пошук

Коли інфоблоки перестають справлятися з документацією База знань часто виростає з хаосу: інфоблоки з купою полів, загублені версії, пошук не знаходить потрібне. Співробітники витрачають до 30% робочого часу на пошук інформації — це прямі збитки. Нещодавно до нас звернулася компанія: 5000 статей в
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Розробка модуля бази знань для 1С-Бітрікс: версіонування та пошук
Середній
~1-2 тижні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1458
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    805
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1163

Коли інфоблоки перестають справлятися з документацією

База знань часто виростає з хаосу: інфоблоки з купою полів, загублені версії, пошук не знаходить потрібне. Співробітники витрачають до 30% робочого часу на пошук інформації — це прямі збитки. Нещодавно до нас звернулася компанія: 5000 статей в інфоблоках, пошук через LIKE працював 30 секунд, версії не зберігалися, доступ — лише адміністраторам. Після впровадження модуля час пошуку скоротився до 0,2 секунди, а співробітники самі публікують статті з контролем змін. Частка незадовільних результатів пошуку знизилася на 60%. Інший клієнт зіткнувся з проблемою: при інтеграції з 1С через CommerceML дані оновлювалися раз на добу, і персонал працював із застарілими інструкціями. Після міграції на спеціалізований модуль синхронізація стала практично миттєвою, а час на пошук інформації скоротився ще на 40%. Коли на сайті сотні інструкцій, а співробітники витрачають години на пошук — це явний сигнал: потрібен модуль з версіонуванням, повнотекстовим пошуком та розмежуванням доступу. Ми займаємося Бітрікс-розробкою понад 10 років і гарантуємо якість кожного модуля. У цій статті розповімо, як влаштовано модуль зсередини, і покажемо реальні цифри. Зв'яжіться з нами для розрахунку вартості та термінів.

Які проблеми вирішує спеціалізований модуль бази знань?

Звичайні інфоблоки не дають:

  • історії змін — не можна відкотитися до попередньої версії;
  • повнотекстового пошуку — пошук по LIKE повільний і неточний;
  • розмежування доступу — складно приховати розділи від неавторизованих користувачів;
  • інтеграції з підтримкою — клієнт не може зі статті перейти до створення тікету.

Модуль Vendor.KnowledgeBase вирішує все це. Нижче — як він влаштований.

Як ми будуємо модуль: стек та архітектура

Модуль створюється на базі ORM Бітрікс (таблиці b_vendor_kb_*) з використанням PostgreSQL для повнотекстового пошуку. Також підтримується інтеграція з 1С через CommerceML для синхронізації статей з обліковою системою. Стек: PHP 8.1, ORM Бітрікс, PostgreSQL 15, Redis для кешування. Детальніше про ORM Бітрікс — у офіційній документації.

Модель даних:

  • b_vendor_kb_section — розділи: id, parent_id, name, slug, description, sort, icon, access_level (public/registered/group), is_active
  • b_vendor_kb_article — статті: id, section_id, title, slug, body (HTML/Markdown), excerpt, author_id, status (draft/review/published), views, helpful_count, not_helpful_count, created_at, updated_at, published_at
  • b_vendor_kb_revision — версії статей: id, article_id, body, author_id, created_at, change_summary
  • b_vendor_kb_attachment — файли: id, article_id, file_id, name
  • b_vendor_kb_tag та b_vendor_kb_article_tag — теги

Як організовано версіонування статей?

При кожному збереженні створюється нова ревізія. Код сервісу — на PHP 8.1+:

class ArticleService { public function update(int $articleId, array $fields, int $editorId, string $changeSummary = ''): void { $current = ArticleTable::getById($articleId)->fetch(); RevisionTable::add([ 'ARTICLE_ID' => $articleId, 'BODY' => $current['BODY'], 'AUTHOR_ID' => $editorId, 'CHANGE_SUMMARY' => $changeSummary ?: 'Обновление', 'CREATED_AT' => new DateTime(), ]); ArticleTable::update($articleId, array_merge($fields, [ 'UPDATED_AT' => new DateTime(), ])); } public function rollback(int $articleId, int $revisionId): void { $revision = RevisionTable::getById($revisionId)->fetch(); $this->update($articleId, ['BODY' => $revision['BODY']], 0, 'Откат к ревизии #' . $revisionId); } } 

Історія версій зберігається безстроково. Для економії місця старі ревізії можна архівувати агентом (залишати N останніх + щомісячні знімки). Детальніше про версіонування — Wikipedia: Software versioning.

Як працює повнотекстовий пошук через PostgreSQL?

Пошук за заголовками та тілом статей будується на векторах tsvector. PostgreSQL tsvector у 3 рази швидший за звичайний LIKE-пошук на 10 000 статей. Детальніше про технологію — Повнотекстовий пошук на Wikipedia. Приклад SQL:

UPDATE b_vendor_kb_article SET fts_vector = to_tsvector('russian', title || ' ' || strip_tags(body)) WHERE id = :id; SELECT id, title, ts_headline('russian', body, q) AS excerpt FROM b_vendor_kb_article, to_tsquery('russian', :query) q WHERE fts_vector @@ q AND status = 'published' ORDER BY ts_rank(fts_vector, q) DESC LIMIT 20; 

Результат — з підсвічуванням збігів та ранжуванням. Вектор tsvector будується при збереженні статті тригером на рівні БД, а асинхронний агент оновлює індекс раз на хвилину. Пошук по 10 000 статей займає менше 0,1 секунди.

Що дає розмежування доступу?

У кожного розділу — рівень доступу:

  • public — всім.
  • registered — лише авторизованим.
  • group — лише користувачам із зазначених груп Бітрікс.

Наслідування працює за принципом: якщо батьківський розділ прихований, всі дочірні автоматично отримують той самий рівень. Перевірка — у middleware компонента. Це гарантує, що конфіденційні документи не потраплять до сторонніх.

Друкована версія та PDF

Компонент vendor:kb.article.print віддає сторінку без навігації, оптимізовану для друку. PDF генерується через mPDF, кешується у файловій системі та скидається при оновленні статті.

Процес розробки модуля

Чек-лист етапів:

  1. Аналіз вимог та схеми доступу.
  2. Проектування таблиць ORM.
  3. Реалізація сервісного шару (версіонування, пошук).
  4. Розробка адміністративного інтерфейсу.
  5. Створення компонентів сайту.
  6. Інтеграція з тікет-системою (опціонально).
  7. Тестування на реальних даних.
  8. Деплой та навчання.

Що входить у роботу: deliverables

Етап Результат
Проектування Схема БД, API, структура компонентів
Розробка Готовий модуль з ORM, міграціями, агентами
Адміністративний інтерфейс Управління розділами, статтями, ревізіями
Компоненти сайту Список, стаття, пошук, друк
Інтеграція з тікет-системою Кнопка «Відкрити тікет» у статті
Документація Опис модуля, керівництво адміністратора
Навчання 2 години онлайн-демонстрації для ваших співробітників
Технічна підтримка 3 місяці після запуску

Порівняння самописної бази знань та готових рішень

Критерій Власний модуль SaaS-рішення (Confluence, HelpDesk)
Інтеграція з 1С-Бітрікс Повна Часткова або через API
Розмежування доступу за групами Бітрікс Так Ні
Версіонування Повне Обмежене
Вартість Одноразова Щомісячна підписка
Кастомізація Без обмежень Обмежена вендором

Власний модуль дає безшовну інтеграцію та гнучкість — це окупається на масштабах від тисяч статей. На тестовому каталозі з 10 000 статей модуль показав у 3 рази меншу затримку пошуку порівняно з інфоблочним рішенням. Проект окупається за 6–12 місяців.

Орієнтовні терміни

Етап Терміни
ORM-таблиці, ієрархія розділів 1 день
Версіонування статей, відкат 2 дні
Повнотекстовий пошук (PostgreSQL tsvector) 2 дні
Розмежування доступу 1 день
Друкована версія, PDF 1 день
Компоненти сайту (список, стаття, пошук) 2 дні
Адміністративний інтерфейс 2 дні
Тестування 1 день
Разом 12 робочих днів
Інтеграція з тікет-системою +1 день

Вартість розраховується індивідуально залежно від складності. Замовте консультацію — впровадимо базу знань за 2 тижні.