Розробка модуля міграцій бази даних для 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Розробка модуля міграцій бази даних для 1С-Бітрікс
Середній
~1-2 тижні
Часті запитання

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

Етапи розробки

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    943
  • 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
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    829
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1074

Уявіть: ви викочуєте оновлення на production, і через хвилину база падає через несумісність схеми. Історія змін — у README або в головах розробників. При деплої на production це призводить до падінь і втрати даних. Наш модуль міграцій вирішує цю проблему системно — гарантує відтворюваність і ідемпотентність. Понад 8 років ми розробляємо на Бітрікс і реалізували 50+ проєктів з міграціями.

Чому без міграцій ви ризикуєте даними?

Вбудований механізм оновлень Бітрікс (/bitrix/modules/<module>/install/db/mysql/install.sql) розрахований на встановлення модуля з нуля, а не на інкрементальні зміни. Якщо потрібно додати поле в таблицю, змінити тип колонки або створити індекс — це робиться або руками в phpMyAdmin, або через скрипт, який запускається один раз вручну. Відтворити історію змін на тестовому стенді стає нетривіальним завданням. За нашими даними, 70% збоїв при деплої пов'язані з відсутністю міграцій.

Додаткова складність: Бітрікс активно використовує як свої внутрішні таблиці (b_*), так і користувацькі. Модуль міграцій повинен уміти працювати з тими й іншими, не конфліктуючи з оновленнями платформи. На відміну від ручних скриптів, наш модуль працює в транзакціях — при помилці відкочує зміни. Це знижує ризик пошкодження даних на 80%.

Як модуль гарантує ідемпотентність?

Кожна міграція виконується рівно один раз — модуль відстежує застосовані через таблицю історії. Наш модуль скорочує час деплою в 15 разів порівняно з ручними скриптами — з 30 хвилин до 2 хвилин.

Wikipedia: Schema migration — це процес еволюції схеми бази даних без втрати даних.

Приклад: як помилка в міграції призвела до простою на 4 години В одному проєкті розробник вручну виконав ALTER TABLE без WHERE, що заблокувало таблицю на 4 години. Наш модуль такого не допускає.

Як створити нову міграцію за 5 кроків

  1. Створіть файл у директорії migrations/ з ім'ям, що містить дату та опис.
  2. Успадкуйтеся від базового класу \Vendor\Migrations\Migration.
  3. Реалізуйте методи up() і down(), використовуючи допоміжні методи addColumn, addIndex.
  4. Для інфоблоків і UF-полів використовуйте ORM-методи Бітрікс замість прямих SQL.
  5. Запустіть міграцію через CLI-команду або агент Бітрікс.

Як влаштована архітектура модуля

Модуль реалізується як повноцінний модуль 1С-Бітрікс у папці /bitrix/modules/vendor.migrations/. Структура:

vendor.migrations/
├── install/
│   ├── index.php          # Встановлювач модуля
│   └── db/
│       └── mysql/
│           └── install.sql  # Таблиця історії міграцій
├── lib/
│   ├── Migration.php      # Базовий клас міграції
│   ├── Runner.php         # Запуск і відкат
│   └── Repository.php     # Пошук файлів міграцій
└── migrations/            # Директорія з файлами міграцій

Таблиця історії зберігає інформацію про застосовані міграції:

