В процессе из данных в полях можно формировать документ pdf.
Пример документа, открываемого по ссылке и сформированного из полей в процессе
1. Создать поле, в примере это поле «Ссылка на pdf»
— Тип: HTML/текст
2. В настройках бизнес-процесса выбрать блок php-код
Вставить заранее подготовленный код. Описание ниже.
3. Вставить блок Изменение документа
В нем настроить поле «Ссылка на pdf»
Внутри настраивается та же ссылка на документ, что будет в php-коде pdf файла
Сформирован <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');
Заходим в настройку этого поля и в адресной строке смотрим код.
И так прописать каждое поле, которое нужно в файле
4.2. В файле надо прописать ссылку на папку, ту же что прописали в пункте 1 в блоке «Изменение документа»
(!copy($myfile,$_SERVER['DOCUMENT_ROOT'].'/upload/docs/leave/courier_'.$ID.'.pdf'))
Процесс кропотливый, но зато на выходе получается нужный документ, который можно распечатать или переслать по почте.
Пример. Заявка на отпуск
Документ 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 = 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); }