Расширение поля формы для поля периода.РастягиватьПоГоризонтали

Свойства · HorizontalStretch

Тип: Булево. Указывает возможность растягивания элемента по горизонтали. Истина - растягивание разрешено.

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

Расширение поля формы для поля периода.РастягиватьПоГоризонтали (Form field extension for a period field.HorizontalStretch)

Расширение поля формы для поля периода (Form field extension for a period field)

РастягиватьПоГоризонтали (HorizontalStretch)

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

Использование:
Чтение и запись.
Описание:
Тип: Булево.
Указывает возможность растягивания элемента по горизонтали.
Истина - растягивание разрешено.
Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент.
Изменение свойства на клиенте требует обращения к серверу.

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

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

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

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

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

Полная управляемая форма собственного пустого стенда. Месяц меняет только видимый интервал; отдельная схема ресурсов демонстрирует реальное раскрытие группы, не выдуманное присваивание readonly измерений события.

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

Полный модуль ОбщаяФорма.СтендМесяца85 собственной конфигурации; server создания/оформления и desktop managed client обработчиков; не выполнять в рабочей базе.

Подготовка

  1. Создайте отдельную новую пустую информационную базу на платформе 8.5.1.1343. Имя конфигурации УчебныйПериодПланировщика85; основное приложение управляемое. Никаких справочников, документов, регистров, задач, бизнес-процессов и расширений. Не используйте существующую рабочую базу.

  2. В Общие → Общие формы создайте управляемую форму СтендМесяца85. Добавьте реквизиты ПланСобытий85 и ПланРесурсов85, каждый типа Планировщик; Месяц85 и ПоследнийМесяц85 типа Дата с составом даты Дата; Состояние85 типа Строка длиной 500.

  3. На форму перетащите Месяц85; переименуйте поле в ПолеМесяца85 и установите Вид = Поле периода, ПутьКДанным = Месяц85. Это отображение месяцев по реквизиту Дата, не реквизит СтандартныйПериод. У события Выбор укажите ПолеМесяца85Выбор.

  4. Добавьте ПолеСобытий85 вида Поле планировщика с ПутьКДанным = ПланСобытий85 и ПолеРесурсов85 того же вида с ПутьКДанным = ПланРесурсов85. Разместите их вертикально. ПоследнийМесяц85 не выводите; Состояние85 выведите только для просмотра.

  5. Для ПолеСобытий85 событие Выбор свяжите с ПолеСобытий85Выбор. Для обоих полей планировщика свяжите ОбработкаФормированияКоманд с СвоеПолеПлана85ОбработкаФормированияКоманд. Обработчики получают служебный первый параметр Элемент, затем параметры native события.

  6. Создайте три команды формы ПоказатьСентябрь85, ПоказатьОктябрь85 и ПроверитьСвоиГруппы85 с действиями одноименных процедур и кнопками. Свяжите событие формы ПриСозданииНаСервере с одноименной процедурой. Вставьте весь приведенный код на уровне модуля формы, не в тело одной процедуры.

  7. Откройте ОбщаяФорма.СтендМесяца85 из своей учебной команды интерфейса только в настольном тонком или толстом управляемом клиенте. Внешняя обработка, мобильный клиент, почта, календарь сотрудников, запись в базу и печать не требуются.

  8. Рамка, ЦветРамки и Шрифт поля периода не применяются в интерфейсе Версия 8.5. Код показывает их реальный RW контракт и readback; для отдельной визуальной проверки legacy оформления выберите интерфейс Такси в этой собственной учебной конфигурации, не меняя рабочую.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ПроверитьСвойПустойСтенд();
    ПоследнийМесяц85 = Дата(2026, 9, 1);
    Месяц85 = ПоследнийМесяц85;
    ПланСобытий85 = СоздатьСвойПлан85();
    Первое = ПланСобытий85.Элементы.Добавить(Дата(2026, 9, 15, 9), Дата(2026, 9, 15, 10));
    Первое.Значение = "урок85-сентябрь";
    Первое.Текст = "Учебный разбор 15 сентября, 09:00–10:00";
    Первое.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;
    Второе = ПланСобытий85.Элементы.Добавить(Дата(2026, 10, 2, 11), Дата(2026, 10, 2, 12));
    Второе.Значение = "урок85-октябрь";
    Второе.Текст = "Учебная проверка 2 октября, 11:00–12:00";
    Второе.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;
    ПланРесурсов85 = СоздатьСвойПлан85();
    Ресурсы = ПланРесурсов85.Измерения.Добавить("ресурсы85", "Учебные ресурсы, не календарь сотрудников");
    Группа = Ресурсы.Элементы.Добавить("группа85", "Две вымышленные комнаты");
    Группа.ОтображатьОбластьЭлементовТолькоДляПодчиненных = Истина;
    Группа.Элементы.Добавить("комната85-А", "Учебная комната А");
    Группа.Элементы.Добавить("комната85-Б", "Учебная комната Б");
    НастроитьСвоеПолеПлана85(Элементы.ПолеСобытий85, 16);
    НастроитьСвоеПолеПлана85(Элементы.ПолеРесурсов85, 8);
    ПолеПериода = Элементы.ПолеМесяца85;
    ПолеПериода.АвтоМаксимальнаяВысота = Ложь;
    ПолеПериода.АвтоМаксимальнаяШирина = Ложь;
    ПолеПериода.Высота = 7;
    ПолеПериода.Ширина = 35;
    ПолеПериода.МаксимальнаяВысота = 9;
    ПолеПериода.МаксимальнаяШирина = 42;
    ПолеПериода.РастягиватьПоВертикали = Ложь;
    ПолеПериода.РастягиватьПоГоризонтали = Истина;
    ПолеПериода.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
    ПолеПериода.ЦветРамки = Новый Цвет(37, 99, 235);
    ПолеПериода.Шрифт = Новый Шрифт("Arial", 10);
    Если ПолеПериода.АвтоМаксимальнаяВысота Или ПолеПериода.АвтоМаксимальнаяШирина
        Или ПолеПериода.Высота <> 7 Или ПолеПериода.Ширина <> 35
        Или ПолеПериода.МаксимальнаяВысота <> 9 Или ПолеПериода.МаксимальнаяШирина <> 42
        Или ПолеПериода.РастягиватьПоВертикали Или Не ПолеПериода.РастягиватьПоГоризонтали
        Или ПолеПериода.Рамка.Толщина <> 1 Или ПолеПериода.ЦветРамки <> Новый Цвет(37, 99, 235)
        Или ПолеПериода.Шрифт.Имя <> "Arial" Или ПолеПериода.Шрифт.Размер <> 10 Тогда
        ВызватьИсключение "Настройки собственного поля периода не прочитались обратно";
    КонецЕсли;
    ПланСобытий85.ТекущиеПериодыОтображения.Добавить(Дата(2026, 9, 1), Дата(2026, 10, 1) - 1);
    ПланРесурсов85.ТекущиеПериодыОтображения.Добавить(Дата(2026, 9, 1), Дата(2026, 10, 1) - 1);
    Если ПланСобытий85.Элементы.Количество() <> 2 Или ПланРесурсов85.Элементы.Количество() <> 0 Тогда
        ВызватьИсключение "Нужно ровно два собственных события и отдельная пустая по событиям схема ресурсов";
    КонецЕсли;
    Состояние85 = "Сентябрь: одно событие видно, оба остаются в памяти. Дважды щелкните событие.";
