Получить отчет о выявленных отсутствиях timeman.timecontrol.reports.get

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Scope: timeman

Кто может выполнять метод: любой пользователь с правом просмотра отчетов

Метод timeman.timecontrol.reports.get получает отчет о выявленных отсутствиях.

Параметры метода

Обязательные параметры отмечены *

Название
тип

Описание

USER_ID*
integer

Идентификатор пользователя, для которого запрашиваются отчеты.

Получить идентификатор пользователя можно методом user.get

MONTH*
integer

Номер месяца

YEAR*
integer

Год

IDLE_MINUTES
integer

Максимальное время отсутствия на рабочем месте, которое не учитывается как отсутствие.

Параметр доступен руководителю и администратору.

Если не указывать, используется время из настроек модуля

WORKDAY_HOURS
integer

Продолжительность рабочего дня в часах.

По умолчанию — 8 часов

Примеры кода

Как использовать примеры в документации

curl -X POST \
        -H "Content-Type: application/json" \
        -H "Accept: application/json" \
        -d '{"USER_ID":3,"MONTH":5,"YEAR":2025,"IDLE_MINUTES":15,"WORKDAY_HOURS":8}' \
        https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/timeman.timecontrol.reports.get
        
curl -X POST \
        -H "Content-Type: application/json" \
        -H "Accept: application/json" \
        -d '{"USER_ID":3,"MONTH":5,"YEAR":2025,"IDLE_MINUTES":15,"WORKDAY_HOURS":8,"auth":"**put_access_token_here**"}' \
        https://**put_your_bitrix24_address**/rest/timeman.timecontrol.reports.get
        
// This snippet is an ES module: top-level await requires type="module" or a bundler.
        // $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
        import { Text } from '@bitrix24/b24jssdk'
        import type { B24Frame, ISODate } from '@bitrix24/b24jssdk'
        
        declare const $b24: B24Frame
        
        // Shape of the payload returned in result (match the "response handling" section of the page)
        type TimecontrolReportResult = {
          report: {
            month_title: string
            date_start: ISODate
            date_finish: ISODate
            days: {
              index: string
              day_title: string
              workday_date_start: ISODate
              workday_date_finish: ISODate
              workday_complete: boolean
              workday_time_leaks_user: number
              workday_time_leaks_final: number
              workday_duration: number
              workday_duration_final: number
              workday_duration_config: number
              reports: {
                id: string
                user_id: string
                type: string
                date_start: ISODate
                date_finish: ISODate
                duration: number
                active: boolean
                entry_id: string
                report_type: string
                report_text: string
                system_text: string | null
                source_start: string
                source_finish: string
                ip_start: string
                ip_finish: string
                ip_start_network: boolean | object
                ip_finish_network: boolean | object
              }[]
              workday_time_leaks_real: number
            }[]
          }
          user: {
            id: number
            active: boolean
            name: string
            first_name: string
            last_name: string
            work_position: string
            avatar: string
            personal_gender: string
            last_activity_date: ISODate
          }
        }
        
        try {
          const response = await $b24.actions.v2.call.make<TimecontrolReportResult>({
            method: 'timeman.timecontrol.reports.get',
            params: {
              USER_ID: 3,
              MONTH: 5,
              YEAR: 2025,
              IDLE_MINUTES: 15,
              WORKDAY_HOURS: 8,
            },
            requestId: Text.getUuidRfc4122()
          })
        
          // The payload is available only on a successful response
          if (!response.isSuccess) {
            console.error(response.getErrorMessages().join('; '))
          } else {
            const result = response.getData()!.result
            console.info(result.report.month_title, result.report.days.length, result.user.name)
          }
        } catch (error) {
          // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
          console.error(error)
        }
        
<!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
        <script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
        <script>
          async function getTimecontrolReport() {
            try {
              // Initialize the SDK inside a Bitrix24 frame
              const $b24 = await B24Js.initializeB24Frame()
        
              const response = await $b24.actions.v2.call.make({
                method: 'timeman.timecontrol.reports.get',
                params: {
                  USER_ID: 3,
                  MONTH: 5,
                  YEAR: 2025,
                  IDLE_MINUTES: 15,
                  WORKDAY_HOURS: 8,
                },
                requestId: B24Js.Text.getUuidRfc4122()
              })
        
              // The payload is available only on a successful response
              if (!response.isSuccess) {
                console.error(response.getErrorMessages().join('; '))
                return
              }
        
              const result = response.getData().result
              console.info(result.report.month_title, result.report.days.length, result.user.name)
            } catch (error) {
              // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
              console.error(error)
            }
          }
        
          document.addEventListener('DOMContentLoaded', getTimecontrolReport)
        </script>
        
