Дмитрий Ермаков — Bitrix-разработчик, Full-Stack Developer

Bitrix‑разработчик.
10 лет с одной платформой.

Каталоги на D7, интеграции с 1С, CRM-доработки. Большинство проектов до сих пор в проде.

10+ Лет коммерческого опыта
40+ Успешных проектов
Дмитрий Ермаков — 10 лет опыта в разработке на 1С-Битрикс

Специализируюсь на платформе 1С-Битрикс и Bitrix24

Начинал в 2014-м с вёрстки шаблонов под Битрикс. Сейчас проектирую архитектуру компонентов на D7 для каталогов с десятками тысяч товаров — и до сих пор нахожу способы сделать то же самое чище, чем в прошлом году.

Люблю возиться с интеграциями: 1С, CRM, платёжки, доставки. Главный критерий — чтобы синхронизация работала ночью, в выходные и когда меня нет на связи.

Когда страница тормозит, лезу в запросы БД, кэш и Nginx. Оттуда обычно и достаю те самые «лишние» пару секунд.

Что делаю

Задачи, которые чаще всего забираю на себя

Магазин на 1С-Битрикс под ключ

От макета до передачи на поддержку: каталог, корзина, оформление заказа, личный кабинет, оплата, доставка. Интеграции с 1С и CRM закладываю на старте — чтобы не переделывать потом.

Доработка существующего сайта

Новый функционал, рефакторинг legacy-кода, миграция с устаревших компонентов на D7. Аккуратно, без простоев и без «сломали полсайта, пока чинили кнопку».

Интеграции: 1С, CRM, платёжки

Обмен с 1С (товары, цены, остатки, заказы), Bitrix24 и amoCRM, ЮKassa / Сбер / Тинькофф, СДЭК / Boxberry / Почта России. Работает не «по пятницам», а стабильно.

Аудит и ускорение

Разбор медленного сайта: запросы БД, кэш, сервер, Core Web Vitals. На выходе — отчёт с приоритетами и цифрами. Если договоримся — внедрение.

Технологический Стек

Чем работаю каждый день — и чем изредка, когда проект требует.

PHP JavaScript 1C-Bitrix D7 API Bitrix24 CRM MySQL REST API HTML5 CSS3 Tailwind
Linux Nginx Docker Git Ajax SEO Schema.org Highload SSH Bash

Опыт Работы

Где работал и чем занимался

Антарес, ООО

Bitrix24: бизнес-процессы, CRM, интеграция сайта и телефонии. Linux-серверы.

DoWeb

Интернет-магазины на D7 под ключ. LCP 4,5 → 1,9 сек.

CyberNevod

E-commerce 50 000+ SKU. Синхронизация с 1С, платёжки, доставки. Каталог ускорил вдвое.

IQ MAXIMA

8 интернет-магазинов под ключ. 1С, Яндекс.Касса, Bitrix24. Отклик страниц −35%.

HotHeads

10–12 проектов параллельно. Миграция legacy на D7 без простоя.

Demis Group

Техподдержка 30+ проектов. Инциденты, nginx, SSL, бэкапы.

Клик

Первое место работы. Сайты на 1С-Битрикс и WordPress, адаптив, WebP. PageSpeed 52 → 79.

ТГТУ (Высшее образование)

Тамбовский ГТУ. Информационные системы и технологии.

Реализованные Проекты

Часть того, что делал. Ссылки рабочие — можно потыкать.

ГК ТРИММ
ГК ТРИММ

Каталог медицинского оборудования. Сложная структура с фильтрами, интеграция с CRM.

1C-Bitrix / D7 API / Каталог
МДЦ Мебель
МДЦ Мебель

Интернет-магазин мебели с оптовым разделом. Умные фильтры, корзина, онлайн-оплата.

1C-Bitrix / E-commerce / Фильтры
100 Друзей
100 Друзей

Сеть магазинов мобильных аксессуаров. Каталог, акции, интеграция с 27 точками.

1C-Bitrix / Розница / SEO
АвтоГАЗ
АвтоГАЗ

Официальный дилер ГАЗ. Конфигуратор авто, калькулятор лизинга и кредита.

1C-Bitrix / Конфигуратор / Ajax
ТрансКлассСервис
ТрансКлассСервис

Премиальные ж/д путешествия. Имиджевый сайт с VIP-вагонами и бронированием.

