ДинамическийСписок.УстановитьОграниченияИспользованияВПорядке

Методы · SetRestrictionsForUseInOrder

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

Синтаксис

УстановитьОграниченияИспользованияВПорядке(<Поля>)

Примеры платформы

Список.Поля.Найти("Флаг").ОграничениеИспользования.Порядок = Истина;
Полное описание, параметры и ограничения

ДинамическийСписок.УстановитьОграниченияИспользованияВПорядке (DynamicList.SetRestrictionsForUseInOrder)

ДинамическийСписок (DynamicList)

УстановитьОграниченияИспользованияВПорядке (SetRestrictionsForUseInOrder)

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

Синтаксис:
УстановитьОграниченияИспользованияВПорядке(<Поля>)
Параметры:

<Поля> (необязательный)
Тип: Массив.
Пути к полям компоновки, на которые требуется установить ограничение.
Описание:

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

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

Сервер.

Примечание:
Если текст запроса не меняется динамически, или если вместе с изменением текста запроса меняются описания полей набора данных, рекомендуется использовать:
Поля,

ОграничениеИспользования,

ОграничениеИспользованияРеквизитов,

ОграничениеИспользования.

Пример:

Список.Поля.Найти("Флаг").ОграничениеИспользования.Порядок = Истина;

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

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

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

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

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

Разобрать старые методы ограничения полей и восстановить настройки

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

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

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

Подготовка

  1. В учебной базе 8.5.1.1343 создайте новую внешнюю обработку УчебныйСписок85, пустую управляемую основную форму. Режим совместимости — 8.3.19 или выше. Не переделывайте список рабочей конфигурации.

  2. В реквизитах формы добавьте Список типа ДинамическийСписок. Создайте один элемент ТаблицаФормы с именем ТаблицаТоваров и путём к данным Список. Колонки вручную не добавляйте: их создаёт код. Это не ТаблицаЗначений и не коллекция строк для Добавить().

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

  4. При открытии код задаёт произвольный запрос из четырёх константных строк. Основная таблица не указана; таблицы базы, файлы и внешние сервисы не используются. Запись данных отсутствует.

  5. Каждый раз открывайте отдельную копию формы. Автоматическое сохранение настроек отключено: старый пользовательский отбор не должен вмешиваться в упражнение.

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

    Список.ПоляКлюча = Новый ФиксированныйМассив(КлючевыеПоля);
    Список.ТекстЗапроса = "ВЫБРАТЬ
|    1 КАК УчебныйНомер,
|    ""Книга"" КАК Наименование,
|    ""Канцелярия"" КАК Категория,
|    3 КАК Количество,
|    250 КАК Цена
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 2, ""Ручка"", ""Канцелярия"", 1, 30
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 3, ""Чай"", ""Продукты"", 2, 150
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 4, ""Вода"", ""Продукты"", 0, 70";
    Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
    СтараяГруппировка = Список.ПолучитьОграниченияИспользованияВГруппировке();
    СтарыйОтбор = Список.ПолучитьОграниченияИспользованияВОтборе();
    СтарыйПорядок = Список.ПолучитьОграниченияИспользованияВПорядке();
    ОграниченныеПоля = Новый Массив;
    ОграниченныеПоля.Добавить("Цена");
    Попытка
        Список.УстановитьОграниченияИспользованияВГруппировке(ОграниченныеПоля);
        Список.УстановитьОграниченияИспользованияВОтборе(ОграниченныеПоля);
        Список.УстановитьОграниченияИспользованияВПорядке(ОграниченныеПоля);
        Сообщить(Список.ПолучитьОграниченияИспользованияВГруппировке().Получить(0) = "Цена");
        Сообщить(Список.ПолучитьОграниченияИспользованияВОтборе().Получить(0) = "Цена");
        Сообщить(Список.ПолучитьОграниченияИспользованияВПорядке().Получить(0) = "Цена");
        ТолькоНазвание = Новый Массив;
        ТолькоНазвание.Добавить("Наименование");
        Список.УстановитьОграниченияИспользованияВОтборе(ТолькоНазвание);
        Сообщить(Список.ПолучитьОграниченияИспользованияВОтборе().Количество() = 1);
        Сообщить(Список.ПолучитьОграниченияИспользованияВОтборе().Получить(0) = "Наименование");
    Исключение
        Список.УстановитьОграниченияИспользованияВГруппировке(СтараяГруппировка);
        Список.УстановитьОграниченияИспользованияВОтборе(СтарыйОтбор);
        Список.УстановитьОграниченияИспользованияВПорядке(СтарыйПорядок);
        ВызватьИсключение;
    КонецПопытки;
    Список.УстановитьОграниченияИспользованияВГруппировке(СтараяГруппировка);
    Список.УстановитьОграниченияИспользованияВОтборе(СтарыйОтбор);
    Список.УстановитьОграниченияИспользованияВПорядке(СтарыйПорядок);

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

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

  1. Сначала сохраняем три прежних массива. Затем передаём массив с одним полем Цена всем трём методам.

  2. Повторный вызов для отбора с Наименование заменяет Цена: остаётся один запрет, а не два.

  3. На успешном пути и при исключении восстанавливаем прежние массивы. На экране после открытия действует исходная настройка.

  4. В 8.3.19+ методы получения ограничений не рекомендуются. Для статичного запроса предпочтителен отдельный предыдущий урок с Поля.ОграничениеИспользования.

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

  1. Пять проверок дают Истина.

  2. После открытия в настройках снова доступны исходные поля: эксперимент восстановил все три массива.

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

Безопасный разбор поведения старого API на собственной форме.

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

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

  2. Ни один из этих запретов не заменяет права на данные.

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

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

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

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

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