ЗначениеДиаграммыГанта.Идентификатор

Свойства · ID

Тип: ИдентификаторЗначенияДиаграммыГанта. Предназначено для идентификации значения диаграммы Ганта.

Полное описание, параметры и ограничения

ЗначениеДиаграммыГанта.Идентификатор (GanttChartValue.ID)

ЗначениеДиаграммыГанта (GanttChartValue)

Идентификатор (ID)

Доступен, начиная с версии 8.3.21.

Использование:
Только чтение.
Описание:
Тип: ИдентификаторЗначенияДиаграммыГанта.
Предназначено для идентификации значения диаграммы Ганта.
Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.21.

Методическая информация

Практические примеры

Выделить собственный интервал и прочитать выбор пользователя

Текущее значение и текущий интервал получают разные типы идентификаторов. Выделенные массивы только читаем и расшифровываем через методы своего графика.

Где и как запускать

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

Подготовка

  1. В учебной базе создайте новую внешнюю обработку УчебнаяДиаграммаГанта с пустой управляемой основной формой.

  2. Не добавляйте вручную реквизит УчебныйГрафик и поле ПолеГанта. В событиях формы свяжите ПриСозданииНаСервере с одноимённой процедурой.

  3. Весь код вставьте на уровне модуля, сохраните EPF и откройте в тонком клиенте Windows. Каждый урок запускайте в отдельной копии формы.

  4. Две вымышленные задачи 14–16 сентября 2026 года создаются только в памяти. Рабочие заказы, расписания и печать не используются.

  5. Это полная управляемая форма, не код общего модуля. Вставьте один урок целиком и назначьте обработчик ПриСозданииНаСервере в событиях новой формы.

  6. Данные создаются заново при открытии формы: подготовка в плане 09:00–12:00, в факте 09:00–13:00. Это 3 и 4 календарных часа, отклонение 1 час.

  7. Размеры и начальные настройки элемента задаются на сервере при создании. Кнопка учебной команды проверяет состояние на клиенте; никакие рабочие расписания не изменяются.

  8. График как значение и ПолеГанта как элемент формы — разные объекты. Масштаб данных настраивается у графика, размеры и текущее выделение — у поля.

  9. Запуск и внешний вид в 1С не проверялись. Автоматические проверки исходников не заменяют открытие EPF и ручной осмотр в вашем клиенте.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    Новые.Добавить(Новый РеквизитФормы("УчебныйГрафик", Новый ОписаниеТипов("ДиаграммаГанта")));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    График = Новый ДиаграммаГанта;
    График.Обновление = Ложь;
    График.АвтоОпределениеПолногоИнтервала = Ложь;
    График.УстановитьПолныйИнтервал(Дата(2026, 9, 14, 9), Дата(2026, 9, 16, 18));
    График.АвтоУстановкаТекстаСерий = Ложь;
    График.АвтоУстановкаТекстаТочек = Ложь;
    График.ОтображатьПустыеЗначения = Ложь;
    График.ОтображениеТекстаИнтервала = ОтображениеТекстаИнтервалаДиаграммыГанта.Отображать;
    График.ПрозрачныйФон = Ложь;
    График.ЦветФона = Новый Цвет(255, 255, 255);
    График.Окантовка = Истина;
    План = График.УстановитьСерию("plan");
    План.Текст = "Учебный план";
    План.Цвет = Новый Цвет(80, 145, 210);
    План.ПриоритетЦвета = Истина;
    Факт = График.УстановитьСерию("actual");
    Факт.Текст = "Учебный факт";
    Факт.Цвет = Новый Цвет(95, 165, 95);
    Факт.ПриоритетЦвета = Истина;
    Подготовка = График.УстановитьТочку("prepare");
    Подготовка.Текст = "Подготовка учебного комплекта";
    Сборка = График.УстановитьТочку("assemble");
    Сборка.Текст = "Сборка учебного комплекта";
    ПланПодготовки = График.ПолучитьЗначение(Подготовка, План);
    ПланПодготовки.Текст = "План подготовки";
    ПланПодготовки.Редактирование = Ложь;
    Первый = ПланПодготовки.Добавить();
    Первый.Начало = Дата(2026, 9, 14, 9);
    Первый.Конец = Дата(2026, 9, 14, 12);
    Первый.Текст = "Подготовка: 3 часа";
    Первый.Расшифровка = "training-prepare-plan";
    ПланСборки = График.ПолучитьЗначение(Сборка, План);
    ПланСборки.Текст = "План сборки";
    ПланСборки.Редактирование = Ложь;
    Второй = ПланСборки.Добавить();
    Второй.Начало = Дата(2026, 9, 14, 13);
    Второй.Конец = Дата(2026, 9, 15, 11);
    Второй.Текст = "Сборка учебного комплекта";
    Второй.Расшифровка = "training-assemble-plan";
    ФактПодготовки = График.ПолучитьЗначение(Подготовка, Факт);
    ФактПодготовки.Редактирование = Ложь;
    Фактический = ФактПодготовки.Добавить();
    Фактический.Начало = Дата(2026, 9, 14, 9);
    Фактический.Конец = Дата(2026, 9, 14, 13);
    Фактический.Текст = "Учебный факт: 4 часа";
    Заголовок = График.ОбластьЗаголовка;
    Заголовок.Текст = "Учебный план и факт — 14–16.09.2026";
    Область = График.ОбластьПостроения;
    Область.Заголовок = "Учебные задачи";
    Область.ОтображатьТекстТочек = ОтображениеВДиаграммеГанта.Отображать;
    Шкала = Область.ШкалаВремени;
    Пока Шкала.Элементы.Количество() > 0 Цикл
        Шкала.Элементы.Удалить(Шкала.Элементы.Получить(0));
    КонецЦикла;
    Дни = Шкала.Элементы.Добавить();
    Дни.Единица = ТипЕдиницыШкалыВремени.День;
    Дни.Кратность = 1;
    Дни.Формат = "ДФ=dd.MM";


    График.Обновление = Истина;
    ЭтаФорма.УчебныйГрафик = График;
    Поле = Элементы.Добавить("ПолеГанта", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеДиаграммыГанта;
    Поле.ПутьКДанным = "УчебныйГрафик";
    Поле.РастягиватьПоГоризонтали = Истина;
    Поле.РастягиватьПоВертикали = Истина;
    Поле.РежимВыделенияЗначений = РежимВыделенияЗначенийДиаграммыГанта.Множественный;
    Поле.РежимВыделенияИнтервалов = РежимВыделенияИнтерваловДиаграммыГанта.Множественный;

    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Проверить учебный график";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры

&НаКлиенте
Процедура УчебноеДействие(Команда)
    График = УчебныйГрафик;
    Поле = Элементы.ПолеГанта;
    Сообщить(Поле.РежимВыделенияЗначений = РежимВыделенияЗначенийДиаграммыГанта.Множественный);
    Сообщить(Поле.РежимВыделенияИнтервалов = РежимВыделенияИнтерваловДиаграммыГанта.Множественный);
    Для Каждого КлючЗначения Из Поле.ВыделенныеЗначения Цикл
        ВыделенноеЗначение = График.НайтиЗначениеПоИдентификатору(КлючЗначения);
        Если ВыделенноеЗначение <> Неопределено Тогда
            Сообщить("Выбрано значение: " + ВыделенноеЗначение.Текст);
        КонецЕсли;
    КонецЦикла;
    Для Каждого КлючИнтервала Из Поле.ВыделенныеИнтервалы Цикл
        ВыделенныйИнтервал = График.НайтиИнтервалПоИдентификатору(КлючИнтервала);
        Если ВыделенныйИнтервал <> Неопределено Тогда
            Сообщить("Выбран интервал: " + ВыделенныйИнтервал.Текст);
        КонецЕсли;
    КонецЦикла;
    Подготовка = График.УстановитьТочку("prepare");
    План = График.УстановитьСерию("plan");
    Плановое = График.ПолучитьЗначение(Подготовка, План);
    Если Плановое.Количество() = 0 Тогда
        ВызватьИсключение "Нет собственного планового интервала";
    КонецЕсли;
    Первый = Плановое[0];
    Поле.ТекущееЗначение = Плановое.Идентификатор;
    Поле.ТекущийИнтервал = Первый.Идентификатор;
    Сообщить(Поле.ТекущееЗначение = Плановое.Идентификатор);
    Сообщить(Поле.ТекущийИнтервал = Первый.Идентификатор);
    Сообщить("План подготовки, часов: " + Строка((Первый.Конец - Первый.Начало) / 3600));
КонецПроцедуры

Разбор по шагам

  1. Включаем множественное выделение у поля, но не пытаемся присваивать ВыделенныеЗначения или ВыделенныеИнтервалы.

  2. Кнопка сначала читает уже сделанный выбор пользователя. Массивы могут быть пустыми; обход пустой коллекции допустим.

  3. Ключ значения передаём только НайтиЗначениеПоИдентификатору, ключ интервала — только НайтиИнтервалПоИдентификатору. Перед чтением найденного объекта проверяем Неопределено.

  4. После диагностики выбора находим свою плановую подготовку, проверяем наличие интервала и берём элемент с индексом 0.

  5. Устанавливаем текущее значение и интервал идентификаторами именно этого графика. Проверяем их обратно и показываем 3 календарных часа подготовки.

Как проверить результат

  1. Ожидаются четыре сообщения Истина и длительность 3 часа; диагностические строки выбора зависят от действий пользователя.

  2. Перед нажатием выделите свои полосы на форме, при поддержке клиента используйте Ctrl для нескольких объектов. Кнопка покажет выбор и затем переведёт текущее выделение на плановую подготовку.

  3. Не ожидайте автоматически ровно одного элемента в массивах: текущее выделение и весь набор выбранных объектов — разные состояния.

Ожидаемый результат

Программное текущее выделение и чтение множественного пользовательского выбора разобраны на собственных допустимых идентификаторах.

На что обратить внимание

  1. Идентификаторы из другого графика могут быть недопустимыми; установленная справка указывает, что такая установка игнорируется.

  2. Идентификатор значения нельзя подставлять в свойство ТекущийИнтервал.

  3. Наличие выделения не меняет Начало/Конец и не рассчитывает рабочие часы с учётом календаря.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Построить диаграмму Ганта и сравнить учебный план с фактом

Точки — задачи, серии — План/Факт, значение — их пересечение, интервалы — полосы времени. Полная форма показывает эти четыре разных сущности.

Где и как запускать

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

Подготовка

  1. В учебной базе создайте новую внешнюю обработку УчебнаяДиаграммаГанта с пустой управляемой основной формой.

  2. Не добавляйте вручную реквизит УчебныйГрафик и поле ПолеГанта. В событиях формы свяжите ПриСозданииНаСервере с одноимённой процедурой.

  3. Весь код вставьте на уровне модуля, сохраните EPF и откройте в тонком клиенте Windows. Каждый урок запускайте в отдельной копии формы.

  4. Две вымышленные задачи 14–16 сентября 2026 года создаются только в памяти. Рабочие заказы, расписания и печать не используются.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    Новые.Добавить(Новый РеквизитФормы("УчебныйГрафик", Новый ОписаниеТипов("ДиаграммаГанта")));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    График = Новый ДиаграммаГанта;
    График.Обновление = Ложь;
    График.АвтоОпределениеПолногоИнтервала = Ложь;
    График.УстановитьПолныйИнтервал(Дата(2026, 9, 14, 9), Дата(2026, 9, 16, 18));
    График.АвтоУстановкаТекстаСерий = Ложь;
    График.АвтоУстановкаТекстаТочек = Ложь;
    График.ОтображатьПустыеЗначения = Ложь;
    График.ОтображениеТекстаИнтервала = ОтображениеТекстаИнтервалаДиаграммыГанта.Отображать;
    График.ПрозрачныйФон = Ложь;
    График.ЦветФона = Новый Цвет(255, 255, 255);
    График.Окантовка = Истина;
    План = График.УстановитьСерию("plan");
    План.Текст = "Учебный план";
    План.Цвет = Новый Цвет(80, 145, 210);
    План.ПриоритетЦвета = Истина;
    Факт = График.УстановитьСерию("actual");
    Факт.Текст = "Учебный факт";
    Факт.Цвет = Новый Цвет(95, 165, 95);
    Факт.ПриоритетЦвета = Истина;
    Подготовка = График.УстановитьТочку("prepare");
    Подготовка.Текст = "Подготовка учебного комплекта";
    Сборка = График.УстановитьТочку("assemble");
    Сборка.Текст = "Сборка учебного комплекта";
    ПланПодготовки = График.ПолучитьЗначение(Подготовка, План);
    ПланПодготовки.Текст = "План подготовки";
    ПланПодготовки.Редактирование = Ложь;
    Первый = ПланПодготовки.Добавить();
    Первый.Начало = Дата(2026, 9, 14, 9);
    Первый.Конец = Дата(2026, 9, 14, 12);
    Первый.Текст = "Подготовка: 3 часа";
    Первый.Расшифровка = "training-prepare-plan";
    ПланСборки = График.ПолучитьЗначение(Сборка, План);
    ПланСборки.Текст = "План сборки";
    ПланСборки.Редактирование = Ложь;
    Второй = ПланСборки.Добавить();
    Второй.Начало = Дата(2026, 9, 14, 13);
    Второй.Конец = Дата(2026, 9, 15, 11);
    Второй.Текст = "Сборка учебного комплекта";
    Второй.Расшифровка = "training-assemble-plan";
    ФактПодготовки = График.ПолучитьЗначение(Подготовка, Факт);
    ФактПодготовки.Редактирование = Ложь;
    Фактический = ФактПодготовки.Добавить();
    Фактический.Начало = Дата(2026, 9, 14, 9);
    Фактический.Конец = Дата(2026, 9, 14, 13);
    Фактический.Текст = "Учебный факт: 4 часа";
    Заголовок = График.ОбластьЗаголовка;
    Заголовок.Текст = "Учебный план и факт — 14–16.09.2026";
    Область = График.ОбластьПостроения;
    Область.Заголовок = "Учебные задачи";
    Область.ОтображатьТекстТочек = ОтображениеВДиаграммеГанта.Отображать;
    Шкала = Область.ШкалаВремени;
    Пока Шкала.Элементы.Количество() > 0 Цикл
        Шкала.Элементы.Удалить(Шкала.Элементы.Получить(0));
    КонецЦикла;
    Дни = Шкала.Элементы.Добавить();
    Дни.Единица = ТипЕдиницыШкалыВремени.День;
    Дни.Кратность = 1;
    Дни.Формат = "ДФ=dd.MM";


    График.Обновление = Истина;
    ЭтаФорма.УчебныйГрафик = График;
    Поле = Элементы.Добавить("ПолеГанта", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеДиаграммыГанта;
    Поле.ПутьКДанным = "УчебныйГрафик";
    Поле.РастягиватьПоГоризонтали = Истина;
    Поле.РастягиватьПоВертикали = Истина;

    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Сравнить подготовку";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры

&НаКлиенте
Процедура УчебноеДействие(Команда)
    График = УчебныйГрафик;
    Подготовка = График.УстановитьТочку("prepare");
    План = График.УстановитьСерию("plan");
    Факт = График.УстановитьСерию("actual");
    Плановое = График.ПолучитьЗначение(Подготовка, План);
    Фактическое = График.ПолучитьЗначение(Подготовка, Факт);
    ПлановыеЧасы = 0;
    Для Каждого Интервал Из Плановое Цикл
        ПлановыеЧасы = ПлановыеЧасы + (Интервал.Конец - Интервал.Начало) / 3600;
        Сообщить(График.НайтиИнтервалПоИдентификатору(Интервал.Идентификатор) = Интервал);
        Сообщить(Интервал.Значение = Плановое);
    КонецЦикла;
    ФактическиеЧасы = 0;
    Для Каждого Интервал Из Фактическое Цикл
        ФактическиеЧасы = ФактическиеЧасы + (Интервал.Конец - Интервал.Начало) / 3600;
    КонецЦикла;
    Сообщить(ПлановыеЧасы = 3);
    Сообщить(ФактическиеЧасы = 4);
    Сообщить(ФактическиеЧасы - ПлановыеЧасы = 1);
    Сообщить(График.НайтиЗначениеПоИдентификатору(Плановое.Идентификатор) = Плановое);
    Сообщить(Плановое.Точка = Подготовка);
    Сообщить(Плановое.Серия = План);
    Сообщить(График.НачалоПолногоИнтервала = Дата(2026, 9, 14, 9));
    Сообщить(График.КонецПолногоИнтервала = Дата(2026, 9, 16, 18));
КонецПроцедуры

Разбор по шагам

  1. УстановитьТочку и УстановитьСерию создают либо находят сущность по Значение. Повторный вызов для известного ключа не должен добавлять дубль.

  2. ПолучитьЗначение получает пересечение точки и серии; Добавить у значения создаёт полосу времени.

  3. В примере подготовка в плане 09:00–12:00, в факте 09:00–13:00. Разность дат делим на 3600.

  4. Идентификаторы значения и интервала имеют разные типы и разные методы поиска.

  5. Полный интервал установлен методом, его свойства доступны для чтения. Обновление включаем после заполнения графика.

  6. Интервал сборки проходит через ночь: это непрерывный календарный диапазон, не расчёт рабочих часов по сменам.

Как проверить результат

  1. Видны две задачи, синие плановые полосы и зелёный факт подготовки.

  2. Кнопка выдаёт десять Истина: план 3 часа, факт 4, отклонение 1 и проверки связей/границ.

  3. Нажмите повторно: новых задач и серий не добавилось.

Ожидаемый результат

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

На что обратить внимание

  1. ИдентификаторИнтервалаДиаграммыГанта и ИдентификаторЗначенияДиаграммыГанта нельзя взаимозаменять.

  2. Полоса сборки не исключает ночи/выходные. Для рабочих часов нужен отдельный календарь.

  3. Все даты вымышлены и фиксированы; текущий день компьютера не используется.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.