Найти в Дзене
Ната Панчо

Битрикс24. Бизнес-процессы. Формирование документа pdf в процессе

В процессе из данных в полях можно формировать документ pdf.
Пример документа, открываемого по ссылке и сформированного из полей в процессе
1. Создать поле, в примере это поле «Ссылка на pdf»
— Тип: HTML/текст

В процессе из данных в полях можно формировать документ pdf.

Пример документа, открываемого по ссылке и сформированного из полей в процессе

-2

1. Создать поле, в примере это поле «Ссылка на pdf»
Тип: HTML/текст

-3

2. В настройках бизнес-процесса выбрать блок php-код

-4

Вставить заранее подготовленный код. Описание ниже.

3. Вставить блок Изменение документа

-5

В нем настроить поле «Ссылка на pdf»

-6
-7

Внутри настраивается та же ссылка на документ, что будет в php-коде pdf файла

-8

Сформирован &nbsp;<a href="/upload/docs/leave/courier_{{ID элемента}}.pdf">pdf-файл</a>.<br>

4. Настроить код для блока php-код, формирующего pdf

//Начало кода
___________________________________

CModule::IncludeModule("sale");

use Bitrix\Main\Type\DateTime;

$date = new DateTime('{{Дата создания}}');

$date=$date->format("d-m-Y");

if (!CSalePdf::isPdfAvailable()) die();

$ID={{ID элемента}};

$IBLOCK_ID={{ID информационного блока}};

$PROPS=array();

$db_props = CIBlockElement::GetProperty($IBLOCK_ID, $ID);

while($ar_props = $db_props->Fetch())

{

$PROPS[$ar_props['ID']]=$ar_props;

}

$pdf = new CSalePdf('P', 'pt', 'A4');

$pageWidth = $pdf->GetPageWidth();

$pageHeight = $pdf->GetPageHeight();

$pdf->AddFont('Font', '', 'pt_sans-regular.ttf', true);

$pdf->AddFont('Font', 'B', 'pt_sans-bold.ttf', true);

$fontFamily = 'Font';

$fontSize = 11.5;

$margin = array(

'top' => 15 * 72/25.4,

'right' => 15 * 72/25.4,

'bottom' => 15 * 72/25.4,

'left' => 15 * 72/25.4

);

$width = $pageWidth - $margin['left'] - $margin['right'];

$pdf->SetDisplayMode(100, 'continuous');

$pdf->SetMargins($margin['left'], $margin['top'], $margin['right']);

$pdf->SetAutoPageBreak(true, $margin['bottom']);

$pdf->AddPage();

$pdf->SetFont($fontFamily, 'B', $fontSize);

$pdf->Cell(0, 30, $pdf->prepareToPdf($date), 0, 0, 'L');

$pdf->Ln( 12 );

$pdf->Ln( 12 );

$pdf->SetFont($fontFamily, 'B', $fontSize*2);

$pdf->Cell(0, 30, $pdf->prepareToPdf('Заявка на предоставление услуг курьера'), 0, 0, 'C');

$pdf->Ln();

$pdf->Ln();

$pdf->SetFont($fontFamily, 'B', $fontSize);

$pdf->Cell(0, 15, $pdf->prepareToPdf('Данные заявки'), 0, 0, 'L');

$pdf->Ln();

$pdf->Ln();

$ROW1=150;

$Y=15;

$pdf->SetFont($fontFamily, '', $fontSize);

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Номер заявки:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_344}'), 0, 'L');

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Отправитель:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_345}'), 0, 'L');

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Телефон отправителя:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_445}'), 0, 'L');

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Откуда везти:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_346}'), 0, 'L');

$pdf->Ln();

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Порядок действий:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{{Что доставить и порядок действий курьера}}'), 0, 'L');

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Нужна ли доверенность:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_355}'), 0, 'L');

$pdf->Ln();

$pdf->Ln();

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Получатель:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_347}'), 0, 'L');

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Организация-Получатель:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_348}'), 0, 'L');

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Контактный телефон:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_351}'), 0, 'L');

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Адрес доставки:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{{Адрес доставки}}'), 0, 'L');

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Этаж:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_349}'), 0, 'L');

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Офис:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_350}'), 0, 'L');

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Крайний срок доставки:'), 0, 0, 'L');

$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_356}'), 0, 'L');

$myfile='temp.pdf';

$pdf->Output($myfile, 'F');

if (!copy($myfile,$_SERVER['DOCUMENT_ROOT'].'/upload/docs/leave/courier_'.$ID.'.pdf'))

{ }else{ unlink($myfile); }
____________________________________________________
//Окончание кода

4.1. В файле нужно прописать коды полей, которые можно найти в адресной строке при настройке каждого поля.

Например,

