Проблема: данные из 1С не попадают в карточку сделки
Клиент обратился с задачей: в карточке сделки нужно видеть статус отгрузки из 1С и кнопку отправки счёта. Стандартные поля не тянули — их нужно было кастомизировать. Часто менеджеры тратят время на ручной перенос данных, что ведёт к ошибкам и задержкам. Мы разработали Vue.js-приложение, которое встраивается прямо в карточку через механизм placement Битрикс24. Работаем под ключ, оценим проект за 1 день — свяжитесь с нами для обсуждения.
Как интегрировать данные из 1С в карточку?
Placement позволяет встроить приложение в любую CRM-карточку. После инициализации BX24 мы получаем ID сущности и тип (сделка, контакт, лид) и загружаем данные через REST API. Для интеграции с 1С мы создаём прокси-эндпоинт, который авторизуется в 1С, получает данные и возвращает JSON. Vue.js с Pinia даёт выигрыш в скорости разработки примерно в 2–3 раза по сравнению с чистым JavaScript на BX24.
Архитектура и реализация
Инициализация приложения
import { createApp } from 'vue' import App from './App.vue' import { createPinia } from 'pinia' window.BX24.init(async () => { const placement = await getPlacement() const auth = BX24.getAuth() const app = createApp(App) app.use(createPinia()) app.provide('entityId', placement.ID) app.provide('entityType', placement.ENTITY_TYPE_NAME) app.provide('auth', auth) app.mount('#app') }) function getPlacement() { return new Promise(resolve => BX24.placement.getInterface(resolve)) } Загрузка данных сущности
import { defineStore } from 'pinia' import { inject } from 'vue' export const useDealStore = defineStore('deal', { state: () => ({ deal: null, relatedContacts: [], externalData: null, loading: false, }), actions: { async loadDeal(id) { this.loading = true const [deal, contacts] = await Promise.all([ bx24Call('crm.deal.get', { id }), bx24Call('crm.deal.contact.items.get', { id }), ]) this.deal = deal this.relatedContacts = contacts this.loading = false }, async loadExternalData(dealId) { const res = await fetch(`/api/deals/${dealId}/external`) this.externalData = await res.json() } } }) Обновление полей карточки
Для обновления полей сделки используем crm.deal.update. Не обновляйте поля по одному в цикле — это создаёт очередь запросов и замедляет интерфейс. Бач-запросы предпочтительнее.
Отображение данных из внешних систем
Типичный кейс — показать в карточке сделки историю заказов клиента из 1С или ERP:
<template> <div class="external-orders"> <div v-if="store.loading" class="loader">Загрузка...</div> <table v-else> <thead> <tr> <th>Номер заказа</th> <th>Дата</th> <th>Сумма</th> <th>Статус</th> </tr> </thead> <tbody> <tr v-for="order in store.externalData?.orders" :key="order.id"> <td>{{ order.number }}</td> <td>{{ formatDate(order.date) }}</td> <td>{{ formatMoney(order.total) }}</td> <td> <span :class="statusClass(order.status)"> {{ order.statusLabel }} </span> </td> </tr> </tbody> </table> </div> </template> Пользовательские кнопки и действия
Добавление кнопки в тулбар карточки через BX24.placement.bindEvent:
BX24.callMethod('placement.bind', { PLACEMENT: 'CRM_DEAL_DETAIL_TAB', HANDLER: 'https://my-app.example.com/', TITLE: 'Моя вкладка', DESCRIPTION: 'Расширение CRM-карточки', }) Типичная ошибка: не обрабатывать ошибки авторизации
Если пользователь не авторизован или у приложения нет прав, вызовы API вернут ошибку. Всегда проверяйте `result.error()` и показывайте понятное сообщение.Сравнение подходов: Vue.js vs чистый JavaScript
| Критерий | Vue.js + Pinia | Чистый JavaScript (jQuery) |
|---|---|---|
| Реактивность | Автоматическая (шаблоны обновляются при изменении данных) | Ручная (обновление DOM) |
| Модульность | Компонентный подход, store | Сложно поддерживать |
| Время разработки | На 40% быстрее | Дольше |
| Масштабирование | Легко добавлять новые вкладки и интеграции | Требует рефакторинга |
Сравнение placement-типов
| Тип placement | Контекст | Пример использования |
|---|---|---|
| CRM_DEAL_DETAIL_TAB | Карточка сделки | История заказов клиента |
| CRM_CONTACT_DETAIL_TAB | Карточка контакта | Дополнительные каналы связи |
| CRM_LEAD_DETAIL_TAB | Карточка лида | Оценка по источникам |
| CRM_DEAL_DETAIL_ACTIVITY | Блок активностей | Кнопка "Отправить счёт" |
Почему Vue.js эффективнее чистого JavaScript?
Vue.js с Pinia обеспечивает реактивное связывание данных и компонентную архитектуру. Это снижает время разработки на 40% и упрощает поддержку. В отличие от чистого JavaScript, где каждое изменение DOM нужно писать вручную, Vue.js автоматически обновляет интерфейс при изменении данных. При масштабировании — добавлении новых вкладок или интеграций — код остаётся читаемым и модульным.
Что входит в работу по разработке кастомной CRM-карточки?
- Аудит текущих процессов Битрикс24 и внешних систем.
- Проектирование архитектуры приложения и схем данных.
- Разработка Vue.js-приложения с Pinia, включая загрузку и отображение внешних данных.
- Настройка методов actions и интеграция с 1С через REST API.
- Тестирование во всех браузерах и режимах Битрикс24.
- Деплой, настройка placement и прав доступа.
- Документация и обучение менеджеров.
- Поддержка в течение месяца после запуска.
Пошаговая инструкция по внедрению
- Аудит текущих процессов и API вашего Битрикс24.
- Проектирование архитектуры приложения и схем данных.
- Разработка Vue.js-карточки с Pinia, включая загрузку и отображение внешних данных.
- Настройка методов actions и интеграция с внешними системами через REST API.
- Тестирование во всех браузерах и режимах Битрикс24.
- Деплой, настройка placement и прав доступа.
- Документация и обучение менеджеров.
Сроки ориентировочно
Простая вкладка — от 2 до 4 дней. Полноценная с интеграцией — от 1 до 3 недель. Стоимость рассчитывается индивидуально после оценки объёма работ.
Экономия времени и бюджета: используя готовые шаблоны и Pinia, мы сокращаем время разработки на 40% по сравнению с чистым JavaScript. Получите консультацию специалиста по вашему проекту — оценка за 1 день. Закажите консультацию прямо сейчас.
Сертифицированные специалисты с 10+ годами опыта и 50+ реализованными проектами на Битрикс24 гарантируют совместимость с последними версиями платформы.
Подробнее о placement в официальной документации: Битрикс24 REST API и Vue.js







