Расширение группы формы для группы колонок

Типы · Form group extension for a group of columns

Содержит свойства, специфичные для группы вида ГруппаКолонок.

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

Расширение группы формы для группы колонок (Form group extension for a group of columns)

Расширение группы формы для группы колонок (Form group extension for a group of columns)

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

Свойства:
ГоризонтальноеПоложениеВШапке (HeaderHorizontalAlign)
Группировка (Group)
КартинкаШапки (HeaderPicture)
ОтображатьВКарточке (ShowInCard)
ОтображатьВШапке (ShowInHeader)
ОтображатьЗаголовок (ShowTitle)
ОтображатьЗаголовокВКарточке (ShowTitleInCard)
ПутьКДаннымШапки (HeaderDataPath)
ФиксацияВТаблице (FixingInTable)
ФиксироватьВКарточке (FixInCard)
ФорматШапки (HeaderFormat)
ЦветФонаЗаголовка (TitleBackColor)

Описание:

Содержит свойства, специфичные для группы вида ГруппаКолонок.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

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

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

Описание изменено в версии 8.5.1.

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

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

Объединить количество, цену и сумму в группу колонок

Две учебные строки дают итог 780. Переключаем обычное и компактное оформление расчётной группы, меняем источник шапки и проверяем восстановление всех 12 её свойств. Подготовка базы вынесена в отдельный модуль; основная задача находится в модуле формы.

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

Полный модуль своей управляемой формы внешней обработки УчебныеГруппыКолонок85. Серверные процедуры работают только с реквизитами и элементами этой формы; не запускались.

Подготовка

  1. Для будущего ручного запуска создайте НОВУЮ пустую учебную базу на платформе 8.5.1.1343. Имя конфигурации — УчебныеГруппыКолонок85; бизнес-объектов, расширений, подписок и регламентных заданий нет. Не используйте УТ, КА, УНФ или БП с рабочими данными. Здесь база и форма не создавались, код в 1С не выполнялся: runtimeVerifiedScenarios=0.

  2. Создайте общий модуль УчебныеГруппы85: Сервер=Да, Клиент=Нет, Глобальный=Нет, Вызов сервера=Нет. Вставьте целиком отдельный модуль проверки стенда из блока ниже; его экспортную процедуру вызывает только сервер формы.

  3. Создайте свою внешнюю обработку УчебныеГруппыКолонок85 и управляемую форму Форма. Добавьте реквизит Книги типа ТаблицаЗначений с колонками Название (Строка,100), Количество (Число,3,0,неотрицательное), Цена (Число,9,2,неотрицательное), Сумма (Число,12,2,неотрицательное). Добавьте реквизиты Всего (Число,12,2,неотрицательное) и ЗаголовокРасчета (Строка,80). Это реквизиты этой формы, не таблицы базы.

  4. На форме разместите таблицу ТаблицаКниг с ПутьКДанным=Книги. Колонку Название свяжите с Книги.Название. Прямо внутри ТаблицаКниг создайте группу ГруппаРасчет: Вид=ГруппаКолонок, Заголовок=Расчет. Внутри неё разместите поля Количество, Цена, Сумма с путями Книги.Количество, Книги.Цена, Книги.Сумма. Не вкладывайте группу в другую группу. Включите шапку таблицы. В ходе урока не меняйте порядок строк.

  5. Создайте команды ОбычныйВид, КомпактныйВид, ПроверитьВосстановление и кнопки для них. Назначьте одноимённые обработчики, а событию формы ПриСозданииНаСервере — одноимённую процедуру. Вставьте полный основной код в модуль формы, на верхний уровень, не внутрь другого обработчика. Проверьте F7. Не выполняйте этот урок в рабочей базе.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    УчебныеГруппы85.ПроверитьСвойПустойСтенд();
    Книги.Очистить();
    ДобавитьСтроку("Книга", 3, 250);
    ДобавитьСтроку("Ручка", 1, 30);
    Всего = Книги[0].Сумма + Книги[1].Сумма;
    ЗаголовокРасчета = "Расчет стоимости";
    Элементы.ТаблицаКниг.ТолькоПросмотр = Истина;
    ПрименитьПрофиль(СоздатьПрофиль(Истина));
КонецПроцедуры

&НаСервере
Процедура ДобавитьСтроку(Название, Количество, Цена)
    Строка = Книги.Добавить();
    Строка.Название = Название;
    Строка.Количество = Количество;
    Строка.Цена = Цена;
    Строка.Сумма = Количество * Цена;
КонецПроцедуры

&НаКлиенте
Процедура ОбычныйВид(Команда)
    ВыбратьПрофильНаСервере(Истина);
КонецПроцедуры