try {
            $response = $b24Service
                ->core
                ->call(
                    'timeman.timecontrol.reports.get',
                    [
                        'USER_ID'       => 3,
                        'MONTH'         => 5,
                        'YEAR'          => 2025,
                        'IDLE_MINUTES'  => 15,
                        'WORKDAY_HOURS' => 8
                    ]
                );
        
            $result = $response
                ->getResponseData()
                ->getResult();
        
            echo 'Success: ' . print_r($result, true);
            echo 'Info: ' . print_r($result, true);
        
        } catch (Throwable $e) {
            error_log($e->getMessage());
            echo 'Error getting time control reports: ' . $e->getMessage();
        }
        
BX24.callMethod(
            'timeman.timecontrol.reports.get',
            {
                'USER_ID': 3,
                'MONTH': 5,
                'YEAR': 2025,
                'IDLE_MINUTES': 15,
                'WORKDAY_HOURS': 8
            },
            function(result) {
                if (result.error()) {
                    console.error(result.error());
                } else {
                    console.info(result.data());
                }
            }
        );
        
require_once('crest.php');
        
        $result = CRest::call(
            'timeman.timecontrol.reports.get',
            [
                'USER_ID' => 3,
                'MONTH' => 5,
                'YEAR' => 2025,
                'IDLE_MINUTES' => 15,
                'WORKDAY_HOURS' => 8
            ]
        );
        
        echo '<PRE>';
        print_r($result);
        echo '</PRE>';
        
// client и ctx уже созданы — см. раздел «SDK для Go»
        res, err := client.Core().Call(ctx, "timeman.timecontrol.reports.get", b24.Params{
        	"USER_ID":       3,
        	"MONTH":         5,
        	"YEAR":          2025,
        	"IDLE_MINUTES":  15,
        	"WORKDAY_HOURS": 8,
        }, b24.WithIdempotent())
        if err != nil {
        	return fmt.Errorf("timeman.timecontrol.reports.get: %w", err)
        }
        
        // Ответ приходит как json.RawMessage — разберите его
        // в структуру под форму ответа, показанную ниже на этой странице.
        fmt.Printf("%s\n", res.Result)
        

Обработка ответа

HTTP-статус: 200

{
            "result": {
                "report": {
                    "month_title": "Май",
                    "date_start": "2025-05-01T00:00:00+03:00",
                    "date_finish": "2025-05-31T23:59:59+03:00",
                    "days": [
                        {
                            "index": "20250526",
                            "day_title": "26.05.2025",
                            "workday_date_start": "2025-05-26T14:44:47+03:00",
                            "workday_date_finish": "2025-05-26T14:45:29+03:00",
                            "workday_complete": true,
                            "workday_time_leaks_user": 0,
                            "workday_time_leaks_final": 28758,
                            "workday_duration": 42,
                            "workday_duration_final": 42,
                            "workday_duration_config": 28800,
                            "reports": [
                                {
                                    "id": "27",
                                    "user_id": "503",
                                    "type": "TM_START",
                                    "date_start": "2025-05-26T14:44:47+03:00",
                                    "date_finish": "2025-05-26T14:44:47+03:00",
                                    "duration": 0,
                                    "active": false,
                                    "entry_id": "2237",
                                    "report_type": "WORK",
                                    "report_text": "Работал над проектом",
                                    "system_text": null,
                                    "source_start": "TM_EVENT",
                                    "source_finish": "TM_EVENT",
                                    "ip_start": "83.219.151.30",
                                    "ip_finish": "83.219.151.30",
                                    "ip_start_network": false,
                                    "ip_finish_network": false
                                },
                                {
                                    "id": "29",
                                    ...
                                }
                            ],
                            "workday_time_leaks_real": 0
                        }
                    ]
                },
                "user": {
                    "id": 3,
                    "active": true,
                    "name": "Мария Ившина",
                    "first_name": "Мария",
                    "last_name": "Ившина",
                    "work_position": "IT-специалист",
                    "avatar": "http://test.bitrix24.com/upload/resize_cache/45749/7acf4ca766af5d8/main/c89/c89c6b73470635c/4R5A1256.png",
                    "personal_gender": "F",
                    "last_activity_date": "2025-05-29T17:15:56+03:00"
                },
                "time": {
                    "start": 1748528193.688745,
                    "finish": 1748528193.730104,
                    "duration": 0.04135894775390625,
                    "processing": 0.014277935028076172,
                    "date_start": "2025-05-29T17:16:33+03:00",
                    "date_finish": "2025-05-29T17:16:33+03:00",
                    "operating_reset_at": 1748528793,
                    "operating": 0
                }
            }
        }
        

