ВыбранныеПоляКомпоновкиДанных.РежимОтображения

Свойства · ViewMode

Тип: РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Определяет режим отображения. Используется при отображении списка в зависимости от режима отображения табличного поля (см. соответствующие свойства у расширений табличного поля отбора и пользовательских настроек).

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

ВыбранныеПоляКомпоновкиДанных.РежимОтображения (DataCompositionSelectedFields.ViewMode)

ВыбранныеПоляКомпоновкиДанных (DataCompositionSelectedFields)

РежимОтображения (ViewMode)

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

Использование:
Чтение и запись.
Описание:
Тип: РежимОтображенияЭлементаНастройкиКомпоновкиДанных.
Определяет режим отображения.
Используется при отображении списка в зависимости от режима отображения табличного поля (см. соответствующие свойства у расширений табличного поля отбора и пользовательских настроек).
Доступность:

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

См. также:
ОтборКомпоновкиДанных, свойство ИдентификаторПользовательскойНастройки

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

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

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

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

Пользовательский выбор полей: скрыть цену, сохранив товары и итоги

Из четырех своих выбранных полей выключаем Цена именно в пользовательском разделе. Результат должен иметь три колонки, прежние две строки и итоги4/800; восстановление возвращает четыре колонки.

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

Полный серверный общий модуль нового собственного стенда УчебныеПользовательскиеРазделы85; каждый урок запускается отдельно.

Подготовка

  1. Создать НОВУЮ отдельную пустую учебную базу, не рабочую и не ее копию: точно8.5.1.1343, конфигурация УчебныеПользовательскиеРазделы85, совместимость Не использовать. Без бизнес-объектов, регистров, подписок, заданий и расширений.

  2. Конфигуратор → Общие → Общие модули → УчебныеПользовательскиеРазделы85: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставить ВЕСЬ код одного выбранного урока; одноименные ВыполнитьПример из разных уроков не смешивать.

  3. Конфигуратор → Обработки → УчебныеПользовательскиеРазделы85 → Формы → Пульт: управляемая форма; команда Выполнить, кнопка с этой командой и действие команды Выполнить. Реквизиты не нужны; полный модуль формы дан отдельно ниже.

  4. Сохранить и обновить свою учебную конфигурацию базы данных (F7). Открыть свежий собственный клиент и учебную обработку, выполнить команду. Здесь F7 и1С не запускались: это будущие ручные шаги.

  5. Схема и данные целиком создаются кодом: Local-запрос Книга3×250=750 / Ручка1×50=50, четыре выбранных поля и одна группа деталей. Документы и регистры не нужны.

  6. Редактор обязательно связывается с настоящим источником доступных настроек и загружает подготовленные основные настройки. Пользовательский объект действительно ищется по своему ID и проверяется по точному типу.

  7. Проверки используют свежий настоящий вывод для каждого состояния. XML-снимки только в памяти сохраняют целиком схему и основные настройки; файлов, архивов и резервных копий нет.

  8. runtimeVerifiedScenarios=0. Сверка установленной справки и статические проверки не равны запуску1С. Настоящий UI редактора, долговременное сохранение, сеть, печать и production здесь не выполнялись.

