Інтеграція 1С-Бітрікс із сервісами перевірки контрагентів
Уявіть: B2B-магазин на Бітрікс отримує заявку від компанії. Менеджер вручну перевіряє ІПН через сторонні сайти, витрачаючи 15 хвилин на кожну заявку. Ми впроваджуємо автоматичну перевірку контрагента прямо в момент реєстрації організації, оформлення замовлення або створення угоди в CRM. Дані з ЄДРПОУ, реєстру дискваліфікованих осіб та фінансові звіти підтягуються в картку за секунди. Ручна перевірка — 15 хвилин, автоматична — 2 секунди, в 450 разів швидше. Економія на кожній заявці: якщо у вас 500 заявок на місяць, вивільняється 125 годин менеджерського часу.
Чому важлива автоматична перевірка контрагентів?
При ручній перевірці людський фактор неминучий: менеджер може пропустити ліквідовану компанію або помилитися в ІПН. Інтеграція з надійними джерелами (ФНС, Dadata, Контур.Фокус) виключає ці ризики. Ми гарантуємо, що кожна заявка проходить перевірку за єдиним алгоритмом, а дані завжди актуальні завдяки періодичній перевірці. Наш досвід — 10+ років у Бітрікс-розробці, сертифіковані спеціалісти.
Джерела даних та API
Основні сервіси, з якими інтегрується Бітрікс:
| Сервіс | Що дає | Тип запиту |
|---|---|---|
| ФНС ЄДРПОУ (API) | Статус компанії, адреса, керівник | REST за ІПН/ЄДРПОУ |
| Контур.Фокус | Реєстри банкрутств, арбітраж, фінансова звітність | REST + OAuth |
| СПАРК | Скоринг надійності, афілійованість | REST + ключ API |
| Dadata.ru | Збагачення реквізитів за ІПН, автодоповнення | REST, простий ключ |
| Прозорий бізнес (ФНС) | Дискваліфіковані особи, податкові борги | Публічний API |
Dadata — найпоширеніший вибір для автодоповнення реквізитів при введенні: за ІПН повертає повне найменування, КПП, ЄДРПОУ, юридичну адресу, статус. Контур.Фокус або СПАРК підключають при необхідності глибокого фінансового аналізу.
Як зберігати дані контрагентів?
Для зберігання реквізитів організацій використовуємо HL-блок CompanyRequisites. Поля:
-
UF_INN— ІПН (рядок, унікальний індекс) -
UF_OGRN— ЄДРПОУ -
UF_KPP— КПП -
UF_FULL_NAME— повне найменування -
UF_ADDRESS_LEGAL— юридична адреса -
UF_DIRECTOR— керівник -
UF_STATUS— статус (active,liquidated,reorganizing) -
UF_RISK_SCORE— скоринговий бал (якщо використовується СПАРК/Фокус) -
UF_LAST_CHECK— дата останньої перевірки -
UF_RAW_DATA— сирий JSON-відповідь API
Прив'язка до користувача Бітрікс — поле UF_USER_ID на користувачі або зв'язок через властивість COMPANY_ID в профілі.
Архітектура інтеграції
Інтеграція працює в двох режимах:
Режим 1 — онлайн-перевірка при введенні ІПН. Клієнт вводить ІПН у форму реєстрації або профілю організації. AJAX-запит іде на проміжний PHP-контролер, той запитує API Dadata, повертає реквізити на фронт. Користувач бачить заповнену форму автоматично.
Режим 2 — фонова перевірка існуючих контрагентів. Агент Бітрікс (CAgent) запускається вночі, перебирає компанії з HL-блоку «Організації» або з таблиці користувачів, відправляє ІПН в API, зберігає результат.
Запит до Dadata: реалізація
class DadataContragentChecker { private string $apiKey; private string $secretKey; public function __construct(string $apiKey, string $secretKey) { $this->apiKey = $apiKey; $this->secretKey = $secretKey; } public function getByInn(string $inn): ?array { $cacheKey = 'dadata_inn_' . md5($inn); $cache = \Bitrix\Main\Data\Cache::createInstance(); if ($cache->initCache(86400, $cacheKey, '/dadata/inn/')) { return $cache->getVars(); } $response = (new \Bitrix\Main\Web\HttpClient())->post( 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party', json_encode(['query' => $inn, 'count' => 1]), [ 'Content-Type' => 'application/json', 'Authorization' => 'Token ' . $this->apiKey, 'X-Secret' => $this->secretKey, ] ); $data = json_decode($response, true); if (empty($data['suggestions'][0])) { return null; } $result = $this->normalizeResponse($data['suggestions'][0]); $cache->startDataCache(86400, $cacheKey, '/dadata/inn/'); $cache->endDataCache($result); return $result; } private function normalizeResponse(array $suggestion): array { $data = $suggestion['data']; return [ 'full_name' => $data['name']['full_with_opf'] ?? '', 'inn' => $data['inn'] ?? '', 'kpp' => $data['kpp'] ?? '', 'ogrn' => $data['ogrn'] ?? '', 'address' => $suggestion['unrestricted_value'] ?? '', 'director' => $data['management']['name'] ?? '', 'status' => strtolower($data['state']['status'] ?? 'unknown'), ]; } } Кешування на 24 години — обов'язково. Без нього при масовій перевірці швидко впираємось у ліміти API (Dadata: 10 000 запитів/добу на безкоштовному тарифі).
Вбудовування у форму реєстрації
Компонент bitrix:system.auth.registration перевизначається в шаблоні. У форму додається поле ІПН з JavaScript-автодоповненням:
document.getElementById('inn-field').addEventListener('blur', async function() { const inn = this.value.replace(/\D/g, ''); if (inn.length !== 10 && inn.length !== 12) return; const resp = await fetch('/local/ajax/check-inn.php?inn=' + inn); const data = await resp.json(); if (data.success) { document.getElementById('company-name').value = data.full_name; document.getElementById('kpp-field').value = data.kpp; document.getElementById('ogrn-field').value = data.ogrn; document.getElementById('address-field').value = data.address; if (data.status !== 'active') { showWarning('Компанія не є діючою'); } } }); Поле /local/ajax/check-inn.php — тонкий контролер, який викликає DadataContragentChecker і повертає JSON.
Як інтегрувати з CRM Бітрікс24?
Якщо використовується CRM, перевірка вбудовується в момент створення контакту або компанії через події:
-
OnAfterCrmContactAdd/OnAfterCrmCompanyAdd— запускає фонову перевірку через обробник - Результат записується в поле користувача UF компанії CRM
- При низькому скорингу або статусі «ліквідовано» — автоматично створюється задача менеджеру на ручну перевірку
AddEventHandler('crm', 'OnAfterCrmCompanyAdd', function(&$fields) { $inn = $fields['fields']['UF_INN'] ?? ''; if (!$inn) return; // Запускаємо асинхронно через агент \CAgent::AddAgent( "checkContragentAgent({$fields['id']}, '{$inn}');", 'my_module', 'N', 60 ); }); Періодична перевірка
Компанії змінюють статус — ліквідуються, реорганізуються. Агент перевіряє записи старші 30 днів:
function reCheckContragentsAgent(): string { $connection = \Bitrix\Main\Application::getConnection(); $rows = $connection->query( "SELECT ID, UF_INN FROM b_hl17_company_requisites WHERE UF_LAST_CHECK < DATE_SUB(NOW(), INTERVAL 30 DAY) LIMIT 50" ); $checker = new DadataContragentChecker(DADATA_API_KEY, DADATA_SECRET); while ($row = $rows->fetch()) { $data = $checker->getByInn($row['UF_INN']); if ($data) { updateHlBlockRecord($row['ID'], $data); } } return __FUNCTION__ . '();'; } Ліміт 50 записів за запуск — щоб агент не перевищував час виконання PHP.
Що входить у роботу (deliverables)
- Аудит поточної архітектури Бітрікс (інфоблоки, HL-блоки, CRM)
- Вибір оптимального API під ваші завдання (Dadata vs Контур.Фокус vs ФНС)
- Розробка PHP-контролера перевірки за ІПН з кешуванням
- Створення HL-блоку для зберігання реквізитів та скорингу
- Вбудовування автодоповнення у форму реєстрації (кастомізація шаблону)
- Налаштування фонових агентів для перевірки
- Інтеграція з CRM Бітрікс24 (події + сповіщення)
- Тестування на стенді та розгортання в production
- Документація з експлуатації та навчання менеджерів
- Підтримка протягом 1 місяця після запуску
Строки реалізації
| Об'єм задачі | Склад | Строк |
|---|---|---|
| Автодоповнення реквізитів за ІПН (Dadata) | AJAX + кеш + форма реєстрації | 2–4 дні |
| HL-блок контрагентів + фоновий агент | Зберігання + періодична перевірка | 1 тиждень |
| Повна інтеграція (CRM + скоринг + сповіщення) | Контур.Фокус або СПАРК + інтеграція з CRM | 2–3 тижні |
Оцінимо ваш проект
Зв'яжіться з нами, щоб отримати попередню оцінку складності та строків. Ми проаналізуємо вашу поточну конфігурацію Бітрікс, підберемо оптимальні API та запропонуємо рішення під ключ з гарантією стабільної роботи. Пишіть — оцінимо проект безкоштовно.