&НаКлиенте
Процедура КомпактныйВид(Команда)
    ВыбратьПрофильНаСервере(Ложь);
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьВосстановление(Команда)
    ПроверитьЦиклНаСервере();
    Сообщить("Оба профиля сверены; все 12 свойств восстановлены. Внешний вид проверяйте отдельно");
КонецПроцедуры

&НаСервере
Функция ПолучитьСвоюГруппу()
    УчебныеГруппы85.ПроверитьСвойПустойСтенд();
    Таблица = Элементы.Найти("ТаблицаКниг");
    Группа = Элементы.Найти("ГруппаРасчет");
    Если ТипЗнч(Таблица) <> Тип("ТаблицаФормы") Или Таблица.ПутьКДанным <> "Книги"
        Или Не Таблица.ТолькоПросмотр Или ТипЗнч(Группа) <> Тип("ГруппаФормы") Тогда
        ВызватьИсключение "Подготовьте свою таблицу Книги и группу ГруппаРасчет";
    КонецЕсли;
    Если Группа.Вид <> ВидГруппыФормы.ГруппаКолонок
        Или ТипЗнч(Группа.Родитель) <> Тип("ТаблицаФормы")
        Или Группа.Родитель.Имя <> Таблица.Имя Или Группа.Имя <> "ГруппаРасчет" Тогда
        ВызватьИсключение "Группа колонок должна находиться прямо внутри своей таблицы";
    КонецЕсли;
    Если Книги.Количество() <> 2 Или Всего <> 780 Или ЗаголовокРасчета <> "Расчет стоимости" Тогда
        ВызватьИсключение "Изменился собственный учебный набор или данные шапки";
    КонецЕсли;
    ПроверитьСтроку(Книги[0], "Книга", 3, 250, 750);
    ПроверитьСтроку(Книги[1], "Ручка", 1, 30, 30);
    Возврат Группа;
КонецФункции

&НаСервереБезКонтекста
Процедура ПроверитьСтроку(Строка, Название, Количество, Цена, Сумма)
    Если Строка.Название <> Название Или Строка.Количество <> Количество
        Или Строка.Цена <> Цена Или Строка.Сумма <> Сумма Тогда
        ВызватьИсключение "Оформление не должно менять учебные строки";
    КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция СоздатьПрофиль(Обычный)
    Если ТипЗнч(Обычный) <> Тип("Булево") Тогда
        ВызватьИсключение "Выберите обычный или компактный профиль";
    КонецЕсли;
    Если Обычный Тогда
        Возврат Новый Структура("ГоризонтальноеПоложениеВШапке,Группировка,КартинкаШапки,ОтображатьВКарточке,ОтображатьВШапке,ОтображатьЗаголовок,ОтображатьЗаголовокВКарточке,ПутьКДаннымШапки,ФиксацияВТаблице,ФиксироватьВКарточке,ФорматШапки,ЦветФонаЗаголовка",
            ГоризонтальноеПоложениеЭлемента.Центр, ГруппировкаКолонок.Горизонтальная, Новый Картинка,
            Истина, Истина, Неопределено, Неопределено, "Всего", ФиксацияВТаблице.Нет,
            Неопределено, "ЧДЦ=2", Новый Цвет(232, 242, 255));
    Иначе
        Возврат Новый Структура("ГоризонтальноеПоложениеВШапке,Группировка,КартинкаШапки,ОтображатьВКарточке,ОтображатьВШапке,ОтображатьЗаголовок,ОтображатьЗаголовокВКарточке,ПутьКДаннымШапки,ФиксацияВТаблице,ФиксироватьВКарточке,ФорматШапки,ЦветФонаЗаголовка",
            ГоризонтальноеПоложениеЭлемента.Лево, ГруппировкаКолонок.Вертикальная, Новый Картинка,
            Истина, Ложь, Ложь, Истина, "ЗаголовокРасчета", ФиксацияВТаблице.Лево,
            Истина, "", Новый Цвет(255, 244, 220));
    КонецЕсли;
КонецФункции

&НаСервере
Функция СнятьПрофиль()
    Группа = ПолучитьСвоюГруппу();
    Возврат Новый Структура("ГоризонтальноеПоложениеВШапке,Группировка,КартинкаШапки,ОтображатьВКарточке,ОтображатьВШапке,ОтображатьЗаголовок,ОтображатьЗаголовокВКарточке,ПутьКДаннымШапки,ФиксацияВТаблице,ФиксироватьВКарточке,ФорматШапки,ЦветФонаЗаголовка",
        Группа.ГоризонтальноеПоложениеВШапке, Группа.Группировка, Группа.КартинкаШапки,
        Группа.ОтображатьВКарточке, Группа.ОтображатьВШапке, Группа.ОтображатьЗаголовок,
        Группа.ОтображатьЗаголовокВКарточке, Группа.ПутьКДаннымШапки, Группа.ФиксацияВТаблице,
        Группа.ФиксироватьВКарточке, Группа.ФорматШапки, Группа.ЦветФонаЗаголовка);