Функция ВыполнитьПример() Экспорт
    ПроверитьСвойПустойСтенд();
    Схема = Новый СхемаКомпоновкиДанных;
    ЗаполнитьСвоиДанные(Схема);
    ЗаполнитьСвоиНачальныеНастройки(Схема.НастройкиПоУмолчанию);
    Для Каждого Поле Из Схема.НастройкиПоУмолчанию.Выбор.Элементы Цикл
        Поле.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто;
    КонецЦикла;
    Основные = Схема.НастройкиПоУмолчанию.Выбор;
    Основные.ИдентификаторПользовательскойНастройки = "КолонкиТоваров85";
    Основные.ПредставлениеПользовательскойНастройки = "Показывать цену товаров";
    Основные.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
    ТекстСхемы = СвойОбъектРасшифровкиВСтроку(Схема);
    Редактор = СоздатьСвойРедактор(Схема);
    ТекущийВыбор = Редактор.Настройки.Выбор;
    Доступное = ТекущийВыбор.ДоступныеПоляВыбора.НайтиПоле(Новый ПолеКомпоновкиДанных("Цена"));
    Если Доступное = Неопределено Или ТипЗнч(Доступное) <> Тип("ДоступноеПолеКомпоновкиДанных") Тогда
        ВызватьИсключение "Собственный источник должен разрешить настоящую колонку Цена";
    КонецЕсли;
    Пользовательский = ПолучитьСвойПользовательскийРаздел(Редактор, "КолонкиТоваров85", Тип("ВыбранныеПоляКомпоновкиДанных"));
    Если Пользовательский.Элементы.Количество() <> 4 Тогда
        ВызватьИсключение "В своем user-выборе ожидаются четыре фактических простых поля";
    КонецЕсли;
    Цена = НайтиСвоюЦену(Пользовательский);
    ТекстОсновных = СвойОбъектРасшифровкиВСтроку(Редактор.Настройки);
    ПроверитьСвоиСтроки(Схема, Редактор.ПолучитьНастройки(), Ложь, Ложь, "");
    Цена.Использование = Ложь;
    Если Пользовательский.Элементы.Количество() <> 4 Тогда
        ВызватьИсключение "Выключение собственного поля не должно удалять его из пользовательского каталога";
    КонецЕсли;
    ПроверитьСвоиСтроки(Схема, Редактор.ПолучитьНастройки(), Ложь, Истина, "");
    Цена.Использование = Истина;
    ПроверитьСвоиСтроки(Схема, Редактор.ПолучитьНастройки(), Ложь, Ложь, "");
    Если СвойОбъектРасшифровкиВСтроку(Редактор.Настройки) <> ТекстОсновных
        Или СвойОбъектРасшифровкиВСтроку(Схема) <> ТекстСхемы
        Или ТекущийВыбор.ПредставлениеПользовательскойНастройки <> "Показывать цену товаров"
        Или ТекущийВыбор.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда
        ВызватьИсключение "User-выбор не должен переписывать все исходные выбранные поля";
    КонецЕсли;
    Возврат ТекущийВыбор.ПредставлениеПользовательскойНастройки + ": 4→3→4 колонки; строки и итог4/800 сохранены";
КонецФункции

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

Процедура ЗаполнитьСвоиДанные(Схема)
    Источник = Схема.ИсточникиДанных.Добавить();
    Источник.Имя = "УчебныйИсточник";
    Источник.ТипИсточникаДанных = "Local";
    Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    Набор.Имя = "УчебныеТовары";
    Набор.ИсточникДанных = Источник.Имя;
    Набор.АвтоЗаполнениеДоступныхПолей = Истина;
    Набор.Запрос = "ВЫБРАТЬ
    |    ""Книга"" КАК Наименование,
    |    3 КАК Количество,
    |    250 КАК Цена,
    |    750 КАК Сумма
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ ""Ручка"", 1, 50, 50";
КонецПроцедуры

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

Функция СоздатьСвойРедактор(Схема)
    Редактор = Новый КомпоновщикНастроекКомпоновкиДанных;
    Редактор.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
    Редактор.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
    Возврат Редактор;
КонецФункции

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

Функция СвойОбъектРасшифровкиВСтроку(Объект)
    Запись = Новый ЗаписьXML;
    Запись.УстановитьСтроку();
    СериализаторXDTO.ЗаписатьXML(Запись, Объект);
    Возврат Запись.Закрыть();
КонецФункции