КонецПроцедуры

&НаСервере
Функция СоздатьСвойПлан85()
    План = Новый Планировщик;
    План.НачалоПериодаОтображения = Дата(2026, 9, 1);
    План.КонецПериодаОтображения = Дата(2026, 11, 1) - 1;
    План.ТекущиеПериодыОтображения.Очистить();
    План.ОтображатьТекущуюДату = Ложь;
    План.ОтображатьПеренесенныеЗаголовкиШкалыВремени = Истина;
    План.ЕдиницаПериодическогоВарианта = ТипЕдиницыШкалыВремени.День;
    План.КратностьПериодическогоВарианта = 7;
    Шкала = План.ШкалаВремени;
    Шкала.Положение = ПоложениеШкалыВремени.Верх;
    Пока Шкала.Элементы.Количество() > 0 Цикл
        Шкала.Элементы.Удалить(0);
    КонецЦикла;
    День = Шкала.Элементы.Добавить();
    День.Единица = ТипЕдиницыШкалыВремени.День;
    День.Кратность = 1;
    День.Формат = "ДФ=dd.MM";
    День.Видимость = Истина;
    Возврат План;
КонецФункции

&НаСервере
Процедура НастроитьСвоеПолеПлана85(Поле, СтрокВысоты)
    Поле.АвтоМаксимальнаяВысота = Ложь;
    Поле.АвтоМаксимальнаяШирина = Ложь;
    Поле.Высота = СтрокВысоты;
    Поле.Ширина = 76;
    Поле.МаксимальнаяВысота = СтрокВысоты + 4;
    Поле.МаксимальнаяШирина = 90;
    Поле.ГиперссылкаПеренесенногоЗаголовкаШкалыВремени = Истина;
    Поле.ГиперссылкаЭлементаИзмерения = Истина;
    Поле.ГиперссылкаЭлементаШкалыВремени = Истина;
    Поле.РазрешитьНачалоПеретаскивания = Ложь;
    Поле.РазрешитьПеретаскивание = Ложь;
    Если Поле.АвтоМаксимальнаяВысота Или Поле.АвтоМаксимальнаяШирина
        Или Поле.Высота <> СтрокВысоты Или Поле.Ширина <> 76
        Или Поле.МаксимальнаяВысота <> СтрокВысоты + 4 Или Поле.МаксимальнаяШирина <> 90
        Или Не Поле.ГиперссылкаПеренесенногоЗаголовкаШкалыВремени
        Или Не Поле.ГиперссылкаЭлементаИзмерения Или Не Поле.ГиперссылкаЭлементаШкалыВремени Тогда
        ВызватьИсключение "Настройки собственного поля планировщика не сохранились";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПолеМесяца85Выбор(Элемент, ВыбраннаяДата)
    Месяц85 = ВыбраннаяДата;
    ПрименитьСвойМесяц85();
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьСентябрь85(Команда)
    Месяц85 = Дата(2026, 9, 1);
    ПрименитьСвойМесяц85();
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьОктябрь85(Команда)
    Месяц85 = Дата(2026, 10, 1);
    ПрименитьСвойМесяц85();
