Как настроить запрет закрытия задачи в Битрикс24, если есть невыполненные подзадачи?

Как я могу настроить Git "fedoseevvadim/bitrix24" для предотвращения закрытия задач, имеющих незавершенные подзадачи, в моей коробочной версии Битрикса? Я пошел по инструкции, но не могу добиться нужных результатов. Можете ли вы подсказать, какие шаги нужно предпринять или что нужно настроить в файлах, чтобы функция работала правильно?
  • 18 марта 2024 г. 2:49
Ответы на вопрос 2
Для того чтобы настроить запрет закрытия задачи в Битрикс24, если есть невыполненные подзадачи, необходимо внести следующие изменения:

1. Откройте файл /local/php_interface/init.php и добавьте следующий код:

```php
AddEventHandler("tasks", "OnBeforeTaskClose", "OnBeforeTaskCloseHandler");

function OnBeforeTaskCloseHandler($ID)
{
    $task = \Bitrix\Tasks\TaskTable::getById($ID)->fetch();
    $subtasks = \Bitrix\Tasks\Internals\TaskTable::getList(array(
        'filter' => array(
            'PARENT_ID' => $ID
        )
    ))->fetch();

    if (!empty($subtasks)) {
        foreach ($subtasks as $subtask) {
            if ($subtask['STATUS'] != 5) { // 5 - код статуса "Выполнено"
                global $APPLICATION;
                $APPLICATION->ThrowException("Задача не может быть закрыта, пока есть невыполненные подзадачи.");
                return false;
            }
        }
    }
}
```

2. Сохраните файл и перезапустите сервер.

После внесения указанных изменений, задача не сможет быть закрыта, пока у нее есть невыполненные подзадачи.
Этот пример вам не подойдет.  В нем иллюстрируется добавление пункта меню в сделки. <br/> Файл init.php создается вручную в папке `/local/php_interface/`. Но прежде чем делать это, почитайте про него в <a href="https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&amp;LESSON_ID=2916&amp;LESSON_PATH=3913.4776.2916" rel="nofollow">курсе</a> <br/> Бездумное использование этого файла может приводить к падению сайта в любом месте. <br/> В вашем случае алгоритм действий такой: <br/> 1. Создать init.php <br/> 2. Чтобы его не засорять, в нем подключить файл, обрабатывающий <a href="https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&amp;CHAPTER_ID=03493&amp;LESSON_PATH=3913.3516.3493" rel="nofollow">события</a> . <br/> 3. Вам нужны <a href="https://dev.1c-bitrix.ru/api_help/tasks/events/index.php" rel="nofollow">события задач</a> <br/> Пример подключения обработчика события(это не готовый пример для вас, его нужно изменить под себя): <br/> <pre><code class="php">\Bitrix\Main\EventManager::getInstance()-&gt;RegisterEventHandler(
    'tasks',
    'OnBeforeTaskUpdate',
    $this-&gt;MODULE_ID,
    '\MyCompany\Handlers\CTask',
    'OnBeforeTaskUpdate',
    "1"
);</code></pre> <br/> Подробнее про 'RegisterEventHandler' <a href="https://dev.1c-bitrix.ru/api_d7/bitrix/main/EventManager/index.php" rel="nofollow">тут</a> <br/> 4. В этом обработчике вам нужно определять, является ли задача родительской. Если да, то запрашивать ее дочерние задачи и смотреть, если ли среди них открытые. Если да, то отменять событие закрытия задачи. <br/> Список задач можно получить <a href="https://dev.1c-bitrix.ru/api_help/tasks/classes/ctasks/getlist.php" rel="nofollow">так</a>
Похожие вопросы