Интеграция 1С-Битрикс с 1С:Медицина: HTTP-сервисы и онлайн-запись

Когда расписание врачей в 1С:Медицина не попадает на сайт вовремя, клиника теряет пациентов, а администраторы тратят время на ручную запись. Мы разрабатываем интеграцию на основе HTTP-сервисов, которая синхронизирует данные в реальном времени и запускает онлайн-запись без задержек. Наша команда реализует проект под ключ — от аудита до поддержки, обеспечивая стабильную работу и масштабирование вместе с вашим бизнесом.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Интеграция 1С-Битрикс с 1С:Медицина: HTTP-сервисы и онлайн-запись
Средний
~1-2 недели

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

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1530
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1044
  • Разработка виджета онлайн-записи на прием для медицинского центра
    Разработка виджета онлайн-записи на прием для медицинского центра
    819
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    908
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    852
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1206

При запуске онлайн-записи в медицинском центре на 1С-Битрикс часто сталкиваются с одной проблемой: 1С:Медицина не отдаёт данные в реальном времени. Врачи ведут расписание в 1С, а на сайте оно не обновляется часами. Синхронизация через файловый обмен или прямые запросы к базе 1С приводит к ошибкам и задержкам. Мы решаем это через HTTP-сервисы — современный протокол, который обеспечивает бесшовное взаимодействие систем.

1С:Медицина — семейство конфигураций для медицинских организаций: «Больница», «Поликлиника», «Медицинская лаборатория». Конфигурации работают на платформе 1С:Предприятие 8 и, в отличие от большинства других МИС, хорошо знакомы разработчикам, работающим с экосистемой 1С. Наш опыт — более 10 лет интеграций 1С-Битрикс с МИС, реализовано свыше 50 проектов в медицинских учреждениях. Стоимость разработки зависит от сложности конфигурации и количества синхронизируемых справочников, но правильно спроектированная интеграция позволяет сократить операционные затраты клиники за счёт автоматизации записи.

Почему HTTP-сервисы лучше COM-объекта?

COM-объект — прямой вызов 1С из PHP через new COM(...). Работает только на Windows-сервере, плохо масштабируется. При параллельных запросах (5+ пациентов одновременно) возникают блокировки, падение производительности в 3–5 раз по сравнению с HTTP-сервисами. HTTP-сервисы не привязаны к ОС, поддерживают асинхронную обработку и кеширование на стороне Битрикс. Промежуточная база данных — альтернатива, если 1С уже умеет выгружать данные в PostgreSQL/MySQL, но она не даёт двустороннего онлайн-обмена. HTTP-сервисы — предпочтительный вариант.

Метод Скорость Надёжность Сложность
HTTP-сервисы 1С Высокая Высокая Средняя
COM-объект Средняя (падает при нагрузке) Низкая (блокировки) Низкая
Промежуточная БД Низкая (асинхронно) Высокая Высокая

HTTP-сервис в 1С:Медицина

В конфигураторе 1С создаётся HTTP-сервис (Общие → HTTP-сервисы):

Имя: МедицинскийAPI КорневойURL: /medapi Версия: 1.0.0 

Методы (шаблоны URL):

  • GET /medapi/doctors — список врачей
  • GET /medapi/schedule/{doctorId}/{date} — расписание врача
  • POST /medapi/appointments — создание записи
  • DELETE /medapi/appointments/{id} — отмена записи

Обработчик метода в 1С (встроенный язык):

Функция ПолучитьРасписание(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки["Content-Type"] = "application/json; charset=utf-8";
    ИдВрача = Запрос.ПараметрыURL["doctorId"];
    ДатаСеанса = Дата(Запрос.ПараметрыURL["date"]);
    // Запрос к регистру расписания
    Запрос1С = Новый Запрос();
    Запрос1С.Текст = "
    |ВЫБРАТЬ
    | РасписаниеВрачей.ВремяНачала,
    | РасписаниеВрачей.ВремяОкончания,
    | РасписаниеВрачей.СтатусЯчейки,
    | РасписаниеВрачей.КабинетПоликлиники
    |ИЗ
    | РегистрСведений.РасписаниеВрачей КАК РасписаниеВрачей
    |ГДЕ
    | РасписаниеВрачей.Врач.УникальныйИдентификатор = &ИдВрача
    | И РасписаниеВрачей.Дата = &Дата
    | И РасписаниеВрачей.СтатусЯчейки = Перечисления.СтатусыЯчеекРасписания.Свободна";
    Запрос1С.УстановитьПараметр("ИдВрача", ИдВрача);
    Запрос1С.УстановитьПараметр("Дата", ДатаСеанса);
    Результат = Запрос1С.Выполнить().Выбрать();
    Слоты = Новый Массив();
    Пока Результат.Следующий() Цикл
        СлотДанные = Новый Структура("start,end,cabinet");
        СлотДанные.start = Формат(Результат.ВремяНачала, "ДФ=HH:mm");
        СлотДанные.end = Формат(Результат.ВремяОкончания, "ДФ=HH:mm");
        СлотДанные.cabinet = Результат.КабинетПоликлиники.Номер;
        Слоты.Добавить(СлотДанные);
    КонецЦикла;
    Ответ.УстановитьТелоИзСтроки(ЗаписатьJSON(Слоты));
    Возврат Ответ;
КонецФункции

PHP-клиент для HTTP-сервиса 1С:Медицина

class OneCMedicinaClient {
    private string $baseUrl; // http://1c-server:8080/медицина/hs/medapi
    private string $username;
    private string $password;

    public function getSchedule(string $doctorGuid, string $date): array {
        return $this->request('GET', "/schedule/{$doctorGuid}/{$date}");
    }

    public function createAppointment(array $data): array {
        return $this->request('POST', '/appointments', [
            'slotDate' => $data['date'],
            'slotTime' => $data['time'],
            'doctorGuid' => $data['doctor_guid'],
            'patient' => [
                'lastName' => $data['last_name'],
                'firstName' => $data['first_name'],
                'middleName' => $data['middle_name'] ?? '',
                'birthDate' => $data['birth_date'],
                'phone' => $data['phone'],
                'email' => $data['email'],
                'snils' => $data['snils'] ?? '',
            ],
            'serviceCode' => $data['service_code'] ?? '',
        ]);
    }

    private function request(string $method, string $path, array $body = []): array {
        $ch = curl_init($this->baseUrl . $path);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST => $method,
            CURLOPT_USERPWD => "{$this->username}:{$this->password}", // Basic Auth в 1С
            CURLOPT_HTTPHEADER => ['Content-Type: application/json; charset=utf-8'],
            CURLOPT_POSTFIELDS => $body ? json_encode($body, JSON_UNESCAPED_UNICODE) : null,
            CURLOPT_TIMEOUT => 10,
        ]);
        $json = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        if ($httpCode !== 200) {
            throw new \RuntimeException("1C:Медицина API error {$httpCode}");
        }
        return json_decode($json, true) ?? [];
    }
}

