Как правильно добавить колонки в планировщик 1С и заполнить его данными?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с объектом Планировщик в 1С часто требует программного формирования колонок (измерений), например, для отображения списка сотрудников или рабочих мест. Рассмотрим, как правильно реализовать эту задачу, избежав типичных ошибок новичков, и разберем способы добавления «пустых» колонок.

Анализ ошибки «Недопустимое значение параметра»

Проанализируем ситуацию: при вызове метода Измерение.Элементы.Добавить(Значение) платформа ожидает уникальное значение, тип которого должен соответствовать назначению измерения. Основная причина возникновения ошибки заключается в попытке передать в метод некорректный тип данных или дублирующееся значение (выявить такие проблемы поможет инструмент для анализа на наличие ошибок). Если планировщик уже инициализирован ссылками на справочник, попытка добавить туда строку или пустую конструкцию другого типа вызовет отказ системы.

Реализация заполнения планировщика через запрос

Рассмотрим наиболее правильный и производительный способ заполнения колонок. Вместо перебора справочника методом Выбрать(), мы будем использовать запрос. Это позволит нам сразу получить необходимые данные (например, ФИО и должность) и избежать лишних обращений к базе данных внутри цикла, используя инструмент для автоматического редактирования модулей.

Разберем по шагам корректный код для формирования измерений:


&НаСервере
Процедура СоздатьИзмеренияПланировщикаНаСервере()
    // Сначала очистим старые измерения, если это необходимо
    Планировщик.Измерения.Очистить();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |	Сотрудники.Ссылка КАК Ссылка,
    |	Сотрудники.Наименование КАК ФИО,
    |	Сотрудники.Должность КАК Должность
    |ИЗ
    |	Справочник.Сотрудники КАК Сотрудники";
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    // Добавляем измерение "Сотрудник"
    Измерение = Планировщик.Измерения.Добавить("Сотрудник"); 
    
    Пока Выборка.Следующий() Цикл
        // Добавляем элемент измерения, используя ссылку как уникальный идентификатор
        НовоеЗначение = Измерение.Элементы.Добавить(Выборка.Ссылка);
        
        // Формируем текст заголовка колонки
        НовоеЗначение.Текст = Выборка.ФИО + Символы.ПС + Выборка.Должность;
        
        // Настраиваем визуальное оформление
        НовоеЗначение.ЦветРамки = WebЦвета.ГолубойСоСтальнымОттенком; 	
    КонецЦикла;	
КонецПроцедуры

Добавление пустых колонок

Выясним, как добавить дополнительные «пустые» колонки, если сотрудников меньше, чем заданное количество мест в расписании. Важно понимать: метод Добавить() требует уникальный первый параметр. Мы не можем просто передать строку "Пусто" несколько раз.

Проанализируем возможные решения для создания пустых колонок:

  1. Использование уникальных ключей: Если нужно добавить 5 пустых колонок, можно использовать уникальные строковые идентификаторы, например, "Пусто_1", "Пусто_2" и так далее.
  2. Типизация: Убедитесь, что тип измерения в настройках планировщика позволяет хранить и ссылки, и строки (составной тип), иначе при попытке добавить строку вместо ссылки возникнет ошибка.
  3. Специальные элементы: В некоторых случаях удобнее создать в справочнике «Сотрудники» предопределенный элемент «Резерв» и добавлять его.

Оптимизация работы интерфейса

Посмотрим на важный нюанс: при программном изменении большого количества элементов планировщика форма может начать «мигать», а производительность — упасть. Чтобы этого избежать, используем методы управления обновлением:


// Отключаем обновление перед циклом
Планировщик.УстановитьОбновление(Ложь);

// ... здесь ваш цикл добавления колонок ...

// Включаем обновление обратно
Планировщик.УстановитьОбновление(Истина);

Обработка событий в пустых колонках

Выясним причину, по которой важно контролировать работу с пустыми колонками. Если пользователь кликнет по колонке «Пусто», чтобы создать запись, стандартная логика может не найти сотрудника. В обработчике события ПриНачалеРедактирования или ПередСозданием обязательно добавим проверку: если значение измерения не является ссылкой на справочник, необходимо прервать операцию или вызвать диалог выбора реального сотрудника.

Таким образом, мы обеспечим стабильную работу планировщика и корректное отображение структуры расписания даже при отсутствии данных в информационной базе.

← На главную