Інтеграція 1С-Бітрікс з Контур.Бухгалтерія

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс з Контур.Бухгалтерія
Середня
~1-2 тижні
Часті питання

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

Етапи розробки

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

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Інтеграція 1С-Бітрікс з Контур.Бухгалтерія

Невеликий інтернет-магазин працює без 1С: продажі йдуть через Бітрікс, а бухгалтер веде облік у Контур.Бухгалтерії. Щомісяця бухгалтер вручну переносить дані про продажі, накладні та оплати з Бітрікс у Бухгалтерію. Це 2–4 години монотонної роботи з помилками. Контур.Бухгалтерія надає REST API — інтеграцію можна автоматизувати.

Що надає API Контур.Бухгалтерії

API документація: https://api.kontur.ru/budget/v1/. Авторизація через OAuth 2.0 або API-ключ (залежить від тарифу). Доступні сутності: контрагенти, договори, документи (накладні, акти, рахунки), банківські операції, статті витрат.

Для інтеграції з інтернет-магазином використовуємо: створення/пошук контрагентів, створення документів реалізації (накладна або акт), фіксація оплати.

Авторизація

class KonturBukhClient
{
    private string $apiKey;
    private string $accountId; // ID організації в Контур.Бухгалтерії
    private string $baseUrl = 'https://api.kontur.ru/budget/v1';

    public function __construct(string $apiKey, string $accountId)
    {
        $this->apiKey    = $apiKey;
        $this->accountId = $accountId;
    }

    public function request(string $method, string $path, array $data = []): array
    {
        $url = "{$this->baseUrl}/accounts/{$this->accountId}{$path}";
        $ch  = curl_init($url);

        $options = [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER     => [
                'Content-Type: application/json',
                "X-Api-Key: {$this->apiKey}",
            ],
        ];

        if ($method === 'POST' || $method === 'PUT') {
            $options[CURLOPT_CUSTOMREQUEST] = $method;
            $options[CURLOPT_POSTFIELDS]    = json_encode($data);
        } elseif ($method === 'GET' && $data) {
            $url .= '?' . http_build_query($data);
            curl_setopt($ch, CURLOPT_URL, $url);
        }

        curl_setopt_array($ch, $options);
        $response = json_decode(curl_exec($ch), true);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpCode >= 400) {
            throw new \RuntimeException("Kontur API error {$httpCode}: " . json_encode($response));
        }

        return $response ?? [];
    }
}

Синхронізація контрагентів

Перед створенням документа потрібен контрагент у Бухгалтерії. Шукаємо за ІПН — якщо не знайдено, створюємо:

public function findOrCreateContragent(\Bitrix\Sale\Order $order): string
{
    $props = $order->getPropertyCollection();
    $inn   = $props->getItemByOrderPropertyCode('INN')->getValue();
    $name  = $props->getItemByOrderPropertyCode('COMPANY')->getValue();

    // Пошук за ІПН
    $found = $this->client->request('GET', '/counterparties', ['inn' => $inn]);
    if (!empty($found['items'])) {
        return $found['items'][0]['id'];
    }

    // Створення нового
    $contragent = $this->client->request('POST', '/counterparties', [
        'name'  => $name,
        'inn'   => $inn,
        'kpp'   => $props->getItemByOrderPropertyCode('KPP')->getValue() ?? '',
        'type'  => 'LegalEntity',
    ]);

    return $contragent['id'];
}

Створення документа реалізації

При зміні статусу замовлення на «Відвантажено» створюємо накладну:

AddEventHandler('sale', 'OnSaleStatusOrder', function(string $statusId, \Bitrix\Sale\Order $order) {
    if ($statusId !== 'D') return; // D = Доставляється/Відвантажено

    $service = new KonturBukhSyncService();
    $service->createInvoiceForOrder($order);
});

public function createInvoiceForOrder(\Bitrix\Sale\Order $order): void
{
    $contragentId = $this->findOrCreateContragent($order);
    $orderNumber  = $order->getField('ACCOUNT_NUMBER');
    $items        = [];

    foreach ($order->getBasket() as $item) {
        $items[] = [
            'name'     => $item->getField('NAME'),
            'quantity' => $item->getQuantity(),
            'price'    => $item->getPrice(),
            'vatRate'  => $this->getVatRate($item), // 'none'|'vat0'|'vat10'|'vat20'
            'unit'     => 'шт.',
        ];
    }

    $document = $this->client->request('POST', '/documents/saleinvoices', [
        'date'           => date('Y-m-d'),
        'number'         => $orderNumber,
        'counterpartyId' => $contragentId,
        'items'          => $items,
        'totalAmount'    => $order->getPrice(),
        'comment'        => 'Автоматично створено із замовлення #' . $orderNumber,
    ]);

    // Зберігаємо ID документа у властивостях замовлення
    $order->setField('COMMENTS',
        $order->getField('COMMENTS') . "\nID документа КБ: " . $document['id']
    );
    $order->save();
}

Фіксація оплати

При зміні статусу оплати замовлення на «Оплачено»:

AddEventHandler('sale', 'OnSalePaymentPaid', function(\Bitrix\Sale\Payment $payment) {
    $order        = $payment->getOrder();
    $documentId   = $this->getKonturDocumentId($order->getId()); // зі сховища

    if (!$documentId) return;

    $this->client->request('POST', "/documents/saleinvoices/{$documentId}/payments", [
        'date'           => date('Y-m-d'),
        'amount'         => $payment->getSum(),
        'paymentMethod'  => $payment->getPaySystem()->getField('CODE') === 'cash'
            ? 'Cash' : 'BankTransfer',
    ]);
});

Зберігання зв'язків

Таблиця local_kontur_bukh_sync:

CREATE TABLE local_kontur_bukh_sync (
    ORDER_ID     INT PRIMARY KEY,
    KB_DOC_ID    VARCHAR(100),
    SYNCED_AT    DATETIME,
    STATUS       ENUM('pending','synced','error') DEFAULT 'pending',
    ERROR_MSG    TEXT
);

Склад робіт

  • PHP-клієнт Kontur API з обробкою помилок
  • Пошук і створення контрагентів за ІПН
  • Створення документів реалізації за подією замовлення
  • Фіксація оплат, обробка повернень
  • Таблиця синхронізації, повторна відправка при помилках

Терміни: 3–5 тижнів при повному циклі (реалізація + оплати + повернення + моніторинг).