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