Если в ответе пустой days

Если метод возвращает пустой массив days, настройте инструмент контроля времени.

  1. Выполните под администратором метод timeman.timecontrol.settings.set с параметрами:

    BX24.callMethod(
                'timeman.timecontrol.settings.set',
                {
                    active: true,
                    REPORT_SIMPLE_TYPE: 'all',
                    REPORT_FULL_TYPE: 'all',
                    report_request_type: 'user',
                    report_request_users: 3,
                },
                function(result){
                    if(result.error())
                    {
                        console.error(result.error().ex);
                    }
                    else
                    {
                        console.log(result.data());
                    }
                }
            );
            
  2. Откройте или закройте рабочий день пользователя.

  3. Выполните метод timeman.timecontrol.reports.get. В ответе появятся данные в days.

Возвращаемые данные

Название
тип

Описание

result
object

Корневой элемент ответа

report
object

Информация об отчете

month_title
string

Название месяца

date_start
datetime

Дата начала периода выборки в формате ATOM

date_finish
datetime

Дата окончания периода выборки в формате ATOM

days
array

Список объектов с описанием отработанных дней

user
object

Объект с информацией о пользователе

time
time

Информация о времени выполнения запроса

Объекты days

Название
тип

Описание

index
integer

Индекс дня недели формате ГГГГММДД, например, 20250526 для 26 мая 2025 года

day_title
string

Дата в формате сайта

workday_date_start
datetime

Дата начала рабочего дня в формате ATOM

workday_date_finish
datetime

Дата окончания рабочего дня в формате ATOM.

Если workday_complete = false, указывается дата на момент формирования отчета

workday_complete
boolean

Рабочий день завершен

workday_time_leaks_user
integer

Продолжительность перерыва в секундах

workday_time_leaks_final
integer

Продолжительность времени в секундах, которое пользователь недоработал или переработал.

  • Положительное число — количество не доработанного времени в секундах
  • Отрицательное число — количество времени, отработанного сверх положенного времени, то есть переработка

workday_duration
integer

Продолжительность рабочего дня по табелю в секундах, с учетом перерыва

workday_duration_final
integer

Продолжительность рабочего дня по фактической выработке в секундах. Учитываются:

  • перерыв
  • не подтвержденные отсутствия
  • отсутствия по личным делам

workday_duration_config
integer

Необходимая продолжительность рабочего дня в секундах

reports
array

Список объектов с записями выявленных отсутствий.

Значения выводятся в полной детализации отчета и для руководителя

workday_time_leaks_real
integer

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

Объекты reports

Название
тип

Описание

id
string

Идентификатор записи

user_id
string

Идентификатор пользователя

type
string

Тип записи. Возможные значения:

  • IDLE — отошел, фиксируется с помощью десктоп приложения
  • OFFLINE — офлайн
  • DESKTOP_ONLINE — запустил приложение. Только для руководителя
  • DESKTOP_OFFLINE — выключил приложение. Только для руководителя
  • DESKTOP_START — запустил приложение. Только для руководителя
  • TM_START — начал рабочий день
  • TM_PAUSE — ушел на перерыв
  • TM_CONTINUE — продолжил день
  • TM_END — завершил рабочий день

date_start
datetime

Дата начала фиксации в формате ATOM

date_finish
datetime

Дата окончания фиксации в формате ATOM.

Если active = true, поле содержит дату на момент формирования отчета

duration
integer

Длительность

active
boolean

Активность записи

entry_id
string

Идентификатор записи времени

report_type
string

Тип отсутствия. Возможные значения:

  • work — по рабочим вопросам
  • private — по личным делам
  • none — тип не задан, приравнивается к private

report_text
string

Описание причины отсутствия

system_text
string

Системное описание причины отсутствия. Только для руководителя

source_start
string

Поставщик данных начала записи. Возможные значения:

  • ONLINE_EVENT — событие авторизации пользователя
  • OFFLINE_AGENT — агент, который устанавливает статус Офлайн
  • DESKTOP_OFFLINE_AGENT — агент, который устанавливает признак выключенного приложения
  • DESKTOP_ONLINE_EVENT — событие, которое устанавливает признак включенного приложения
  • DESKTOP_START_EVENT — событие, которое устанавливает признак включенного приложения
  • IDLE_EVENT — событие изменения статуса Отошел. Фиксируется приложением
  • TM_EVENT — событие изменения рабочего дня: начало, перерыв, окончание

source_finish
string

