При запуске онлайн-записи в медицинском центре на 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С:Медицина и схемы данных
- Проектирование REST API (HTTP-сервис)
- Разработка и тестирование HTTP-сервиса в 1С
- Создание PHP-клиента и компонентов Битрикс
- Интеграционное тестирование (до 2 недель)
- Запуск и сопровождение (3 месяца гарантии)
Сроки: 6–10 недель при наличии 1С-разработчика в команде. Разработка HTTP-сервиса на стороне 1С — 2–4 недели, PHP-часть — 3–6 недель. Правильно спроектированная интеграция даёт экономию бюджета на поддержке и снижает затраты на администрирование. Получите предварительную оценку вашего проекта — мы проанализируем конфигурацию и предложим решение. Свяжитесь с нами.







