Печатные формы и Печать документов по заказу в 1С-Битрикс

Опубликовано в Веб-разработка

В статье рассказывается о добавлении пользовательских печатных форм для печати заказов с сайта.

Печатные формы в 1С-Битрикс

Печатные формы - страница для настройки данных в документах по заказу, выводимых на печать.

В документах, выводимых на печать, необходимо указать множество данных от названия компании до реквизитов счета. Такая настройка выполняется на странице Настройка печатных форм (Магазин > Настройки > Печатные формы).

Настройка выполняется простым заданием соответствий в двух колонках. Данные заполняются отдельно для магазина и для покупателя.

Печать документов в 1С-Битрикс

Что же касается печати документов, то печать документов выполняется как по всему заказу, так и отдельно по отгрузкам:

  • Для печати документа отгрузки следует перейти к форме редактирования отгрузки и нажать кнопку Распечатать, выбрав необходимый шаблон документа http://joxi.ru/brRvEXvHYXv6Wr:
  • Печать документов по заказу выполняется со страницы просмотра/редактирования заказа по кнопке Печать заказа, выбрав необходимый шаблон документа http://joxi.ru/Q2KvDKvHwKl0Ym
  • распечатать документы можно иначе: находясь на странице списка заказов, в меню действий выбрать пункт Печать документов http://joxi.ru/BA0VnkVcPOD49m:

Более подробную информацию можно изучить на странице обучающего курса 1С-Битрикс по ссылке https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=42&LESSON_ID=3101.

В конце статьи по указанной ссылке есть примечание: внешний вид формы печати документов по заказу настраивается на странице Настройка печатных форм (Магазин > Настройки > Печатные формы).

Создание пользовательского шаблона печати документов в 1С-Битрикс

Файлы, содержащие Предустановленные шаблоны, находятся в каталоге /bitrix/modules/sale/reports/.

Если вас не устраивает какой-либо предустановленный шаблон, то вам следует скопировать файл этого шаблона из каталога предустановленных шаблонов в каталог пользовательских шаблонов (/bitrix/admin/reports/) и изменить его соответствующим образом. В каталог пользовательских шаблонов можно добавить любое количество произвольных шаблонов документов.

Если у вас используется многоязычная версия сайта, в этом случае нужно брать предустановленные шаблоны из папки /bitrix/modules/sale/ru/reports.

Техническая информация для админитраторов находится на этой странице - https://dev.1c-bitrix.ru/user_help/store/sale/orders/sale_order_print.php.

Итак, размерем данный функционал на решении реальной задачи:

Для печати заказа нам нужна только краткая информация и подходит только "Бланк заказа". Но в нем нет информации о телефоне, почте, адресе доставки покупателя из заказа. Так же не отображается изначальная цена товара и какая скидка применена. Только итоговая сумма со скидкой. Как все это настроить для печати?

В папке /bitrix/modules/sale/reports/ мы видим следующие предустановленные шаблоны печатных документов http://joxi.ru/KAxadPaF1N5Bgr:

Блан заказа выглядит таким образом http://joxi.ru/v29VdMVczxyW3A:

Счёт-фактура выглядит таким образом http://joxi.ru/823Vn7VcDv0OYm:

Пример предустановленного документа "Счёт" http://joxi.ru/KAgj7ljcXldbN2:

Из статьи 1С-Битрикс становится ясно, что нельзя добавить колонку со скидкой на товар, т.к. в документ передается окончательная цена, тем не менее, мы можем дополнить подходящую форму докумтена "Бланк заказа" (он же товарный чек) расширенной информацией о покупателе. 

Код шаблона из товарного чека, отвечающий за вывод данных выглядит так http://joxi.ru/YmEv1QvHJQyVE2:

Здесь <tr>...</tr> - это строка таблицы, а <td>...</td> в ней - это содержимое ячейки. В содержимом находится программный PHP-код.

Чтобы решить задачу, потребуется добавить несколько строк <tr> и ячеек <td>, заполнив их информацией, которая имеется в другом документе для печати (например, "Счет").

Алгоритм создания пользовательского шаблона печати документов в 1С-Битрикс

1. Копируем из папки /bitrix/modules/sale/ru/reports (конкретно для данного примера) файл order_form.php в папку /bitrix/admin/reports/, и назовем его order_form_custom-1.php

