В практике разработки на платформе 1С часто возникает задача визуализации оперативной деятельности персонала. Типичный сценарий: руководитель хочет видеть интерактивную таблицу, где по строкам расположены сотрудники, по колонкам — часы рабочего дня, а в ячейках отмечено, какой именно работой был занят человек. Рассмотрим, как реализовать такую функциональность на обычных формах (ОФ), используя стандартные объекты платформы.
Прежде чем приступать к рисованию интерфейса, разберем, как эффективно хранить информацию. Нам необходимо фиксировать событие (что делал), субъекта (кто делал) и время (когда и как долго). Для этого идеально подходит РегистрСведений.
Проанализируем два подхода к организации регистра:
Сотрудник, Дата.ВремяНачала, ВремяОкончания, ВидРаботы, Комментарий.Рассмотрим пример кода для записи данных в такой регистр:
МенеджерЗаписи = РегистрыСведений.ЗанятостьСотрудников.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Сотрудник = ВыбранныйСотрудник;
МенеджерЗаписи.Дата = НачалоДня(ТекущаяДата());
МенеджерЗаписи.ВремяНачала = ТекущаяДата();
МенеджерЗаписи.ВремяОкончания = ТекущаяДата() + 3600; // Добавляем 1 час
МенеджерЗаписи.ВидРаботы = Справочники.ВидыРабот.Разгрузка;
МенеджерЗаписи.Записать();
Хотя платформа предлагает объект ДиаграммаГанта, опытные разработчики для обычных форм рекомендуют использовать ТабличныйДокумент. Он позволяет добиться максимального сходства с интерфейсами в стиле Excel и дает полный контроль над оформлением каждой ячейки.
Разберем по шагам процесс построения такого отчета:
Шаг 1. Формирование сетки. Проанализируем рабочий график организации. Если компания работает с 08:00 до 20:00, нам достаточно вывести 12 колонок. Первой колонкой выводим ФИО сотрудника. Для фиксации заголовков при прокрутке используем свойство ФиксацияСверху и ФиксацияСлева.
Шаг 2. Заполнение данными. Мы делаем запрос к нашему регистру сведений за выбранный день. Пройдемся в цикле по сотрудникам (строки) и по часам (колонки). Если интервал работы сотрудника пересекается с конкретным часом, мы раскрашиваем ячейку.
Пример алгоритма раскраски:
Для Каждого СтрокаСотрудник Из СписокСотрудников Цикл
ТекущаяСтрока = ТабДок.Вывести(ОбластьСтрока);
Для Час = 8 По 19 Цикл
ТекущаяЯчейка = ТекущаяСтрока.Область(1, Час - 6); // Смещение индекса колонки
Если СотрудникЗанятВЭтотЧас(СтрокаСотрудник.Ссылка, Час) Тогда
ТекущаяЯчейка.ЦветФона = ЦветаСтиля.ЭлементСпискаВыбранный;
ТекущаяЯчейка.Текст = "Работа";
ТекущаяЯчейка.ПараметрРасшифровки = ДанныеЗаписи;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Чтобы система была не просто картинкой, а инструментом управления, реализуем реакцию на действия пользователя. В свойствах табличного документа включим ТолькоПросмотр = Истина, но оставим доступной расшифровку.
Проанализируем событие Выбор (двойной клик) в табличном документе. Если пользователь кликает по закрашенной ячейке, мы можем получить ПараметрРасшифровки и открыть форму записи регистра или документа-основания. Если клик по пустой ячейке — открываем форму создания новой записи, где Сотрудник и Время уже заполнены на основании координат ячейки.
Если требуется отображать длительные процессы, которые длятся несколько дней, стоит рассмотреть объект ДиаграммаГанта. Рассмотрим ее особенности:
Для настройки диаграммы Ганта в коде используется следующий подход:
ЭлементГанта = ДиаграммаГанта.УстановитьЗначение(Сотрудник, Задача);
Интервал = ЭлементГанта.Добавить();
Интервал.Начало = ДатаНачала;
Интервал.Конец = ДатаОкончания;
Интервал.Текст = "Описание работы";
Выясним причину, почему иногда стандартных средств 1С недостаточно. Если заказчику нужна современная анимация или Drag-and-Drop (перетаскивание задачи от одного сотрудника другому мышкой), стандартный ТабличныйДокумент на обычных формах с этим не справится. В этом случае мы можем использовать элемент формы ПолеHTMLДокумента.
В этом сценарии 1С выступает как "бэкенд", подготавливая данные в формате JSON, а визуализация происходит с помощью JavaScript-библиотек (например, простых CSS-Grid систем). Это решение требует знаний веб-технологий, но позволяет создать максимально эргономичный интерфейс.
При большом количестве сотрудников (более 100) формирование таблицы может замедлиться. Рассмотрим способы ускорения:
Подводя итог, можно сказать, что связка Регистр сведений + Табличный документ является "золотым стандартом" для подобных задач на обычных формах 1С 8.3. Она сочетает в себе простоту реализации, высокую производительность и привычный для пользователей интерфейс.