Налаштування приймання товарів у 1C-Bitrix
Типова ситуація: кладовщик приймає товар за паперовим листом, потім хтось вручну вносить дані в систему. Або приймання йде через 1C, а у Bitrix остатки приходять з затримкою через CommerceML-синхронізацію раз на годину. В обох випадках сайт показує застарілі дані.
Документ надходження в модулі catalog
Приймання товару в Bitrix реалізовано через документ типу 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();
Закупівельні ціни та собівартість
При проведенні надходження Bitrix може автоматично оновлювати закупівельну ціну товару. Це керується налаштуванням модуля 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 на основі рядків замовлення. Кількість можна скоригувати перед проведенням — це закриває сценарій часткової поставки.