При попытке копирования файла средствами 1С-Битрикс появилось уведомление, что такой папки нет (Папка "/bitrix/admin/reports/" отсутствует. Вы хотите чтобы она была создана?), с предложением создать папку. Соглашаемся на это, нажав "ок".

2. Открываем файл order_form_custom-1.php для редактирования.

3. Первое, что нужно заменить в файле - заголовок (в нашем случае это <title langs="ru">Бланк заказа</title>), т.к. именно это значение отображается при выборе варианта печатного документа из выпадающего списка. Заменим его на <title langs="ru">Бланк заказа (расширенный)</title>.

4. При выводе информации мы будем руководствоваться тремя массивами данных:

  • $arOrder - Массив атрибутов заказа (ID, доставка, стоимость, дата создания и т.д.)
  • $arOrderProps - Массив со свойствами заказа
  • $arParams - Массив атрибутов, которые устанавливаются на странице: магазин > настройки > печатные формы
  • $arBasketIDs – Массив кодов товарных позиций в заказе (кодов соответствующих записей в корзине), которые выбраны для печати
  • $arQuantities – Массив количеств товарных позиций в заказе, которые выбраны для печати

Для получения более подробной информации о содержании массивов в шаблоне печатного документа выполните код (для примера с $arOrder) <pre><?php print_r($arOrder); ?></pre> - вывод всех элементов массива атрибутов заказа.

5. Выводим контактные данные.

В зависимости от способа оформления заказа мы сначала проверяем наличие данных в $arParams, и если там пусто, то берём значение из $arOrderProps (по крайней мере такая проверка установлена в предустановленном шаблоне. Мнемонические коды свойств также можно посмотреть на странице в панели управления /bitrix/admin/sale_order_props.php.

На примере вывода телефона покупателя это выглядит так http://joxi.ru/L21Vp1VcgdMPQA:

По аналогии добавляем E-mail и адрес доставки http://joxi.ru/EA4Vn8VcO7ELvm:

В итоге вывод информации для товарного чека выглядит так http://joxi.ru/Vm6V5JVcjopO1m:

 6. Выводим скидки к товарам. 

Как оказалось в процессе написания статьи, данные о скидке находятся в массиве $arBasket. В нем есть несколько переменных, которые хранят значение цены товара:

  • $arBasket["BASE_PRICE"] - основная цена единицы товара БЕЗ скидки
  • $arBasket["DISCOUNT_PRICE"] - размер скидки на 1 единицу товара
  • $arBasket["PRICE"] - цена единицы товара с учетом скидки

Массив $arBasket уже используется в печатное документе Товарного чека, но важно учесть, что он используется внутри цикла вывода элементов таблицы номенклатуры. Вот код, в котором происходит получение этого массива - foreach ($arBasketOrder as $arBasket):.

Чтобы вывести скидку в таблице номенклатуры, необходимо:

  1. добравить колонку "Скидка" в строку заголовков таблицы http://joxi.ru/v29VdMVczxodgA:
  2. добавить вывод ячейки со скидкой (п.2. скриншота http://joxi.ru/5mdeNbeUewy4N2) в строке товарной позиции, скорректировать вывод рядом стоящик ячеек с ценой за единицу товара (п.1. скриншота http://joxi.ru/5mdeNbeUewy4N2) и итоговой ценой за позицию с учетом количества и скидок (п.3. скриншота http://joxi.ru/5mdeNbeUewy4N2):
  3. скорректировать объединение ячеек для строки суммы http://joxi.ru/L21Vp1Vcgdb6OA (изменить "4" на "5"):
  4. скорректировать объединение ячеек для строки итоговой суммы без учета доставки http://joxi.ru/Grq5dP5ckLPNKr:

В итоге при тестировании печатного документа для заказа с товарами, которые были приобретены со скидкой, выводи будет выглядеть так http://joxi.ru/Q2KvDKvHwKx4bm:

На этом задача выполнена, всем спасибо за чтение.

Исходный код файла доступен для скачивания по ссылке: https://yadi.sk/d/3nQN0UooeJ7gzA


Полезные ссылки:

 

Tags: 1C-Bitrix 1С-Битрикс