Процедура ПроверитьСвоиСтроки(Схема, Настройки, ТолькоКнига, БезЦены, ПервыйТовар)
    Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = Компоновщик.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    Процессор = Новый ПроцессорКомпоновкиДанных;
    Процессор.Инициализировать(Макет);
    Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    Приемник = Новый ТаблицаЗначений;
    Вывод.ОтображатьПроцентВывода = Ложь;
    Вывод.УстановитьОбъект(Приемник);
    Результат = Вывод.Вывести(Процессор, Ложь);
    Если ТипЗнч(Результат) <> Тип("ТаблицаЗначений") Тогда
        ВызватьИсключение "Нужны настоящие строки собственного вывода, не заранее заполненный приемник";
    КонецЕсли;
    Если Результат.Количество() <> ?(ТолькоКнига, 1, 2) Или Результат.Колонки.Количество() <> ?(БезЦены, 3, 4) Тогда
        ВызватьИсключение "Не совпали фактические строки или пользовательский состав колонок";
    КонецЕсли;
    Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Сумма", ",") Цикл
        Если Результат.Колонки.Найти(ИмяПоля) = Неопределено Тогда
            ВызватьИсключение "Не найдена реальная колонка " + ИмяПоля;
        КонецЕсли;
    КонецЦикла;
    Если БезЦены Тогда
        Если Результат.Колонки.Найти("Цена") <> Неопределено Тогда
            ВызватьИсключение "Пользователь выключил Цена: эта колонка не должна выводиться";
        КонецЕсли;
    ИначеЕсли Результат.Колонки.Найти("Цена") = Неопределено Тогда
        ВызватьИсключение "В первоначальном отчете нужна настоящая колонка Цена";
    КонецЕсли;
    Книга = Результат.Найти("Книга", "Наименование");
    Ручка = Результат.Найти("Ручка", "Наименование");
    Если Книга = Неопределено Тогда
        ВызватьИсключение "В собственном результате должна сохраниться Книга";
    КонецЕсли;
    Если Книга.Количество <> 3 Или Книга.Сумма <> 750 Тогда
        ВызватьИсключение "Неверные настоящие числа Книги";
    КонецЕсли;
    Если ТолькоКнига Тогда
        Если Ручка <> Неопределено Тогда
            ВызватьИсключение "Ручка не должна пройти отбор Сумма больше100";
        КонецЕсли;
    Иначе
        Если Ручка = Неопределено Тогда
            ВызватьИсключение "Пользовательские настройки должны сохранить Ручку";
        КонецЕсли;
        Если Ручка.Количество <> 1 Или Ручка.Сумма <> 50 Тогда
            ВызватьИсключение "Неверные настоящие числа Ручки";
        КонецЕсли;
    КонецЕсли;
    Если Не БезЦены Тогда
        Если Книга.Цена <> 250 Тогда
            ВызватьИсключение "Неверная настоящая цена Книги";
        КонецЕсли;
        Если Не ТолькоКнига И Ручка.Цена <> 50 Тогда
            ВызватьИсключение "Неверная настоящая цена Ручки";
        КонецЕсли;
    КонецЕсли;
    Если Результат.Итог("Количество") <> ?(ТолькоКнига, 3, 4) Или Результат.Итог("Сумма") <> ?(ТолькоКнига, 750, 800) Тогда
        ВызватьИсключение "Итоги должны рассчитываться из фактических отфильтрованных строк";
    КонецЕсли;
    Если ПервыйТовар <> "" И Результат[0].Наименование <> ПервыйТовар Тогда
        ВызватьИсключение "Пользовательская сортировка должна изменить фактическую первую строку";
    КонецЕсли;
КонецПроцедуры

Функция НайтиСвоюЦену(Выбор)
    Цена = Неопределено;
    Для Каждого Поле Из Выбор.Элементы Цикл
        Если ТипЗнч(Поле) <> Тип("ВыбранноеПолеКомпоновкиДанных") Тогда
            ВызватьИсключение "В собственном выборе только четыре явно выбранных простых поля";
        КонецЕсли;
        Если Поле.Поле = Новый ПолеКомпоновкиДанных("Цена") Тогда
            Если Цена <> Неопределено Тогда
                ВызватьИсключение "В собственной настройке не должно быть двух полей Цена";
            КонецЕсли;
            Цена = Поле;
        КонецЕсли;
    КонецЦикла;
    Если Цена = Неопределено Тогда
        ВызватьИсключение "Цена должна быть настоящим элементом выбранных полей, не произвольным входным объектом";
    КонецЕсли;
    Возврат Цена;