Поставщик данных окончания записи. Возможные значения:

  • ONLINE_EVENT — событие авторизации пользователя
  • OFFLINE_AGENT — агент, который устанавливает статус Офлайн
  • DESKTOP_OFFLINE_AGENT — агент, который устанавливает признак выключенного приложения
  • DESKTOP_ONLINE_EVENT — событие, которое устанавливает признак включенного приложения
  • DESKTOP_START_EVENT — событие, которое устанавливает признак включенного приложения
  • IDLE_EVENT — событие изменения статуса Отошел. Фиксируется приложением
  • TM_EVENT — событие изменения рабочего дня: начало, перерыв, окончание

ip_start
string

IP-адрес на момент начала записи. Только для руководителя

ip_finish
string

IP-адрес на момент окончания записи. Только для руководителя

ip_start_network
boolean | object

Объект с расшифровкой IP-адреса для начала записи, если IP-адрес не входит в офисную сеть. Для офисной сети вернет false.

Только для руководителя

ip_finish_network
boolean | object

Объект с расшифровкой IP-адреса для окончания записи, если IP-адрес не входит в офисную сеть. Для офисной сети вернет false.

Только для руководителя

Объект ip_network

Название
тип

Описание

ip
string

IP-адрес

range
string

Диапазон, в который входит указанный IP-адрес

name
string

Название диапазона, в который входит указанный IP-адрес

Объект user

Название
тип

Описание

id
integer

Идентификатор пользователя

active
boolean

Активность

name
string

Имя и фамилия пользователя

first_name
string

Имя пользователя

last_name
string

Фамилия пользователя

work_position
string

Должность

avatar
string

URL аватара пользователя.

Если значение пустое, у пользователя нет аватара

personal_gender
string

Пол пользователя

last_activity_date
datetime

Дата последнего действия пользователя в формате ATOM

Обработка ошибок

HTTP-статус: 400

{
            "error": "USER_ACCESS_ERROR",
            "error_description": "You don't have access to report for this user"
        }
        

Название
тип

Описание

error
string

Строковый код ошибки. Может состоять из цифр, латинских букв и знака подчеркивания

error_description
error_description

Текстовое описание ошибки. Описание не предназначено для показа конечному пользователю в необработанном виде

Возможные коды ошибок

Код

Описание

Значение

ACCESS_ERROR

You don't have access to this method

У вас нет доступа к этому методу

USER_ACCESS_ERROR

You don't have access to report for this user

У вас нет доступа к отчетам этого пользователя

Статусы и коды системных ошибок

HTTP-статус: 20x, 40x, 50x

Описанные ниже ошибки могут возникнуть при вызове любого метода

Статус

Код
Текст ошибки

Описание

500

INTERNAL_SERVER_ERROR
Internal server error

Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24

500

ERROR_UNEXPECTED_ANSWER
Server returned an unexpected response

Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24

503

QUERY_LIMIT_EXCEEDED
Too many requests

Превышен лимит на интенсивность запросов

429

OPERATION_TIME_LIMIT
Method is blocked due to operation time limit

Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически через 10 минут

405

ERROR_BATCH_METHOD_NOT_ALLOWED
Method is not allowed for batch usage

Текущий метод не разрешен для вызова с помощью batch

400

ERROR_BATCH_LENGTH_EXCEEDED
Max batch length exceeded

Превышена максимальная длина параметров, переданных в метод batch

401

NO_AUTH_FOUND
Wrong authorization data

Неверный access-токен или код вебхука

400

INVALID_REQUEST
Https required

Для вызовов методов требуется использовать протокол HTTPS

503

OVERLOAD_LIMIT
REST API is blocked due to overload

REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка, для снятия необходимо обращаться в техническую поддержку Битрикс24

403

ACCESS_DENIED
REST API is available only on commercial plans

REST API доступен только на коммерческих планах

403

INVALID_CREDENTIALS
Invalid request credentials

У пользователя, с чьим access-токеном или вебхуком был вызван метод, не хватает прав

404

ERROR_MANIFEST_IS_NOT_AVAILABLE
Manifest is not available

Манифест недоступен

403

insufficient_scope
The request requires higher privileges than provided by the webhook token

Запрос требует более высоких привилегий, чем предоставляет токен вебхука

401

expired_token
The access token provided has expired

Предоставленный access-токен доступа истек

403

user_access_error
The user does not have access to the application

Пользователь не имеет доступа к приложению. Это означает, что приложение установлено, но администратор портала разрешил доступ к этому приложению только конкретным пользователям

500

PORTAL_DELETED
Portal was deleted

Публичная часть сайта закрыта. Чтобы открыть публичную часть сайта на коробочной установке отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта

Продолжите изучение