Важно: 1С:Предприятие по умолчанию не поддерживает параллельные запросы в одну информационную базу без лицензий клиентских подключений. При высокой нагрузке нужен пул соединений или кеширование на стороне Битрикс.

Как синхронизировать справочники без дублей?

Список врачей, их специализации, кабинеты — синхронизируем из 1С в инфоблок Битрикс. Ключевой параметр — уникальный идентификатор врача (GUID) из 1С. Он сохраняется в свойстве инфоблока, и при повторной синхронизации мы не создаём дубли, а обновляем существующие элементы. Типичная ошибка — потеря связи между записями, когда в 1С меняется идентификатор. Мы используем служебное свойство DOCTYPE_GUID и логику поиска по нему.

class OneCMedicDoctorSync
{
    public function syncDoctors(): void
    {
        $doctors = $this->onecClient->request('GET', '/doctors');
        foreach ($doctors as $doctor) {
            $existingId = $this->findDoctorByGuid($doctor['guid']);
            $fields = [
                'NAME' => $doctor['fullName'],
                'ACTIVE' => $doctor['active'] ? 'Y' : 'N',
                'IBLOCK_ID' => DOCTORS_IBLOCK_ID,
                'IBLOCK_SECTION_ID' => $this->getSpecializationSectionId($doctor['specialization']),
            ];
            $props = [
                'DOCTOR_GUID' => $doctor['guid'],
                'SPECIALIZATION' => $doctor['specialization'],
                'CABINET_NUMBER' => $doctor['cabinet'],
                'EXPERIENCE_YEARS' => $doctor['experienceYears'],
                'ACADEMIC_DEGREE' => $doctor['academicDegree'],
            ];
            if ($existingId) {
                $el = new \CIBlockElement();
                $el->Update($existingId, $fields);
                \CIBlockElement::SetPropertyValuesEx($existingId, DOCTORS_IBLOCK_ID, $props);
            } else {
                $el = new \CIBlockElement();
                $newId = $el->Add(array_merge($fields, ['PROPERTY_VALUES' => $props]));
            }
        }
    }
}

Какие данные синхронизируются между 1С:Медицина и Битрикс?

Данные Направление Периодичность
Врачи (ФИО, спец., кабинет) 1С → Битрикс По событию (изменение в 1С)
Расписание (слоты времени) 1С → Битрикс Реже: каждые 5-15 минут
Новая запись пациента Битрикс → 1С Мгновенно (онлайн)
Отмена записи Битрикс → 1С Мгновенно
Услуги и цены 1С → Битрикс По расписанию (раз в сутки)

Что входит в работу

  • Анализ конкретной конфигурации 1С:Медицина и доступных регистров
  • Разработка HTTP-сервиса на стороне 1С (совместно с 1С-разработчиком)
  • PHP-клиент для HTTP-сервиса с кешированием (тегированное кэширование)
  • Синхронизация справочника врачей в инфоблок Битрикс
  • Компонент онлайн-записи с формой (валидация, выбор слота)
  • Уведомления пациенту по SMS/email после записи
  • Документация по интеграции и обучение
  • Гарантийная поддержка 3 месяца
Чек-лист типичных этапов проекта
  1. Аудит конфигурации 1С:Медицина и схемы данных
  2. Проектирование REST API (HTTP-сервис)
  3. Разработка и тестирование HTTP-сервиса в 1С
  4. Создание PHP-клиента и компонентов Битрикс
  5. Интеграционное тестирование (до 2 недель)
  6. Запуск и сопровождение (3 месяца гарантии)

Сроки: 6–10 недель при наличии 1С-разработчика в команде. Разработка HTTP-сервиса на стороне 1С — 2–4 недели, PHP-часть — 3–6 недель. Правильно спроектированная интеграция даёт экономию бюджета на поддержке и снижает затраты на администрирование. Получите предварительную оценку вашего проекта — мы проанализируем конфигурацию и предложим решение. Свяжитесь с нами.