КонецФункции

&НаСервере
Процедура ПрименитьПрофиль(Профиль)
    Группа = ПолучитьСвоюГруппу();
    Группа.ГоризонтальноеПоложениеВШапке = Профиль.ГоризонтальноеПоложениеВШапке;
    Группа.Группировка = Профиль.Группировка;
    Группа.КартинкаШапки = Профиль.КартинкаШапки;
    Группа.ОтображатьВКарточке = Профиль.ОтображатьВКарточке;
    Группа.ОтображатьВШапке = Профиль.ОтображатьВШапке;
    Группа.ОтображатьЗаголовок = Профиль.ОтображатьЗаголовок;
    Группа.ОтображатьЗаголовокВКарточке = Профиль.ОтображатьЗаголовокВКарточке;
    Группа.ПутьКДаннымШапки = Профиль.ПутьКДаннымШапки;
    Группа.ФиксацияВТаблице = Профиль.ФиксацияВТаблице;
    Группа.ФиксироватьВКарточке = Профиль.ФиксироватьВКарточке;
    Группа.ФорматШапки = Профиль.ФорматШапки;
    Группа.ЦветФонаЗаголовка = Профиль.ЦветФонаЗаголовка;
КонецПроцедуры

&НаСервере
Процедура ПроверитьПрофиль(Ожидание)
    Факт = СнятьПрофиль();
    Если Факт.Количество() <> 12 Или Ожидание.Количество() <> 12 Тогда
        ВызватьИсключение "Сверяются все 12 свойств группы колонок";
    КонецЕсли;
    Для Каждого Пара Из Ожидание Цикл
        Значение = Факт[Пара.Ключ];
        Если ТипЗнч(Значение) <> ТипЗнч(Пара.Значение) Тогда
            ВызватьИсключение "Не совпал тип свойства " + Пара.Ключ;
        КонецЕсли;
        Если Пара.Ключ = "КартинкаШапки" Тогда
            Если Значение.Вид <> ВидКартинки.Пустая Или Пара.Значение.Вид <> ВидКартинки.Пустая Тогда
                ВызватьИсключение "Этот урок использует только пустую картинку шапки";
            КонецЕсли;
        ИначеЕсли Пара.Ключ = "ЦветФонаЗаголовка" Тогда
            Если Значение.Красный <> Пара.Значение.Красный Или Значение.Зеленый <> Пара.Значение.Зеленый
                Или Значение.Синий <> Пара.Значение.Синий Тогда
                ВызватьИсключение "Не совпали три составляющие собственного цвета";
            КонецЕсли;
        ИначеЕсли Значение <> Пара.Значение Тогда
            ВызватьИсключение "Не совпало значение свойства " + Пара.Ключ;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура ВыбратьПрофильНаСервере(Обычный)
    Профиль = СоздатьПрофиль(Обычный);
    ПрименитьПрофиль(Профиль);
    ПроверитьПрофиль(Профиль);
КонецПроцедуры

&НаСервере
Процедура ПроверитьЦиклНаСервере()
    Снимок = СнятьПрофиль();
    Если ТипЗнч(Снимок.КартинкаШапки) <> Тип("Картинка")
        Или Снимок.КартинкаШапки.Вид <> ВидКартинки.Пустая
        Или ТипЗнч(Снимок.ЦветФонаЗаголовка) <> Тип("Цвет")
        Или Снимок.ЦветФонаЗаголовка.Красный < 0
        Или Снимок.ЦветФонаЗаголовка.Зеленый < 0 Или Снимок.ЦветФонаЗаголовка.Синий < 0 Тогда
        ВызватьИсключение "Проверка рассчитана на собственную пустую картинку и абсолютный цвет";
    КонецЕсли;
    Попытка
        ВыбратьПрофильНаСервере(Истина);
        ВыбратьПрофильНаСервере(Ложь);
    Исключение
        ПрименитьПрофиль(Снимок);
        ПроверитьПрофиль(Снимок);
        ВызватьИсключение;
    КонецПопытки;
    ПрименитьПрофиль(Снимок);
    ПроверитьПрофиль(Снимок);
КонецПроцедуры
УчебныеГруппы85

Своя пустая конфигурация УчебныеГруппыКолонок85 → Общие → Общие модули → УчебныеГруппы85