1C-Bitrix / Дизайн / Schema.org
ЭкоПоддон
ЭкоПоддон

Оптовые поставки поддонов. Личный кабинет для оптовиков, калькулятор доставки.

1C-Bitrix / B2B / Личный кабинет
Elfa
Elfa Russia

Дистрибьютор систем хранения Elfa. Каталог с 3D-проектированием, дилерская сеть.

1C-Bitrix / Каталог / Партнёры
МЦ Надежда
МЦ «Надежда»

Клиника в Красноярске. Запись к врачам, прайс-лист, версия для слабовидящих.

1C-Bitrix / Медицина / Доступность
МосТрансАренда
МосТрансАренда

Аренда спецтехники. Каталог с фильтрами, калькулятор перевозок.

1C-Bitrix / Каталог / Калькулятор
RANCHO
RANCHO

Магазин грилей и уличной мебели мировых брендов. Акции, подарки, блог.

1C-Bitrix / E-commerce / Бренды
Drive Service
Drive Service

Ремонт АКПП в СПб. Прайс, онлайн-запись, интеграция Яндекс.Сплит.

1C-Bitrix / Услуги / SEO
Двери СК
Двери СК

Магазин дверей в Казани. Фильтры по материалу и цене, доставка и гарантия.

1C-Bitrix / E-commerce / Фильтры
ТоргМаш
ТоргМаш

Автосалон — дилер УАЗ, LADA, CHERY. Конфигуратор, кредит, trade-in.

1C-Bitrix / Авто / Конфигуратор
Великан Авто
Великан Авто

Авто с пробегом. Фильтр по маркам, кредитование, онлайн-оценка.

1C-Bitrix / Авто / Кредит
EVO Кухни
EVO Кухни

Кухни на заказ. 800+ фасадов, онлайн-расчёт, вызов дизайнера на дом.

1C-Bitrix / Мебель / Расчёт
MODLR
MODLR

3D-панели и дизайнерский декор. Стильный каталог, избранное, быстрый заказ.

1C-Bitrix / E-commerce / Дизайн
Роев Ручей
Роев Ручей

Зоопарк Красноярска. Афиша, онлайн-билеты, карта парка.

1C-Bitrix / Билеты / Доступность
UNIKA Møblar
UNIKA Møblar

Дизайнерская мебель собственного производства. B2B, шоурумы, HoReCa.

1C-Bitrix / B2B / HoReCa
IQ MAXIMA
IQ MAXIMA

Агентство по разработке и продвижению сайтов. Кейсы и блог.

1C-Bitrix / Корпоративный / SEO
Русский Дом
Русский Дом

Премиальная мебель на заказ. Коллекции, раздел для дизайнеров.

1C-Bitrix / Премиум / Дизайнерам
1 / 20

Под Капотом

Немного кода, который сейчас работает в проде

