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

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

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

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

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1017
  • 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
    759
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    802
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1161

При запуске онлайн-записи в медицинском центре на 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 недель. Правильно спроектированная интеграция даёт экономию бюджета на поддержке и снижает затраты на администрирование. Получите предварительную оценку вашего проекта — мы проанализируем конфигурацию и предложим решение. Свяжитесь с нами.