Создание приходной накладной
Для создания прихода товара на склад используется модуль “Приходная накладная” (раздел “Склад”).
В момент сохранения записи в табличной части “Номенклатура” срабатывает метод 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);
$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);
$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);
if($object->product->type->id == 1 && !Stock::stockCheckControl($object->product->id, $object->owner->storehouse->id, $object->number))
{
throw new \Exception("Данный товар нельзя удалить, иначе он уйдет в минус");
}
Stock::stockDelete($object);
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
/configurator/documents.consignment/?formname=consignment/products/edit
/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);
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);
}
}
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);
}
}
Как проверить, что товар добавлен на склад корректно?
- Зайти в в раздел “Номенклатура” (/products/). Найти нужный товар и выбрать склад (по умолчанию “Основной”), в столбце “Количество” будет показано количество товара. Если оно изменилось в большую сторону, то добавления товара на склад прошло успешно.
- Зайти в отчет “По движению товаров по складам” (/olap/products_movement/) и построить отчет по выбранному товару и складу. В отчете в таблице будут показаны документы движения. Если новый документ “Приходная накладная” присутствует в списке, то товар был добавлен на склад успешно.
