Заказчик - ПрофиТекМед, дистрибьютор профессиональной косметики, инъекционных препаратов и оборудования для косметологов, врачей и клиник. Продаёт в розницу и оптом специалистам через интернет-магазин, учёт ведёт в 1С.
Старый магазин на 1С-Битрикс работал и продавал. Новую версию начали на готовом шаблоне Kosmos из Маркетплейса Битрикса, моя задача - доработать её, запустить и перевести на неё основной домен.
Что нужно было сделать:
- три каталога, как в 1С и на старом сайте, чтобы адреса страниц не поменялись;
- опт для специалистов: оптовые цены по группам покупателей, а препараты для специалистов видят и покупают только врачи, медсёстры и клиники;
- регистрацию с выбором «Кто вы?», заявку специалиста с документами, личный кабинет и вход по коду из SMS;
- оплату картой, счёт для клиник и доставку СДЭК;
- обмен с 1С: из 1С приходят цены и остатки, а описания и фото, которые ведутся на сайте, обмен не должен затирать;
- перенос пользователей, заказов, отзывов и разделов со старого сайта и переезд домена с короткой паузой продаж.
Ограничения: старый сайт всё время продавал, поэтому тяжёлые операции на его сервере - только вне рабочего времени. Шаблон купленный, и правки не должны теряться при его обновлении. Сторону 1С настраивал специалист заказчика. Работа шла четырьмя этапами с фиксированным составом.
Я единственный исполнитель. Магазин работает на штатном каталоге и модуле магазина 1С-Битрикс, свой код - 25 классов-обработчиков событий на PHP и свой компонент формы специалиста. База MySQL, вспомогательные скрипты на Python.
Каталог и цены:
- три каталога, как в 1С: косметика, препараты для специалистов и каталог одного бренда;
- оптовые цены и «Цена по запросу» по группам покупателей. Гость видит цену звёздочками и приглашение войти, покупатель без права - «Цена по запросу» и кнопку заявки, врачи, медсёстры и клиники видят опт и покупают. Запрет проверяется на сервере, при расчёте цены и сохранении корзины, поэтому в обход вёрстки купить нельзя. Те же правила работают в подсказках поиска и в блоках главной;
- отметки «Хит», «Новинка», «Рекомендуем», товары без наличия в конце списка, поиск находит латинские названия;
- 27 брендов со своими страницами, главная по ТЗ с блоками из трёх каталогов, разделы и отзывы перенесены со старого сайта, демо-контент шаблона убран.
Покупатели:
- регистрация с выбором «Кто вы?»: розничный покупатель, врач, медсестра, косметолог-эстетист, клиника;
- форма специалиста с документами: заявка уходит на почту компании, доступ даёт сотрудник, добавив покупателя в группу, и тому сразу приходит письмо;
- вход по почте или по номеру телефона с кодом из SMS, вход через соцсети убран;
- личный кабинет по ТЗ: заказы, личный счёт, данные, реквизиты клиник.
Заказ, оплата и доставка:
- тип покупателя выбирается по группе, у специалистов есть оплата по счёту, галочка согласия стоит у кнопки;
- оплата картой через ЮKassa с онлайн-кассой, заказ сам становится оплаченным; счёт для клиник в PDF с печатью и подписями, чужой счёт открыть нельзя;
- СДЭК, курьер магазина и самовывоз; «Купить в 1 клик» работает и из корзины;
- цена доставки округляется до копеек: из-за двух наценок оплаченный картой заказ оставался «не оплачен».
Обмен с 1С:
- по CommerceML из 1С приходят названия, цены и остатки трёх каталогов, заказы уходят в 1С;
- описания и фото ведутся на сайте: обработчик убирает их из обновления во время обмена и пересобирает поисковый текст, проверено тестом на штатном импортёре;
- обмен не создаёт лишних каталогов и защищён.
Купленный шаблон: копии компонентов лежат отдельно от шаблона, а 129 правок хранятся как данные и накатываются скриптом. Если шаблон обновится и правка не ляжет, скрипт остановится, ничего не записав. Проверка воспроизводимости показывает 0 расхождений.
SEO и переезд:
- старые адреса товаров и разделов сохранены, где адрес поменялся - 301 одним переходом, товар, переехавший в другой раздел, сам ведёт на новый адрес;
- мета-теги и заголовки по таблице SEO-специалиста, карта сайта, robots.txt, canonical, редиректы без «:443»;
- переезд: старый сайт закрыт заглушкой на 48 минут, за это время перенесены новые пользователи и заказы одной транзакцией со сверкой, включены боевые настройки, переключён домен и выпущен сертификат.
Скорость и доступность: фото в WebP, облегчённый шрифт, карта грузится по первому действию, подписи кнопок и контраст по требованиям доступности.
Каждое изменение на сервере - скриптом с проверочным режимом и резервной копией, в журнале изменений есть способ отката. Около 30 тестов, часть можно запускать на работающем магазине.
Магазин работает на основном домене с 14.10.2026: четыре этапа за 3,5 недели, с 22.09 по 14.10. Пауза продаж при переезде - 48 минут.
Что получилось:
- около 600 товаров в трёх каталогах, как в 1С, оптовые цены и покупка по группам специалистов;
- 27 брендов со своими страницами;
- оплата картой и счёт для клиник, доставка СДЭК, вход по SMS;
- обмен с 1С приносит цены и остатки и не затирает описания и фото;
- 717 старых адресов проверены на первом этапе; по таблице SEO-специалиста из 714 адресов 340 открываются, 167 ведут одним 301, 207 отдают 404 по решению SEO-специалиста;
- перед запуском обойдены 797 страниц карты сайта: код ответа, заголовок, описание, один h1.
Скорость (Lighthouse, лабораторный замер по 38 типам страниц, медианы): доступность 100 на телефоне и компьютере, скорость на телефоне 54 => 58,5, на компьютере 93 => 94,5. Фото в WebP: 189,9 => 16,3 МБ, шрифт: 1,16 МБ => 167 КБ.
В коде: 25 своих классов (около 4 100 строк), 98 скриптов миграций с проверочным режимом, около 30 тестов, 150+ коммитов, 196 записей в журнале изменений.
Сейчас идёт приёмка последнего этапа и 30 дней гарантии.