Маркировка товаров

2k
Алексей,

Приобрел себе принтер термоэтикеток, забавная штука. Зачем? Мы клеим информацию о заказанных товарах (состав, срок годности и тп).
Я сделал полуавтоматическую печать при поступлении нового заказа, в статье расскажу как.

Для начала стоит сказать, что у меня TSC TDP-225 и наклейки 58 на 40 мм. Принтер шустрый, среднего качества, но и недорогой.

Поставил, подключил, установил драйвера, помучался с калибровкой и готово, можно печатать.

Печать наклеек

Все достаточно просто. Нужно создать новый шаблон для компонента catalog.section на отдельной странице, например /print.php, и сделать там примерно такой шаблон:

<?foreach ($arResult['ITEMS'] as $key => $arItem): ?>
	<div style="width: 58mm; height: 39mm;">
		<div style="font-size: 12pt;">
			<?=$arItem['NAME']?>
		</div>
	</div>
	<div style="page-break-after: always"></div>
<?endforeach;?>
<script type="text/javascript">
	window.print();
</script>

На каждом листе будет область 58 на 39 мм, в которой находится имя товара. Это упрощенно, у меня выводится больше информации и сделана своя небольшая верстка. Визуально выглядит так:

Дальше необходимо отфильтровать товары в catalog.section, так что бы выводились только из определенного заказа. В файле /print.php перед вызовом компонента добавляем код:

global $USER;
CModule::IncludeModule('sale');

if ($USER->IsAdmin() && IntVal($_REQUEST['ID']) > 0) {
	$dbBasket = CSaleBasket::GetList(Array("ID" => "ASC"), Array("ORDER_ID" => IntVal($_REQUEST['ID'])));
	while ($arBasket = $dbBasket->Fetch()){
		$ids[] = $arBasket["PRODUCT_ID"];
	}
	if (count($ids) > 0) {
		global $arItemFilter;
		$arItemFilter['ID'] = $ids;

		//$APPLICATION->IncludeComponent("bitrix:catalog.section"...
	}
}

Добавляем кнопку "Печать наклеек" на странице просмотра заказа

//init.php
if (ADMIN_SECTION === true) {
	if ($APPLICATION->GetCurPage() == '/bitrix/admin/sale_order_view.php') {
		\Bitrix\Main\Page\Asset::getInstance()->addJs('/local/templates/ftea/js/jquery.min.js');
		\Bitrix\Main\Page\Asset::getInstance()->addJs('/local/templates/ftea/js/admin.js');
		\Bitrix\Main\Page\Asset::getInstance()->addString('<script type="text/javascript">var orderId = \''.IntVal($_REQUEST['ID']).'\';</script>');
	}
}

Не забудьте подключить jquery. В файле admin.js добавляем саму кнопку:

(function($) {
	$(document).ready(function() {
		if ($('.adm-btn').length > 0) {
			$('.adm-btn:first').before('<a target="_blank" class="adm-btn" href="/print.php?ID='+orderId+'">Печать наклеек</a>');
		}
	});
})(jQuery);

Готово, теперь по клику кнопки печатаются наклейки для всех товаров из заказа:

Пример печати

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 3 июня 2017 | Обновлено 27 августа 2019
делаюИМ
Поделиться
Похожие статьи
Делаю ИМ, часть 1. Планирование
Какой он современный интернет-магазин? Для себя я определил три главные цели: удобный, быстрый, полезный....
Читать дальше » 0
Алексей,
Делаю ИМ, часть 0. Выбор и настройка сервера.
Небольшой цикл статей о том как я делаю интернет-магазин для себя. Начну с настройки web-сервера.
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Алексей
10 апр 2021
Дополню. Для кастомизации админки можно так же использовать файл /local/php_interface/admin_header.php Он автоматически подключается в админ. части сайта.
Приобрел себе принтер термоэтикеток, забавная штука. Зачем? Мы клеим информацию о заказанных товарах (состав, срок годности и тп). <br /> Я сделал полуавтоматическую печать при поступлении нового заказа, в статье расскажу как.