Интеграция 1С-Битрикс с 1С:Медицина

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с 1С:Медицина
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1165
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    563
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    743
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция 1С-Битрикс с 1С:Медицина

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

Способы интеграции

HTTP-сервисы 1С (предпочтительно). В конфигурации 1С:Медицина создаётся HTTP-сервис, который принимает REST-запросы от Битрикс. Это самый современный и управляемый подход.

COM-объект (только Windows-сервер). Прямой вызов 1С из PHP через COM — быстро при малых объёмах, но привязывает к Windows и создаёт проблемы с параллелизмом.

Промежуточная база данных. 1С:Медицина пишет данные (расписание, результаты анализов) в общую PostgreSQL/MySQL, Битрикс читает оттуда. Асинхронный подход, не требует доработки 1С если она уже умеет в выгрузку.

Рассматриваем HTTP-сервисы как основной вариант.

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С в инфоблок Битрикс:

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С:Медицина и доступных регистров
  • Разработка HTTP-сервиса на стороне 1С (совместно с 1С-разработчиком)
  • PHP-клиент для HTTP-сервиса с кешированием
  • Синхронизация справочника врачей в инфоблок Битрикс
  • Компонент онлайн-записи с формой
  • Уведомления пациенту после записи

Сроки: 6–10 недель при наличии 1С-разработчика в команде. Разработка HTTP-сервиса на стороне 1С — 2–4 недели, PHP-часть — 3–6 недель.