КонецПроцедуры

&НаКлиенте
Процедура ПрименитьСвойМесяц85()
    Если ТипЗнч(Месяц85) <> Тип("Дата") Или Месяц85 = Дата(1, 1, 1) Тогда
        Месяц85 = ПоследнийМесяц85;
        Состояние85 = "Пустая дата отклонена; видимый период сохранен";
        Возврат;
    КонецЕсли;
    Начало = НачалоМесяца(Месяц85);
    Если Начало <> Дата(2026, 9, 1) И Начало <> Дата(2026, 10, 1) Тогда
        Месяц85 = ПоследнийМесяц85;
        Состояние85 = "Этот месяц вне собственного стенда; выберите сентябрь или октябрь 2026";
        Возврат;
    КонецЕсли;
    ВерхняяГраница = ДобавитьМесяц(Начало, 1);
    ЧислоСобытий = 0;
    Для Каждого Событие Из ПланСобытий85.Элементы Цикл
        Если Событие.Начало >= Начало И Событие.Начало < ВерхняяГраница Тогда
            ЧислоСобытий = ЧислоСобытий + 1;
        КонецЕсли;
    КонецЦикла;
    Если ЧислоСобытий <> 1 Или ПланСобытий85.Элементы.Количество() <> 2
        Или ПланСобытий85.Элементы.Найти("урок85-сентябрь").Начало <> Дата(2026, 9, 15, 9)
        Или ПланСобытий85.Элементы.Найти("урок85-октябрь").Начало <> Дата(2026, 10, 2, 11) Тогда
        ВызватьИсключение "Период не должен изменять два собственных события";
    КонецЕсли;
    Планы = Новый Массив;
    Планы.Добавить(ПланСобытий85);
    Планы.Добавить(ПланРесурсов85);
    Для Каждого План Из Планы Цикл
        Периоды = План.ТекущиеПериодыОтображения;
        Периоды.Очистить();
        ВидимыйПериод = Периоды.Добавить(Начало, ВерхняяГраница - 1);
        Если Периоды.Количество() <> 1 Или ВидимыйПериод.Начало <> Начало
            Или ВидимыйПериод.Конец <> ВерхняяГраница - 1
            Или План.НачалоПериодаОтображения <> Дата(2026, 9, 1)
            Или План.КонецПериодаОтображения <> Дата(2026, 11, 1) - 1 Тогда
            ВызватьИсключение "Не совпали собственный видимый месяц и независимые внешние границы";
        КонецЕсли;
    КонецЦикла;
    Месяц85 = Начало;
    ПоследнийМесяц85 = Начало;
    Состояние85 = "В выбранном месяце одно событие; всего два, исходные даты сохранены";
