public function Execute() { $conn = \ZCL\DB\DB::getConnect(); $conn->StartTrans(); $ret = 0; // торговая наценка $amount = 0; foreach ($this->detaildata as $value) { //списываем со склада $stockfrom = Stock::getStock($this->headerdata['storefrom'], $value['item_id'], $value['partion']); $sc = new SubConto($this, $value['type'], 0 - $value['quantity'] / 1000 * $stockfrom->partion); $sc->setStock($stockfrom->stock_id); $sc->setQuantity(0 - $value['quantity']); $sc->save(); $store = Store::load($this->headerdata['storeto']); if ($store->store_type == Store::STORE_TYPE_OPT) { //оптовый $stockto = Stock::getStock($this->headerdata['storeto'], $value['item_id'], $value['price'], true); $sc = new SubConto($this, $value['type'], $value['quantity'] / 1000 * $stockto->price); $sc->setStock($stockto->stock_id); $sc->setQuantity($value['quantity']); $sc->save(); } if ($store->store_type == Store::STORE_TYPE_RET) { //розница $stockto = Stock::getFirst("store_id={$this->headerdata['storeto']} and item_id={$value['item_id']} and price={$value['price']} and partion={$value['partion']} and closed <> 1"); if ($stockto instanceof Stock) { } else { $stockto = new Stock(); $stockto->document_id = $this->document_id; $stockto->store_id = $this->headerdata['storeto']; $stockto->item_id = $value['item_id']; $stockto->price = $value['price']; $stockto->partion = $value['partion']; // себестоимость $stockto->Save(); } $sc = new SubConto($this, 282, $value['quantity'] / 1000 * $stockto->price); $sc->setStock($stockto->stock_id); $sc->setQuantity($value['quantity']); $sc->save(); $ret += $value['quantity'] / 1000 * ($value['price'] - $value['partion']); $amount += $value['quantity'] / 1000 * $value['price']; } if ($store->store_type == Store::STORE_TYPE_RET_SUM) { //розница суммовой учет //специальный товар для cуммового учета $item = \ZippyERP\ERP\Entity\Item::getSumItem(); $stockto = Stock::getStock($this->headerdata['storeto'], $item->item_id, 1, true); $sc = new SubConto($this, 282, $value['quantity'] / 1000 * $value['price']); $sc->setStock($stockto->stock_id); $sc->setQuantity($value['quantity'] * $value['price']); //цена единицы товара - 1 копейка. $sc->save(); $ret += $value['quantity'] / 1000 * ($value['price'] - $value['partion']); $amount += $value['quantity'] / 1000 * $value['price']; } } if ($amount > 0) { // розница Entry::AddEntry(282, 281, $amount - $ret, $this->document_id, $this->document_date); Entry::AddEntry(282, 285, $ret, $this->document_id, $this->document_date); $sc = new SubConto($this, 285, 0 - $ret); $sc->setExtCode($store->store_id); //запоминаем на каком магащине сколько наценки $sc->save(); } $conn->CompleteTrans(); return true; }