Описание

Модуль “Складской учет” в Битрикс24 позволяет вести учет товаров и управлять складскими операциями. Данный раздел содержит примеры PHP-кода, демонстрирующие создание приходных ордеров. Приходный ордер используется для фиксации поступления товаров на склад. Это может быть полезно для автоматизации процессов приемки товаров, интеграции с системами поставщиков или учета возвратов.

Примеры использования

Пример 1: Создание простого приходного ордера

Этот пример показывает, как создать базовый приходный ордер с указанием склада и списка товаров.

use Bitrix\Catalog\StoreDocumentTable;
use Bitrix\Catalog\StoreDocumentElementTable;
use Bitrix\Main\Loader;

Loader::includeModule('catalog');

// ID склада, на который приходят товары
$storeId = 1; // Замените на реальный ID склада

// Список товаров для прихода
$products = [
    [
        'PRODUCT_ID' => 10, // ID товара
        'AMOUNT' => 5,      // Количество
        'PRICE' => 100.00,  // Цена за единицу
    ],
    [
        'PRODUCT_ID' => 20,
        'AMOUNT' => 2,
        'PRICE' => 250.50,
    ],
];

// Создание нового приходного ордера
$documentFields = [
    'SITE_ID' => 's1', // ID сайта
    'DOC_TYPE' => StoreDocumentTable::TYPE_ARRIVAL, // Тип документа: приход
    'STATUS' => 'D', // Статус: Черновик (D - Draft, N - New, Y - Done)
    'DATE_CREATE' => new \Bitrix\Main\Type\DateTime(),
    'CREATED_BY' => $USER->GetID(),
    'DATE_STATUS' => new \Bitrix\Main\Type\DateTime(),
    'STATUS_BY' => $USER->GetID(),
    'COMMENT' => 'Приход товаров по накладной №123',
    'CURRENCY' => 'RUB',
    'TOTAL' => 0, // Будет пересчитано автоматически
    'STORE_ID' => $storeId,
];

$result = StoreDocumentTable::add($documentFields);
$documentId = 0;
if ($result->isSuccess()) {
    $documentId = $result->getId();
    $this->TrackingService->WriteToTrackingService("Приходный ордер успешно создан. ID: " . $documentId);

    // Добавление товаров в приходный ордер
    $totalAmount = 0;
    foreach ($products as $product) {
        $elementFields = [
            'DOC_ID' => $documentId,
            'PRODUCT_ID' => $product['PRODUCT_ID'],
            'AMOUNT' => $product['AMOUNT'],
            'PURCHASING_PRICE' => $product['PRICE'],
        ];
        $elementResult = StoreDocumentElementTable::add($elementFields);
        if ($elementResult->isSuccess()) {
            $totalAmount += $product['AMOUNT'] * $product['PRICE'];
            $this->TrackingService->WriteToTrackingService("Товар " . $product['PRODUCT_ID'] . " добавлен.");
        } else {
            $this->TrackingService->WriteToTrackingService("Ошибка добавления товара " . $product['PRODUCT_ID'] . ": " . implode(', ', $elementResult->getErrorMessages()));
        }
    }

    // Обновление общей суммы документа
    StoreDocumentTable::update($documentId, ['TOTAL' => $totalAmount]);

    // Изменение статуса на "Проведен"
    StoreDocumentTable::update($documentId, ['STATUS' => 'Y']);

} else {
    $this->TrackingService->WriteToTrackingService("Ошибка создания приходного ордера: " . implode(', ', $result->getErrorMessages()));
}

$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("NewInventoryReceiptId", $documentId);

Параметры

  • $storeId (int): ID склада, на который осуществляется приход товаров.
  • $products (array): Массив товаров, где каждый элемент - это массив с PRODUCT_ID, AMOUNT и PRICE.

Возвращаемые значения

  • NewInventoryReceiptId (int): ID созданного приходного ордера.

Рекомендации по использованию

  • Всегда проверяйте наличие необходимых модулей (catalog) с помощью Loader::includeModule().
  • Убедитесь, что указанные PRODUCT_ID и STORE_ID существуют в вашей системе Битрикс24.
  • Для более сложных сценариев (например, приход с несколькими складами, учет серийных номеров) потребуется более детальная работа с API модуля “Складской учет”.
  • Результаты операций передаются в переменные бизнес-процесса с помощью SetVariable().