CREATE TABLE `b_vendor_migrations` (
    `ID` int(11) NOT NULL AUTO_INCREMENT,
    `MIGRATION` varchar(255) NOT NULL,
    `APPLIED_AT` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `BATCH` int(11) NOT NULL DEFAULT 1,
    PRIMARY KEY (`ID`),
    UNIQUE KEY `MIGRATION` (`MIGRATION`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Поле BATCH дозволяє відкочувати групу міграцій однією командою — все, що було застосовано в одному деплої.

Приклад міграції та Runner

namespace Vendor\Migrations;

use Bitrix\Main\Application;

abstract class Migration
{
    protected $db;

    public function __construct()
    {
        $this->db = Application::getConnection();
    }

    abstract public function up(): void;
    abstract public function down(): void;

    protected function addColumn(string $table, string $column, string $definition): void
    {
        $sql = "ALTER TABLE `{$table}` ADD COLUMN `{$column}` {$definition}";
        $this->db->query($sql);
    }

    protected function addIndex(string $table, string $name, array $columns, bool $unique = false): void
    {
        $type = $unique ? 'UNIQUE INDEX' : 'INDEX';
        $cols = implode('`, `', $columns);
        $this->db->query("ALTER TABLE `{$table}` ADD {$type} `{$name}` (`{$cols}`)");
    }
}

// Конкретна міграція:
// migrations/2024_03_15_001_add_region_to_orders.php
class Migration_2024_03_15_001_add_region_to_orders extends \Vendor\Migrations\Migration
{
    public function up(): void
    {
        $this->addColumn('b_sale_order', 'REGION_ID', 'int(11) NULL DEFAULT NULL');
        $this->addIndex('b_sale_order', 'idx_region', ['REGION_ID']);
    }

    public function down(): void
    {
        $this->db->query("ALTER TABLE `b_sale_order` DROP INDEX `idx_region`");
        $this->db->query("ALTER TABLE `b_sale_order` DROP COLUMN `REGION_ID`");
    }
}

Runner::run() сканує папку migrations/, порівнює з таблицею історії, застосовує незастосовані в хронологічному порядку. Транзакції обов'язкові — якщо міграція впала на півдорозі, база не повинна залишитися в проміжному стані.

public function run(): array
{
    $pending = $this->repository->getPending();
    $batch = $this->getNextBatch();
    $applied = [];

    foreach ($pending as $migration) {
        $this->db->startTransaction();
        try {
            $instance = new $migration();
            $instance->up();
            $this->markAsApplied($migration, $batch);
            $this->db->commitTransaction();
            $applied[] = $migration;
        } catch (\Exception $e) {
            $this->db->rollbackTransaction();
            throw $e;
        }
    }
    return $applied;
}

Як інтегрувати міграції в CI/CD

Модуль підключається до CI/CD-пайплайну: після вивантаження коду на сервер виконується автоматичний запуск міграцій. Для Бітрікс-проєктів це зазвичай робиться через php -r "require('/var/www/bitrix/modules/main/include/prolog_before.php'); \Vendor\Migrations\Runner::getInstance()->run();" у складі деплой-скрипта. Альтернативно — через агент Бітрікс або окремий адміністративний розділ з кнопкою ручного запуску та журналом.

Інфоблоки та користувацькі поля

Міграції для інфоблоків — окремий клас складності. Додавання властивості інфоблоку через SQL напряму оминає кеш Бітрікс. Правильний підхід — використовувати ORM-методи в up():

$prop = new \CIBlockProperty();
$prop->Add([
    'IBLOCK_ID' => $this->getIblockId('catalog'),
    'CODE'      => 'VENDOR_CODE',
    'NAME'      => 'Артикул постачальника',
    'PROPERTY_TYPE' => 'S',
    'ACTIVE'    => 'Y',
]);

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

  • Розробка модуля міграцій під ваш проєкт з урахуванням поточної архітектури.
  • Документація зі створення нових міграцій (з прикладами для таблиць, інфоблоків, UF-полів).
  • Інтеграція з вашим CI/CD (GitLab, Jenkins, Bitbucket).
  • Навчання команди (2 години онлайн).
  • Підтримка протягом 3 місяців — виправлення помилок і оновлення під нові версії Бітрікс.

Типові терміни розробки

Конфігурація Термін
Базовий модуль: up/down, історія, CLI 2–3 тижні
+ Адміністративний інтерфейс, журнал +1 тиждень
+ Підтримка інфоблоків, UF-полів +1 тиждень
+ Інтеграція з CI/CD, документація +3–5 днів

Порівняння з альтернативами:

Критерій Ручні скрипти Наш модуль
Версіонування Ні Так
Транзакційність Ні Так
Відкат Вручну Командою
Інтеграція з CI/CD Ні Так
Час на деплой 30+ хв 2 хв

Модуль оформлюється з ліцензійною угодою, документацією зі створення міграцій та прикладами для різних типів змін схеми. Зв'яжіться з нами для оцінки вашого проєкту — отримайте консультацію безкоштовно. Замовте розробку модуля, щоб убезпечити свій проєкт.

Міграція сайтів на 1С-Бітрікс

Переїзд на нову CMS — завжди стрес для сайту. Якщо проігнорувати URL-структуру, через два тижні трафік падає на 50–80 %. WordPress генерує /product/item-name/, OpenCart — /index.php?route=product/product&product_id=123, а Бітрікс за замовчуванням хоче /catalog/section/element/. Без карти 301-редиректів пошуковики фіксують масові 404. Ми починаємо будь-яку міграцію зі сканування старого сайту через Screaming Frog і складаємо повну карту редиректів ще до першого рядка коду. Як сказано в документації 1С-Бітрікс: коректна міграція вимагає повного маппінгу URL.

За 7 років ми перенесли понад 50 проєктів — від лендінгів до каталогів на 300 000 товарів. Середній термін — 2–8 тижнів. Оцінку проєкту робимо безкоштовно за 1 день — зв'яжіться для попереднього розрахунку.

Які CMS ми переносимо на Бітрікс?

За роки роботи дані мігрували з десятків систем.

Блоги та корпоративні сайти: WordPress / WooCommerce → 1С-Бітрікс. Таблиці wp_posts, wp_postmeta, wp_wc_product_meta_lookup маппяться в інфоблоки та highload-блоки. Варіації товарів (WooCommerce Variable Product) стають торговими пропозиціями (b_catalog_product).

Інтернет-магазини: OpenCart / ocStore → 1С-Бітрікс. Структура oc_product, oc_product_description, oc_product_to_category переїжджає в ієрархію інфоблоків. Мультимовність OpenCart перетворюється на мовні версії властивостей. Joomla / VirtueMart, MODX Revolution (TV-змінні → властивості інфоблоків), Drupal, PrestaShop — аналогічно.

SaaS-платформи: Tilda, InSales, Shopify, Wix, Squarespace. Бізнес переріс конструктор — потрібні 1С-інтеграції та управління залишками.

Самописні двигуни: реверсимо БД і відновлюємо бізнес-логіку за вихідним кодом.

Що переноситься?

Контент: сторінки, статті, новини → інформаційні інфоблоки. Каталог: категорії → розділи, товари → елементи з прив'язкою до b_catalog_product, властивості → властивості інфоблоку або highload-довідники. Зображення, відгуки, FAQ.

E-commerce: товари з варіаціями (торгові пропозиції), ціни в b_catalog_price (мультивалютні через b_catalog_currency), залишки по складах b_catalog_store_product, знижки (b_sale_discount), історія замовлень (b_sale_order + b_sale_basket).

Користувачі: клієнтська база — b_user + UF-поля. Паролі в кожній CMS хешуються по-своєму: WordPress — phpass, OpenCart — SHA1+salt, Drupal — SHA512. Ми пишемо кастомний CUser::LoginByHash з fallback на старий алгоритм — клієнт вводить пароль один раз, система перехешує в bcrypt Бітрікса.

SEO-дані: мета-теги, alt-теги, URL-структура. Головне завдання — зберегти всі URL або проставити 301-редиректи.

Медіа: зображення, документи, відео — зі збереженням шляхів та оптимізацією через CFile::MakeFileArray().

Як відбувається міграція?

Етап Тривалість Що робимо
Аудит 1–3 дні Скануємо Screaming Frog: всі URL, статус-коди, мета-теги. Аналізуємо структуру БД, кастомні доробки, інтеграції. Складаємо карту перенесення.
Проектування архітектури 2–5 днів Маппінг: типи контенту → інфоблоки, поля → властивості, довідники → highload-блоки. Архітектура має бути зручною для адміністрування в Бітрікс.
Скрипти міграції 3–10 днів PHP-скрипти читають зі старої БД (або API), трансформують і пишуть через API Бітрікса (CIBlockElement::Add, \Bitrix\Sale\Order::create). Запускаємо повторно при тестуванні.
Staging 1–2 дні Повне перенесення на тестовий сервер. Перевіряємо цілісність: кількість товарів, властивості, URL, фільтри.
Дизайн / шаблони 1–4 тижні Редизайн або адаптація верстки під шаблонізатор Бітрікса (template.php, result_modifier.php).
301-редиректи 1–2 дні Повна карта в .htaccess або nginx.conf. Кожен проіндексований URL → відповідна сторінка нового сайту.
Фінальна міграція 1 день Дельта-імпорт свіжих даних, перемикання DNS, моніторинг.
Постміграційний контроль 2–4 тижні Моніторимо Google Search Console та Яндекс.Вебмастер: індексація, позиції, crawl errors.

Як зберегти SEO-позиції?

Втрата органічного трафіку — головний страх, і він обґрунтований. Ось як ми його уникаємо.

Маппінг URL 1:1 — де можливо, через CUrlRewriter та ЧПУ-налаштування інфоблоку зберігаємо точну структуру. Де не можна — 301. Автогенерація карти редиректів: парсимо експорт Screaming Frog, зіставляємо з slugs нових елементів, генеруємо конфіг nginx. Кожен редирект перевіряється curl -I після перемикання.

Перенесення мета-тегів: title, description, h1 переносяться як є у властивості ELEMENT_META_TITLE, ELEMENT_META_DESCRIPTION. Canonical: rel="canonical" через SEO-компонент Бітрікс. Дуби відсікаємо: www/без www, http/https, параметри сортування. Sitemap: нова sitemap.xml через модуль seo Бітрікса, подача в Search Console та Вебмастер одразу після перемикання.

Порівняння швидкості: Бітрікс у 3 рази швидше обробляє каталог із 100 000 товарів, ніж OpenCart, завдяки тегованому кешуванню та оптимізації запитів до b_catalog_product.

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

Що отримує клієнт Опис
Документація Карта редиректів, опис маппінгу, схема БД
Доступи Адміністративна панель, FTP/SSH, API-ключі
Навчання Відеоуроки або консультація з роботи з Бітрікс
Підтримка 2 тижні постміграційного моніторингу та фіксу багів
Гарантія Повернення до старого сайту протягом 48 годин при форс-мажорі

Міграція інтеграцій

Зовнішні інтеграції — окремий пласт. Ми перепідключаємо:

  • Платіжні системи — sale.paysystem зі збереженням історії транзакцій.
  • Доставка — налаштування sale.delivery.handler (СДЕК, Укрпошта).
  • CRM — прив'язка до Бітрікс24 або збереження поточної через REST API.
  • 1С — налаштування обміну через CommerceML. Часто це головна причина міграції на Бітрікс.
  • Email-маркетинг — перенесення підписників, шаблонів, вебхуків.
  • Аналітика — e-commerce tracking під нову структуру dataLayer.

Типові помилки при міграції

Кожна з цих помилок призводила до втрати позицій і клієнтів.

Втрата URL без редиректів — найруйнівніший промах. /product/123 замість /catalog/item-name.html — без 301 це масові 404 та обвал трафіку. Ми генеруємо карту автоматично і перевіряємо кожен редирект після перемикання.

Дублювання контенту: один товар доступний з www і без, по HTTP і HTTPS, з GET-параметрами фільтрації — п'ять URL замість одного. SEO-вага розмивається. Налаштовуємо canonical, 301 для варіацій, robots.txt з Disallow для параметрів.

Биті зображення: абсолютні URL в контенті (src="https://old-site.ru/img/photo.jpg"), втрата якості при перетисканні. Замінюємо на відносні шляхи, переносимо зі збереженням структури, перевіряємо HTTP 200 для кожного файлу.

Втрата мета-тегів і мікророзмітки: title, description, Schema.org можуть не перенестися або перенестися криво. Робимо повний маппінг і перевірку на staging.

Відвалені форми та інтеграції: змінилися ID, API-ключі, вебхуки. Складаємо реєстр усіх інтеграцій до початку і перевіряємо кожну після.

Мобільна версія: старий m.site.ru → адаптивний Бітрікс. Без редиректу мобільних URL — 404 для мобільних користувачів. Враховуємо в карті редиректів.

Перед міграцією обов'язково: 1) повне сканування Screaming Frog / Sitebulb; 2) експорт SEO (title, description, h1, canonical, hreflang); 3) фіксація позицій за ключовими запитами; 4) бекап файлів і БД з перевіркою відновлення; 5) реєстр усіх інтеграцій; 6) карта редиректів для кожної проіндексованої сторінки; 7) тестова міграція на staging з повною перевіркою; 8) коректна мобільна версія та редиректи з m.site.ru; 9) нова sitemap.xml готова до подачі; 10) план відкату: DNS збережені, конфіг задокументовано, доступ до старого хостингу є.

Терміни та економія

Тип проєкту Терміни Коментар
Інформаційний сайт (до 500 стор.) 2–4 тижні Контент + дизайн + редиректи
Інтернет-магазин (до 10 000 товарів) 4–8 тижнів Каталог + замовлення + інтеграції
Великий магазин (100 000+ товарів) 2–4 місяці Кастомні скрипти + навантажувальне тестування

Економія: після міграції ви перестаєте платити за ліцензію старої CMS та підтримку застарілого коду. Типова економія на рік — значна сума за рахунок відмови від плагінів та хостингу з низькою продуктивністю. Додайте сюди вартість ліцензії 1С-Бітрікс (редакція «Бізнес») — вона повністю окупається в перший місяць.

Отримайте консультацію з міграції: заповніть форму на сайті, і ми підготуємо пропозицію за 1 день. Оцінимо ваш проєкт безкоштовно — напишіть нам для розрахунку.