КонецПроцедуры

&НаКлиенте
Процедура ПолеСобытий85Выбор(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Выбранные = Элемент.ВыделенныеЭлементы;
    Если Выбранные.Количество() <> 1 Тогда
        Состояние85 = "Дважды щелкните одно собственное событие";
        Возврат;
    КонецЕсли;
    Событие = Выбранные[0];
    Если Событие.Значение <> "урок85-сентябрь" И Событие.Значение <> "урок85-октябрь" Тогда
        ВызватьИсключение "Выбрано не собственное учебное событие";
    КонецЕсли;
    Состояние85 = Событие.Текст + "; длительность: " + Строка(Событие.Конец - Событие.Начало) + " секунд";
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьСвоиГруппы85(Команда)
    Ресурсы = ПланРесурсов85.Измерения.Найти("ресурсы85");
    Группа = Ресурсы.Элементы.Найти("группа85");
    Если Группа = Неопределено Или Группа.Элементы.Количество() <> 2 Тогда
        ВызватьИсключение "Нужна собственная группа с двумя дочерними комнатами";
    КонецЕсли;
    Ключи = Новый Соответствие;
    Ключи.Вставить(Ресурсы.Значение, "группа85");
    АдресГруппы = Новый ФиксированноеСоответствие(Ключи);
    Поле = Элементы.ПолеРесурсов85;
    Поле.СвернутьЭлементИзмерения(АдресГруппы, Истина);
    Если Поле.РазвернутЭлементИзмерения(АдресГруппы) Тогда
        ВызватьИсключение "Своя группа не свернулась";
    КонецЕсли;
    Поле.РазвернутьЭлементИзмерения(АдресГруппы, Истина);
    Если Не Поле.РазвернутЭлементИзмерения(АдресГруппы) Тогда
        ВызватьИсключение "Своя группа не развернулась";
    КонецЕсли;
    Если ПланРесурсов85.Элементы.Количество() <> 0 Или ПланСобытий85.Элементы.Количество() <> 2 Тогда
        ВызватьИсключение "Раскрытие заголовка не должно создавать или удалять события";
    КонецЕсли;
    Состояние85 = "Своя группа: свернута → развернута; комнаты и два исходных события сохранены";
КонецПроцедуры

&НаКлиенте
Процедура СвоеПолеПлана85ОбработкаФормированияКоманд(Элемент, ПараметрыКоманд, Команды, КомандаПоУмолчанию)
    Команды.Очистить();
    КомандаПоУмолчанию = Неопределено;
    Состояние85 = "Собственное поле: " + Элемент.Имя + "; реальный источник нажатия: " + Строка(ПараметрыКоманд.Источник);
КонецПроцедуры

&НаСервере
Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

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

  1. Сервер создает два новых Планировщик. В ПланСобытий85 добавлены лишь события 15.09.2026 09:00–10:00 и 02.10.2026 11:00–12:00 с устойчивыми собственными ключами. Во втором плане нет событий, только измерение ресурсов с настоящей группой и двумя детьми.

  2. Два отдельных поля нужны намеренно: readonly ЗначенияИзмерений события не присваиваются, связь события с комнатой не выдумывается. Иерархия действительно создана через коллекции Измерения и Элементы.

  3. Оформление задается на сервере: изменение размеров поля на клиенте требует серверного обращения. Высота — строки, ширина — символы; false АвтоМаксимальная... включает явные ограничения, 0 означал бы отсутствие ограничения.

  4. Выбор месяца передает настоящую ВыбраннаяДата. Нормализуем ее НачалоМесяца, допускаем только два месяца стенда. Пустая дата и любой другой месяц отклоняются до очистки видимых интервалов; реквизит возвращается к последнему корректному значению.

  5. В проверке событий используется полуоткрытый интервал начало <= дата < следующий месяц. Для визуальной коллекции конец задан последней секундой месяца. Меняются только собственные ТекущиеПериодыОтображения, не коллекция событий и не внешние границы 01.09–31.10.

  6. Двойной щелчок вызывает Выбор. СтандартнаяОбработка = Ложь запрещает переход к редактированию. Из readonly ВыделенныеЭлементы читаем только один настоящий элемент; текст и длительность 3600 секунд выводятся в статус.

  7. Для раскрытия группы строим ФиксированноеСоответствие: ключ — фактическое Ресурсы.Значение, значение — тот самый ключ группа85, использованный при настоящем Добавить. Передаем не индекс, подпись и не объект ЭлементИзмеренияПланировщика.

  8. СвернутьЭлементИзмерения(..., Истина) и РазвернутьЭлементИзмерения(..., Истина) меняют состояние своего заголовка с подчиненными. РазвернутЭлементИзмерения(...), возвращающий Булево, проверяет оба состояния; коллекции и даты не меняются.

  9. Три свойства гиперссылок включают настоящую ОбработкаФормированияКоманд при нажатии на заголовки ресурсов, дневное деление и перенесенный заголовок недельной шкалы. Обработчик читает реальный Источник, убирает только команды своего учебного поля и не запускает стандартное создание события.

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

  1. Первое открытие: выбран сентябрь 2026; событие 15 сентября видно, октябрьское не видно, но ПланСобытий85.Элементы.Количество() равно 2.

  2. ПоказатьОктябрь85: видна только проверка 2 октября; ПоказатьСентябрь85 возвращает сентябрьское событие с неизменной датой. Повторяйте команды: событий всегда два.

  3. Выберите месяц через настоящее Поле периода. Для сентября и октября статус подтверждает одно событие; для ноября или другого года видимый интервал остается прежним, а Месяц85 возвращается к последнему допустимому месяцу.

  4. Дважды щелкните собственное событие: статус содержит его точный текст и 3600 секунд. Окно редактирования не должно открыться; перетаскивание выключено.

  5. Нажмите ПроверитьСвоиГруппы85: два булевых состояния проверены исключениями, итоговый статус свернута → развернута. В дереве остаются две комнаты; ни одного нового события ресурсов нет.

  6. Щелкните заголовок комнаты или группы, день шкалы и заголовок на переносе: статус содержит реальный Источник. Выключите ровно соответствующее свойство гиперссылки в своей копии урока: обычный левый щелчок этого вида больше не вызывает данный сценарий.

  7. В интерфейсе 8.5 не ожидайте эффекта трех legacy свойств поля периода; успешное чтение свойств обратно и визуальное применение — разные проверки.

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

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

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

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

  1. Учебный код не выполнялся в 1С: статические проверки не подтверждают реальное отображение формы, события, клиентский UI или печать. Ручные проверки выполняются только в отдельном собственном стенде.

  2. Расширение периода — встроенная специализация ПолеФормы вида ПолеПериода, не расширение конфигурации CFE и не создаваемый конструктором объект.

  3. Название native Высота поля планировщика задает строки; native МаксимальнаяВысота описана в символах. Не переводите эти настройки в пиксели и не обещайте фиксированную геометрию окна.

  4. Период отображения не удаляет невидимое событие. Здесь нет УдалитьНеиспользуемые и нет очистки элементов событий.

  5. Readonly ВыделенныеЭлементы и ЗначенияИзмерений не заменяются и не мутируются. Для текущего урока реальная привязка события к комнате не требуется и не заявляется.

  6. Программное сворачивание может изменить состояние до перерисовки UI; проверка Булево проверяет состояние API, ручной просмотр — результат отрисовки.

  7. Гиперссылки данного поля вызывают событие формирования команд, а не сеть, браузер или внешний URL. Обработчик обнуляет список только собственного учебного поля, не команд рабочей формы.

  8. На мобильном клиенте native Высота и часть свойств поля периода недоступны. Полный модуль намеренно предназначен для настольной управляемой формы; мобильный runtime не заявлен.

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

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

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

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

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