Настройка приемки товаров через 1С-Битрикс
Типичная ситуация: кладовщик принимает товар по бумажному листу, потом кто-то вручную вносит данные в систему. Либо приёмка идёт через 1С, а в Битрикс остатки приходят с задержкой через CommerceML-синхронизацию раз в час. В обоих случаях сайт показывает устаревшие данные.
Документ прихода в модуле catalog
Приёмка товара в Битриксе реализована через документ типа A (arrival) в таблице b_catalog_docs. Структура документа: заголовок в b_catalog_docs, строки товаров в b_catalog_docs_element.
Ключевые поля b_catalog_docs: DOC_TYPE = 'A', STORE_TO — ID склада назначения, CONTRACTOR_ID — поставщик из b_catalog_contractor, STATUS — N (черновик) или Y (проведён).
Каждая строка b_catalog_docs_element содержит: DOC_ID, ELEMENT_ID (товар), STORE_TO, AMOUNT (количество в документе), PURCHASING_PRICE — закупочная цена, CURRENCY.
Создание документа приёмки через API:
$result = \Bitrix\Catalog\StoreDocumentTable::add([
'DOC_TYPE' => \Bitrix\Catalog\StoreDocumentTable::TYPE_ARRIVAL,
'STATUS' => 'N',
'STORE_TO' => 2,
'CONTRACTOR_ID' => 5,
'TITLE' => 'Поступление от ' . date('d.m.Y'),
'DATE_DOCUMENT' => new \Bitrix\Main\Type\DateTime(),
]);
$docId = $result->getId();
После создания заголовка добавляются строки через \Bitrix\Catalog\StoreDocumentElementTable::add().
Проведение и пересчёт остатков
Проведение документа — самый критичный шаг. Метод \Bitrix\Catalog\Document\DocManager::conductDocument($docId) выполняет несколько операций транзакционно:
- Обновляет
b_catalog_store_product: увеличиваетAMOUNTна складе назначения. - Обновляет
b_catalog_product: пересчитывает суммарныйQUANTITYпо всем складам. - Записывает закупочную цену в
b_catalog_priceесли это первое поступление или включён пересчёт. - Создаёт запись в
b_catalog_docsсSTATUS = 'Y'.
Если документ уже проведён, повторный вызов conductDocument() вернёт ошибку. Для корректировки нужно сначала откатить документ через cancelDocument($docId), внести изменения в строки, затем провести снова.
Права доступа для кладовщиков
Административный интерфейс склада (/bitrix/admin/cat_store_document_list.php) требует права доступа к модулю catalog. Минимально необходимая роль — catalog_document. Назначается в Настройки → Управление доступом → Группы пользователей, вкладка "Права на модули".
Для работы через мобильный терминал (сканер штрихкодов) используется REST API или собственный компонент. Поиск товара по штрихкоду идёт через b_catalog_product_barcode — таблица хранит соответствие PRODUCT_ID → BARCODE. Запрос:
$item = \Bitrix\Catalog\ProductBarcodeTable::getList([
'filter' => ['BARCODE' => '4607134392015'],
'select' => ['PRODUCT_ID'],
])->fetch();
Закупочные цены и себестоимость
При проведении прихода Битрикс может автоматически обновлять закупочную цену товара. Это управляется настройкой модуля catalog — параметр update_purchase_price_on_arrival в b_option. При включённом параметре каждое проведение прихода переписывает цену в b_catalog_price для типа цены "Закупочная".
Если нужна история закупочных цен (FIFO/средневзвешенная), стандартный модуль этого не даёт — потребуется кастомная таблица с историей цен по каждой строке документа и собственная логика расчёта себестоимости при расходе.
Интеграция с заказами поставщику
Модуль catalog содержит тип документа O — заказ поставщику (b_catalog_docs с DOC_TYPE = 'O'). Когда поставщик отгружает товар, документ заказа конвертируется в приход: метод \Bitrix\Catalog\Document\DocManager::createArrivalByOrder($orderId) создаёт документ типа A на основе строк заказа. Количество можно скорректировать перед проведением — это закрывает сценарий частичной поставки.







