Закажите бесплатную презентацию продуктов РосБизнесСофт прямо сейчас!
Для создания прихода товара на склад используется модуль “Приходная накладная” (раздел “Склад”).
В момент сохранения записи в табличной части “Номенклатура” срабатывает метод stockIncrease().
$result = Stock::stockIncrease($this->structure, $this->structure->product->id, $this->structure->owner->storehouse->id, $this->structure->number, $this->structure->price_nds, $this->structure->gtd->id);
При удалении товара из “Приходной накладной” используется проверка. Если тип “Номенклатуры” = «Товар» (не услуга) и после предполагаемого удаления товар на складе не уйдет в минус, то мы удаляем данный товар со склада (метод stockDelete()).
if($object->product->type->id == 1 && !Stock::stockCheckControl($object->product->id, $object->owner->storehouse->id, $object->number)) { throw new \Exception("Данный товар нельзя удалить, иначе он уйдет в минус"); } Stock::stockDelete($object);
Пример использования:
/configurator/documents.consignment/?formname=consignment/products/edit
При полном удалении документа “Приходная накладная” необходимо проверить достаточно ли ВСЕХ товаров на складе в методах onWipe(), onDelete().
public static function onDelete($object) { foreach ($object->products as $product) { $gtd = $product->gtd->id ? $product->gtd->id : null; if(!Stock::stockCheckControl($product->product->id, $object->storehouse->id, $product->number, $gtd)) { throw new \Exception("Нельзя удалить приходную накладную, так как одного или нескольких товаров не хватает на складе"); } } foreach ($object->products as $product) { Stock::stockDelete($product); } }