Полный серверный общий модуль, Сервер=Да, Вызов сервера=Нет. Подготовка отдельно от модуля формы; не выполнялась.

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

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

  1. ПриСозданииНаСервере создаёт только две строки в памяти формы: Книга — 3 × 250 = 750; Ручка — 1 × 30 = 30. Всего=780. Таблица становится доступной только для просмотра, чтобы оформление не смешивалось с редактированием данных.

  2. ПолучитьСвоюГруппу берёт конкретный элемент Элементы.ГруппаРасчет, проверяет ВидГруппыФормы.ГруппаКолонок и его непосредственного родителя — ТаблицаКниг. Расширение не создают через Новый: его свойства принадлежат уже подготовленной группе колонок.

  3. ОбычныйВид задаёт горизонтальную группировку, выравнивание по центру, показ группы в шапке и карточке, отсутствие фиксации в таблице. Источник текста шапки — числовой реквизит Всего; ЧДЦ=2 задаёт два знака после десятичного разделителя. КартинкаШапки получает Новый Картинка — это осознанное отсутствие значка, без загрузки файлов.

  4. ОтображатьЗаголовок, ОтображатьЗаголовокВКарточке и ФиксироватьВКарточке получают Неопределено: платформа выбирает поведение автоматически. Это не Ложь. КомпактныйВид показывает явные Булево-значения и другую группировку: вертикально, фиксация слева, выравнивание влево, без группы в шапке, с заголовком и фиксацией в мобильной карточке.

  5. КомпактныйВид меняет ПутьКДаннымШапки на свой строковый реквизит ЗаголовокРасчета и сбрасывает числовой формат. Но ОтображатьВШапке=Ложь скрывает эту часть шапки: для отдельного опыта включите это свойство в компактном профиле, тогда строковый источник станет видимым. Изменения пути, группировки и фиксации выполняются на сервере.

  6. ЦветФонаЗаголовка получает абсолютные RGB-цвета: 232/242/255 и 255/244/220. Проверка сравнивает составляющие, а не строковое представление или идентичность объектов. Пустые картинки сравниваются по виду; это проверка только данного учебного случая, не любых библиотечных картинок.

  7. ПроверитьВосстановление сохраняет текущее состояние этой формы, применяет оба профиля и возвращает все 12 свойств. При ошибке тоже выполняется восстановление и повторно передаётся исключение. Данные двух строк и итог сверяются при получении группы; успешная проверка свойств не заменяет проверку внешнего вида.

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

  1. В будущем ручном запуске сверяйте обе строки целиком: Книга/3/250/750 и Ручка/1/30/30; итог 780. После каждой команды данные должны остаться прежними. Никаких записей справочников или документов урок не создаёт.

  2. Сначала выберите КомпактныйВид, затем ПроверитьВосстановление: после проверки остаётся компактный профиль. Повторите из ОбычныйВид: остаётся обычный. Неопределено в трёх автоматических свойствах должно сохраниться именно как Неопределено, а не стать Ложь.

  3. Для проверки обнаружения ошибки на копии учебного модуля вставьте в ВыбратьПрофильНаСервере после ПрименитьПрофиль(Профиль), перед ПроверитьПрофиль(Профиль): Элементы.ГруппаРасчет.ФорматШапки = "ошибка";. Запустите ПроверитьВосстановление: сравнение должно вызвать исключение, после которого сохранённые 12 свойств восстанавливаются. Не меняйте ожидание и код восстановления; затем удалите только вставленную строку.

  4. ОтображатьВКарточке, ОтображатьЗаголовокВКарточке и ФиксироватьВКарточке имеют визуальный смысл для мобильного приложения в интерфейсе Версия 8.5. На настольном клиенте можно сверить их значения, но нельзя подтвердить вид мобильной карточки. При будущем отдельном мобильном тесте дополнительно проверьте скрытие группы через ОтображатьВКарточке=Ложь.

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

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

Подготовлен полный учебный модуль формы и отдельный модуль проверки пустого стенда. Ожидаются два варианта оформления одной расчётной группы и восстановление её 12 свойств без изменения двух строк. Это описание ожидаемого поведения, не протокол запуска в 1С.

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

  1. ПутьКДаннымШапки доступен только на сервере. Не переносите применение или снятие профиля в клиентский цикл.

  2. Программно допустимы картинки вида Пустая и ИзБиблиотеки. Здесь используется только Пустая; снимок не обещает восстановление произвольных файловых картинок или библиотечных ресурсов.

  3. Снимок рассчитан на эту собственную форму, пустую картинку и абсолютный цвет. Он не является глубоким клонированием произвольного объекта. Для относительных цветов RGB могут быть -1 — такой исходный профиль проверка отклоняет до изменений.

  4. ФиксацияВТаблице=Лево/Право может поднять вложенную группу на верхний уровень таблицы. Поэтому ГруппаРасчет изначально является прямым дочерним элементом таблицы; Родитель только читается, не переприсваивается.

  5. Скрытие группы в шапке не удаляет её данные и не означает скрытие мобильной карточки. Управление шапкой, карточкой, заголовком и фиксацией — разные настройки.

  6. Запись и чтение свойства не гарантируют его визуального применения конкретным интерфейсом. Не выдавайте статическую проверку за испытание клиента или мобильного приложения.

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

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

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

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

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