$pdf->Cell($ROW1, $Y, $pdf->prepareToPdf('Нужна ли доверенность:'), 0, 0, 'L');
$pdf->MultiCell(0, $Y, $pdf->prepareToPdf('{=Document:PROPERTY_355}'), 0, 'L');

Заходим в настройку этого поля и в адресной строке смотрим код.

-9
-10

И так прописать каждое поле, которое нужно в файле

4.2. В файле надо прописать ссылку на папку, ту же что прописали в пункте 1 в блоке «Изменение документа»

(!copy($myfile,$_SERVER['DOCUMENT_ROOT'].'/upload/docs/leave/courier_'.$ID.'.pdf'))

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

Пример. Заявка на отпуск

-11

Документ pdf

-12

Пример кода

CModule::IncludeModule("sale");

use Bitrix\Main\Type\DateTime;

$date = new DateTime('{{Дата создания}}');

$date=$date->format("d.m.Y");

if (!CSalePdf::isPdfAvailable()) die();

$ID={{ID элемента}};

$IBLOCK_ID={{ID информационного блока}};

$PROPS=array();

$db_props = CIBlockElement::GetProperty($IBLOCK_ID, $ID);

while($ar_props = $db_props->Fetch())

{

$PROPS[$ar_props['ID']]=$ar_props;

}

$pdf = new CSalePdf('P', 'pt', 'A4');

$pageWidth = $pdf->GetPageWidth();

$pageHeight = $pdf->GetPageHeight();

$pdf->AddFont('Font', '', 'pt_sans-regular.ttf', true);

$pdf->AddFont('Font', 'B', 'pt_sans-bold.ttf', true);

$fontFamily = 'Font';

$fontSize = 12.5;

$margin = array(

'top' => 15 * 72/25.4,

'right' => 15 * 72/25.4,

'bottom' => 15 * 72/25.4,

'left' => 15 * 72/25.4

);

$width = $pageWidth - $margin['left'] - $margin['right'];

$pdf->SetDisplayMode(100, 'continuous');

$pdf->SetMargins($margin['left'], $margin['top'], $margin['right']);

$pdf->SetAutoPageBreak(true, $margin['bottom']);

$pdf->AddPage();

$pdf->SetFont($fontFamily, '', $fontSize);

$pdf->Cell(0, 30, $pdf->prepareToPdf('Генеральному директору'), 0, 0, 'R');

$pdf->Ln();

$pdf->Cell(0, 30, $pdf->prepareToPdf('ООО «*******************»'), 0, 0, 'R');

$pdf->Ln();

$pdf->Cell(0, 30, $pdf->prepareToPdf('А. Б. К****************'), 0, 0, 'R');

$pdf->Ln();

$pdf->Ln();

$pdf->Ln();

$pdf->Ln();

$pdf->Ln();

$pdf->SetFont($fontFamily, 'B', $fontSize);

$pdf->Cell(0, 30, $pdf->prepareToPdf('Заявление'), 0, 0, 'C');

$pdf->Ln();

$pdf->Ln();

$pdf->SetFont($fontFamily, '', $fontSize);

$pdf->Cell(0, 20, $pdf->prepareToPdf('Прошу предоставить мне дополнительный отпуск согласно п. 4.11. ПВТР'), 0, 0, 'L');

$pdf->Ln();

$pdf->Ln();

$pdf->Cell(0, 20, $pdf->prepareToPdf(' с '.'{{Дата начала отпуска (системное)}}'.' г. по '.'{{Дата окончания отпуска (системное)}}'.' г.'), 0, 0, 'L');

$pdf->Ln();

$pdf->Ln();

$pdf->SetFont($fontFamily, '', $fontSize);

$pdf->Cell(0, 20, $pdf->prepareToPdf('На время отпуска мои должностные обязанности будет выполнять '.'{=Document:PROPERTY_476}'), 0, 0, 'L');

$pdf->Ln();

$pdf->Ln();

$pdf->Ln();

$pdf->SetFont($fontFamily, '', $fontSize);

$pdf->Cell(0, 30, $pdf->prepareToPdf('{{Инициатор (системное)}}'), 0, 0, 'R');

$pdf->Ln();

$pdf->Cell(0, 30, $pdf->prepareToPdf($date), 0, 0, 'R');

$pdf->Ln();

$pdf->Ln();

$pdf->Ln();

$pdf->Cell(0, 30, $pdf->prepareToPdf('Генеральный директор ООО «**************************»'), 0, 0, 'R');

$pdf->Ln();

$pdf->Cell(0, 30, $pdf->prepareToPdf('_________________ А. Б. К*********'), 0, 0, 'R');

$pdf->Ln();

$pdf->Ln();

$pdf->Ln();

$myfile='temp.pdf';

$pdf->Output($myfile, 'F');

if (!copy($myfile,$_SERVER['DOCUMENT_ROOT'].'/upload/docs/leave//leave_'.$ID.'.pdf'))

{ }else{ unlink($myfile); }