EventHandlers.php
08  public static function onPageStart(): void
09  {
10      // Don't run in CLI or admin panel
11      if (php_sapi_name() === 'cli') return;
15
16      $request = Application::getInstance()->getContext()->getRequest();
17      $uri = $request->getRequestUri();
18
33      // 1. Check real URL → redirect 301 to custom SEO URL
34      $redirectRule = RuleTable::getList([
35          'filter' => ['=ACTIVE' => 'Y',
36              ['LOGIC' => 'OR',
37               ['=REAL_URL' => $uri],
38               ['=REAL_URL' => $decodedPath]]
39          ], 'limit' => 1
40      ])->fetch();
41
42      if ($redirectRule) {
43          header('Location: ' . $customUrl, true, 301);
44          exit;
45      }
20  class FormulaParser
21  {
22      /** @var array Whitelisted safe functions */
23      protected static array $allowedFunctions = [
24          'ceil', 'floor', 'round', 'min', 'max',
25          'sqrt', 'pow', 'abs', 'log', 'exp',
26      ];
27
48      public function evaluate(string $expression, array $variables)
49      {
50          $this->variables = $variables;
51          $expr = $this->substituteVariables($expression);
52          $this->tokens = $this->tokenize($expr);
53          $result = $this->parseTernary();
54
55          if ($this->pos < count($this->tokens)) {
56              throw new \InvalidArgumentException(
57                  "Unexpected token: '".$this->tokens[$this->pos]['value']."'"
58              );
59          }
60          return $result;
61      }
09  class RuleTable extends Entity\DataManager
10  {
11      public static function getTableName(): string
12      {
13          return 'lamass_seofilter_rule';
14      }
15
16      public static function getMap(): array
17      {
18          return [
19              new Entity\IntegerField('ID', [
20                  'primary' => true,
21                  'autocomplete' => true,
22              ]),
23              new Entity\BooleanField('ACTIVE', [
24                  'values' => ['N', 'Y'],
25                  'default_value' => 'Y',
26              ]),
27              new Entity\StringField('CUSTOM_URL', [
28                  'required' => true,
29              ]),
30              new Entity\StringField('REAL_URL', [
31                  'required' => true,
32              ]),
33              new Entity\TextField('SEO_TEXT'),
34          ];
35      }
36  }
140 public static function onEndBufferContent(string&$content): void
141 {
147     $rules = RuleTable::getList([
148         'filter' => ['=ACTIVE' => 'Y']
149     ])->fetchAll();
150
158     foreach ($rules as $rule) {
159         // Direct, HTML-escaped, JSON-escaped URL variants
168         $search[] = '"' . $realUrl . '"';
169         $replace[] = '"' . $customUrl . '"';
175         $search[] = '"' . htmlspecialcharsbx($realUrl) . '"';
182         $search[] = '"' . str_replace('/', '\\/', $realUrl) . '"';
183     }
186     $content = str_replace($search, $replace, $content);
191
192     // Inject SEO text before </body>
193     $bodyPos = strripos($content, '</body>');
194     $content = substr_replace($content, $seoHtml, $bodyPos, 0);
195 }
SEO Engine

URL Rewriting без потерь SEO

Перехват запроса на уровне Bitrix Context. Человекочитаемые SEO-URL с автоматическим 301 редиректом, сохранением query-параметров и инъекцией мета-тегов.

301Redirect без дублей
0msОверхед на запрос
Algorithm

Recursive Descent Parser

Безопасный парсер математических формул для конструктора калькуляторов. Лексер, токенизатор, рекурсивный спуск. Whitelist функций, защита от инъекций.

10Встроенных функций
0eval() вызовов
D7 API

Type-Safe ORM DataManager

Чистая реализация D7 ORM с декларативным маппингом полей. Типизация, валидация, автоинкремент — всё через Entity API без raw SQL.

0Raw SQL запросов
D7Modern API
Performance

Output Buffer Interceptor

Массовая замена URL во всём HTML-буфере страницы. Обрабатывает 3 контекста: прямые URL, HTML-escaped и JSON-escaped. Инъекция SEO-текста перед </body>.

3Контекста URL
1 passОдин проход буфера

Лицензии и Сертификаты

То, что подтверждено бумагой с печатью

Сертификат Разработчик Bitrix Framework — 1С-Битрикс

Разработчик Bitrix Framework

Сертификат 1С-Битрикс — Контент-менеджер

Контент-менеджер

Сертификат 1С-Битрикс — Администратор. Базовый

Администратор. Базовый

Сертификат 1С-Битрикс — Администратор. Модули

Администратор. Модули

Сертификат 1С-Битрикс — Администратор. Бизнес

Администратор. Бизнес

Сертификат 1С-Битрикс — интеграция и настройка

Интеграция и настройка

Сертификат 1С-Битрикс — технологии разработки

Технологии разработки

Частые вопросы

Коротко о том, как строится работа

Как оформляем работу?

Самозанятость и договор подряда, поэтапная оплата по контрольным точкам. Детали объёма и сроков фиксируем перед стартом.

Сколько занимает разработка?

Магазин под ключ — обычно 4–10 недель, зависит от объёма каталога и списка интеграций. Точечная доработка или интеграция — от недели до месяца.

Что после сдачи проекта?

30 дней гарантии на мои работы — баги правлю бесплатно. Дальше — поддержка по отдельному соглашению, либо передаю документацию и вы работаете своими силами.

Берёте сайт от другого подрядчика?

Да, регулярно подхватываю чужие проекты. Умею разбираться в legacy-коде и аккуратно мигрировать старые компоненты на D7 без простоя и без потери данных.

Работаете только с Битриксом?

Основной стек — 1С-Битрикс и Bitrix24, здесь я сильнее всего. С WordPress и ModX работал несколько лет, могу сопровождать существующие проекты, но с нуля на них уже не беру.