КонецФункции
УчебныеПользовательскиеРазделы85.Пульт

УчебныеПользовательскиеРазделы85 → Обработки → УчебныеПользовательскиеРазделы85 → Формы → Пульт → Модуль

Полный модуль собственной управляемой формы; здесь не выполнялся.

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

&НаСервереБезКонтекста
Функция ВыполнитьНаСервере()
    Возврат УчебныеПользовательскиеРазделы85.ВыполнитьПример();
КонецФункции

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

  1. Подготовить четыре явно выбранных поля Наименование,Количество,Цена,Сумма с режимом Авто. Группа деталей использует авто-выбор этих реальных выбранных полей.

  2. Назначить всему Выбор строковый пользовательский ID, представление и Обычный режим. После инициализации source проверить настоящую Цена в ДоступныеПоляВыбора.

  3. Найти собственный пользовательский раздел как ВыбранныеПоляКомпоновкиДанных. В нем должно быть четыре реальных простых выбранных поля; Цена ищется по настоящему ПолеКомпоновкиДанных, не номером2 вслепую.

  4. Сформировать исходный четырехколоночный результат. Затем пользовательскому элементу Цена задать Использование=Ложь; каталог по-прежнему содержит четыре настройки, но реальный результат должен иметь только три колонки.

  5. Цена в реальном трехколоночном результате отсутствует, а обе строки, количества3/1, суммы750/50 и итог4/800 сохранены. Код не обращается к отсутствующему свойству Цена строки.

  6. Вернуть Истина и проверить снова четыре реальные колонки с ценами250/50. XML основных настроек и всей схемы должен остаться прежним.

  7. В native-примечании пользовательского ID Выбор встречаются скопированные слова об отборе. Поэтому из него не выводятся универсальные правила исключения подгрупп: в этом опыте проверяется только реальный собственный четырехпольный состав.

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

  1. Будущий результат должен пройти все встроенные проверки реальных строк/чисел и конкретного пользовательского изменения. Каталог настроек, строковый ID и флаг сами по себе не доказывают изменение отчета.

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

  3. Полный XML исходной схемы и основных настроек должен совпасть с первоначальным. Пользовательское изменение действует в эффективной копии ПолучитьНастройки, не заменяет исходный основной раздел.

  4. Отрицательный контроль будущего отдельного опыта: изменить в буквальном запросе только количество Книги3→30 при прежней сумме750. Проверка реальной ячейки должна отказать, несмотря на прежние названия и сумму.

  5. runtimeVerifiedScenarios=0. Все проверки в BSL — будущие условия приемки собственного учебного запуска; реальный запуск здесь не выполнялся.

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

Полный код проверяет три состояния собственного пользовательского раздела, действительный результат и сохранность исходной схемы. Здесь в1С не запускался.

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

  1. ПредставлениеПользовательскойНастройки недоступно у user-объекта: читается только у основных настроек. РежимОтображения описывает поведение редактора, но настоящий интерфейс здесь не проверялся.

  2. Строковый пользовательский ID и ИдентификаторКомпоновкиДанных для обратного поиска элемента — разные типы и разные задачи. ID берется у фактического владельца, не создается числом или строкой вручную.

  3. ДоступныеПоля — readonly набор текущего источника. Проверяется настоящий путь через НайтиПоле; нельзя заменить набор новой коллекцией или молча продолжить при Неопределено.

  4. После повторной ЗагрузитьНастройки пользовательский состав пересоздается. Эти уроки загружают его один раз и не держат ссылки через последующие перезагрузки.

  5. Поля и Отбор user-правила условного оформления недоступны: в своем пользовательском правиле меняется только разрешенный флаг Использование. Исходное правило целиком сохраняется в основных настройках.

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

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

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

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

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

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