Налаштування автоматичної генерації звітів 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування автоматичної генерації звітів 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування автоматичної генерації звітів 1С-Бітрікс

Ручне вивантаження звітів — втрата часу та джерело помилок. Автоматична генерація вирішує це через агентів Бітрікс і відправку за розкладом. Завдання — налаштувати цикл: дані → файл → доставка одержувачу.

Агенти Бітрікс як основа автоматизації

Агент (b_agent) — функція PHP, яку Бітрікс викликає за розкладом через механізм CAgent. Запуск відбувається при HTTP-запитах до сайту (за замовчуванням) або через cron (/bitrix/modules/main/include/cron_events.php).

Налаштування cron замість HTTP-тригера — обов'язково для production:

# /etc/cron.d/bitrix
*/5 * * * * www-data /usr/bin/php /var/www/site/bitrix/modules/main/include/cron_events.php > /dev/null 2>&1

Створення агента програмно:

\CAgent::AddAgent(
    'GenerateDailyReports();',  // Назва функції
    'local',                     // Модуль
    'N',                         // Періодичний
    86400,                       // Інтервал у секундах (раз на добу)
    '',                          // Дата першого запуску (порожньо = одразу)
    'Y',                         // Активний
    date('d.m.Y H:i:s', mktime(8, 0, 0)), // Час наступного запуску (8:00)
    30                           // Сортування
);

Шаблон агента генерації звітів

function GenerateDailyReports(): string
{
    $reports = [
        [
            'type'      => 'orders',
            'filename'  => 'orders_' . date('Y-m-d') . '.xlsx',
            'params'    => ['date_from' => date('Y-m-d', strtotime('-1 day')), 'status' => null],
            'recipient' => '[email protected]',
        ],
        [
            'type'      => 'low_stock',
            'filename'  => 'stock_' . date('Y-m-d') . '.xlsx',
            'params'    => ['threshold' => 5],
            'recipient' => '[email protected]',
        ],
    ];

    foreach ($reports as $reportConfig) {
        try {
            $generator = ReportGeneratorFactory::create($reportConfig['type']);
            $filePath  = $generator->generate($reportConfig['params']);

            $savedName = '/upload/reports/' . $reportConfig['filename'];
            rename($filePath, $_SERVER['DOCUMENT_ROOT'] . $savedName);

            sendReportEmail($reportConfig['recipient'], $savedName, $reportConfig['filename']);

            \Bitrix\Main\Diag\Debug::writeToFile(
                date('Y-m-d H:i:s') . ' Report generated: ' . $reportConfig['filename'],
                '',
                '/local/logs/reports.log'
            );
        } catch (\Throwable $e) {
            \Bitrix\Main\Diag\Debug::writeToFile(
                date('Y-m-d H:i:s') . ' ERROR: ' . $e->getMessage(),
                '',
                '/local/logs/reports_errors.log'
            );
        }
    }

    return 'GenerateDailyReports();';
}

Відправка звітів електронною поштою

Звіт надсилається через поштову подію Бітрікс з вкладенням:

function sendReportEmail(string $to, string $filePath, string $fileName): void
{
    $absolutePath = $_SERVER['DOCUMENT_ROOT'] . $filePath;

    // Прикріплюємо файл через CFile і поштову подію
    $event = new \Bitrix\Main\Mail\Event();
    $fields = [
        'TO'      => $to,
        'SUBJECT' => 'Авто-звіт: ' . $fileName . ' від ' . date('d.m.Y'),
        'BODY'    => 'Звіт сформовано автоматично. Файл у вкладенні.',
    ];

    // Альтернатива — відправка через PHPMailer напряму з вкладенням
    $mail = new \PHPMailer\PHPMailer\PHPMailer(true);
    $mail->CharSet = 'UTF-8';
    $mail->setFrom('[email protected]', 'Система звітів');
    $mail->addAddress($to);
    $mail->Subject = $fields['SUBJECT'];
    $mail->Body    = $fields['BODY'];
    $mail->addAttachment($absolutePath, $fileName);
    $mail->send();
}

Зберігання та доступ до архіву звітів

Згенеровані файли зберігаються в /upload/reports/ зі збереженням історії за 30 днів. Очищення старих файлів — окремий агент:

function CleanOldReports(): string
{
    $dir = $_SERVER['DOCUMENT_ROOT'] . '/upload/reports/';
    foreach (glob($dir . '*.xlsx') as $file) {
        if (filemtime($file) < time() - 30 * 86400) {
            unlink($file);
        }
    }
    return 'CleanOldReports();';
}

Сторінка архіву в особистому кабінеті менеджера — список файлів з датою та посиланням для завантаження, з перевіркою прав доступу.

Терміни

Конфігурація Термін
1 агент + 1 тип звіту + email 1 день
3–5 звітів з різними розкладами 2–4 дні
Архів звітів + UI в особистому кабінеті + сповіщення 4–6 днів