Об'єднання 1С-Бітрікс та 1С:Медицина: HTTP-сервіси для онлайн-запису

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

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

Часті запитання

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1534
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1049
  • Розробка віджета онлайн-запису для медичного центру
    Розробка віджета онлайн-запису для медичного центру
    820
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    920
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    858
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1209

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

1С:Медицина — сімейство конфігурацій для медичних організацій: «Лікарня», «Поліклініка», «Медична лабораторія». Конфігурації працюють на платформі 1С:Підприємство 8 і, на відміну від більшості інших МІС, добре знайомі розробникам, що працюють з екосистемою 1С. Наш досвід — понад 10 років на ринку інтеграцій, реалізовано понад 50 проєктів у медичних закладах. Вартість розробки залежить від складності конфігурації та кількості синхронізованих довідників, але правильно спроєктована інтеграція дозволяє скоротити операційні витрати клініки на 20–30% за рахунок автоматизації запису. Пропонуємо рішення під ключ — оцінимо ваш проєкт.

Чому 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С (вбудована мова):

Функція ОтриматиРозклад(Запит)
    Відповідь = Новий HTTPServisВідповідь(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 тижнів. Правильно спроєктована інтеграція дає економію бюджету на підтримці та знижує витрати на адміністрування. Пишіть нам для консультації — ми проаналізуємо конфігурацію та запропонуємо рішення. Зв'яжіться з нами.