Как передать файл из одного раздела воронки в другой в системе Битрикс?

Каким способом можно переместить файл из сделки в "воронке 2" в заранее подготовленное поле в сделке в "воронке 1", сохраняя при этом файл на диске и автоматически удаляя его через 30 дней, чтобы не занимать дополнительное место?
Изображение к вопросу
  • 9 октября 2023 г. 3:47
Ответы на вопрос 2
Для передачи файла из одной воронки в другую в системе Битрикс можно использовать следующий подход:

1. Создайте пользовательское поле типа "Файл" в сделке в "воронке 1", куда вы хотите переместить файл. Укажите в настройках этого поля, что файлы должны сохраняться на диске.

2. В событиях сделок "воронки 2" создайте обработчик, который будет выполнять следующие действия:
   - Получить информацию о файле, который нужно переместить;
   - Сохранить этот файл на диске в указанную папку на сервере;
   - Обновить значение пользовательского поля типа "Файл" в сделке в "воронке 1", указав путь к новому файлу на сервере;
   - Удалить старый файл через 30 дней при помощи планировщика задач.

В качестве языка программирования и среды разработки можно использовать PHP и Bitrix API.

Пример кода обработчика события:
```php
<?
use Bitrix\Main\Context;
use Bitrix\Main\Loader;
use Bitrix\Main\IO\File;
use Bitrix\Crm\DealTable;

// автозагрузка классов Битрикс
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

// проверка доступа к файлу
if (!Loader::includeModule("crm") || !Loader::includeModule("main"))
{
    die();
}

// получение информации о файле из сделки в "воронке 2"
$fileId = 123; // идентификатор файла
$dealId = 456; // идентификатор сделки в "воронке 2"
$file = \CFile::GetByID($fileId)->Fetch();

// перемещение файла на диск
$date = date('Y_m_d_H_i_s');
$newFilePath = '/upload/deal_files_'.$date.'_'.$file['ORIGINAL_NAME'];
File::moveFile($file['SRC'], $_SERVER['DOCUMENT_ROOT'].$newFilePath);

// обновление значения поля типа "Файл" в сделке в "воронке 1"
$newFileId = \CFile::MakeFileArray($_SERVER['DOCUMENT_ROOT'].$newFilePath);
DealTable::update($dealId, array(
    'UF_FILE' => $newFilePath
));

// задание задачи на удаление старого файла через 30 дней
\CAgent::AddAgent("deleteFile(".$fileId.")", "main", "N", 86400*30, '', "Y");

function deleteFile($fileId)
{
    // удаление файла
    \CFile::delete($fileId);
}
```
Обратите внимание, что приведенный код является примером и может потребовать доработки под конкретные требования вашей системы.
Сформулированные советы:
1. Сохраняйте файлы сделки в заранее подготовленное поле, чтобы упростить процесс.
2. При запуске робота для выполнения бизнес-процесса над сделкой в воронке1, укажите параметр ID.
3. Не сохраняйте файлы на диск и затем не удаляйте их, так как это дополнительная и ненужная работа.
Похожие вопросы