• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/cashbox/checkmanager.php
  • Класс: BitrixSaleCashboxCheckManager
  • Вызов: CheckManager::addCorrection
static function addCorrection($type, $cashboxId, array $correction)
{
	$result = new Result();

	if (!self::isAvailableCorrection())
	{
		return $result->addError(
			new Error(
				Loc::getMessage('SALE_CASHBOX_CHECK_CORRECTION_NOT_AVAILABLE')
			)
		);
	}

	/** @var CorrectionCheck $check */
	$check = self::createByType($type);
	if (!$check instanceof CorrectionCheck)
	{
		$result->addError(new Error(Loc::getMessage('SALE_CASHBOX_ERROR_CHECK')));
		return $result;
	}

	$check->setField('CASHBOX_ID', $cashboxId);
	$check->setAvailableCashbox([
		Manager::getCashboxFromCache($cashboxId)
	]);

	$check->setCorrectionFields($correction);

	$r = $check->save();
	if ($r->isSuccess())
	{
		$result->setId($check->getField('ID'));

		$cashbox = Manager::getObjectById($cashboxId);
		if ($cashbox->isCorrection())
		{
			CashboxCheckTable::update(
				$check->getField('ID'),
				[
					'STATUS' => 'P', 'DATE_PRINT_START' => new TypeDateTime()
				]
			);

			$printResult = $cashbox->printCorrectionImmediately($check);
			if ($printResult->isSuccess())
			{
				$data = $printResult->getData();
				CashboxCheckTable::update($check->getField('ID'), ['EXTERNAL_UUID' => $data['UUID']]);
			}
			else
			{
				self::savePrintResult(
					$check->getField('ID'),
					[
						'ID' => $check->getField('ID'),
						'ERROR' => [
							'TYPE' =>  ErrorsError::TYPE,
							'MESSAGE' => implode("n", $printResult->getErrorMessages())
						]
					]
				);
			}

			global $CACHE_MANAGER;
			$CACHE_MANAGER->Read(CACHED_b_sale_order, 'sale_checks_'.$cashboxId);
			$CACHE_MANAGER->SetImmediate('sale_checks_'.$cashboxId, true);
		}
	}
	else
	{
		$result->addErrors($r->getErrors());
	}

	return $result;
}