Расширение поля формы для поля табличного документа.УстановитьВыделенныеОбласти

Методы · SetSelectedAreas

Устанавливает области табличного документа. В интерфейсе Версия8_5, если в метод передали пустой массив, то текущее выделение табличного документа становится пустым.

Синтаксис

УстановитьВыделенныеОбласти(<МассивОбластей>)
Полное описание, параметры и ограничения

Расширение поля формы для поля табличного документа.УстановитьВыделенныеОбласти (Form field extension for a spreadsheet document field.SetSelectedAreas)

Расширение поля формы для поля табличного документа (Form field extension for a spreadsheet document field)

УстановитьВыделенныеОбласти (SetSelectedAreas)

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

Синтаксис:
УстановитьВыделенныеОбласти(<МассивОбластей>)
Параметры:

<МассивОбластей> (необязательный)
Тип: Массив.
Содержит области, которые нужно установить как выделенные.
Первый элемент становится текущей областью.
Описание:

Устанавливает области табличного документа.
В интерфейсе Версия8_5, если в метод передали пустой массив, то текущее выделение табличного документа становится пустым.

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

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

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

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

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

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

Очистить выделение пустым массивом в интерфейсе 8.5

Сначала устанавливаем собственную область, затем явно передаём пустой массив. Это не очистка документа и не удаление строк.

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

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

Подготовка

  1. Создайте отдельную внешнюю обработку с новой пустой управляемой основной формой в учебной базе. ПриСозданииНаСервере назначьте одноимённой процедуре.

  2. Вставьте полный модуль на уровне модуля формы. УчебныйДокумент, УчебноеПолеТаблицы и кнопку вручную не создавайте: их добавляет код.

  3. Каждый урок — отдельная копия формы. Таблица содержит только собственную Книгу (3) и Ручку (1); это не печатная форма рабочего документа.

  4. Настольный тонкий/толстый или веб-клиент. Для урока очистки выделения выберите интерфейс Версия 8.5: его поведение выделения отдельно отмечено в справке.

  5. Код не вызывает печать, сохранение файла, сетевой обмен или запись базы. Внешняя кнопка остаётся вне табличного поля и его состояния.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    Новые.Добавить(Новый РеквизитФормы("УчебныйДокумент", Новый ОписаниеТипов("ТабличныйДокумент")));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    Документ = Новый ТабличныйДокумент;
    Документ.Область(1, 1).Текст = "Товар";
    Документ.Область(1, 2).Текст = "Количество";
    Документ.Область(2, 1).Текст = "Книга";
    Документ.Область(3, 1).Текст = "Ручка";
    Для НомерСтроки = 2 По 3 Цикл
        Ячейка = Документ.Область(НомерСтроки, 2);
        Ячейка.СодержитЗначение = Истина;
        Ячейка.ТипЗначения = Новый ОписаниеТипов("Число");
        Если НомерСтроки = 2 Тогда
            Ячейка.Значение = 3;
        Иначе
            Ячейка.Значение = 1;
        КонецЕсли;
    КонецЦикла;
    Документ.Область(, 1, , 1).ШиринаКолонки = 25;
    Документ.Область(, 2, , 2).ШиринаКолонки = 12;
    Документ.Область(2, 1, 3, 2).Имя = "УчебныеТовары";
    Документ.ТолькоПросмотр = Истина;
    ЭтаФорма.УчебныйДокумент = Документ;
    Поле = Элементы.Добавить("УчебноеПолеТаблицы", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеТабличногоДокумента;
    Поле.ПутьКДанным = "УчебныйДокумент";
    Поле.Редактирование = Ложь;
    Поле.РазрешитьНачалоПеретаскивания = Ложь;
    Поле.РазрешитьПеретаскивание = Ложь;


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

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Поле = Элементы.УчебноеПолеТаблицы;
    Области = Новый Массив;
    Области.Добавить(ЭтаФорма.УчебныйДокумент.Область(2, 1, 3, 2));
    Поле.УстановитьВыделенныеОбласти(Области);
    ДоОчистки = Поле.ПолучитьВыделенныеОбласти();
    Сообщить(ДоОчистки.Количество() > 0);
    Поле.УстановитьВыделенныеОбласти(Новый Массив);
    ПослеОчистки = Поле.ПолучитьВыделенныеОбласти();
    Сообщить(ПослеОчистки.Количество() = 0);
    Сообщить(ЭтаФорма.УчебныйДокумент.ВысотаТаблицы = 3);
    Сообщить(ЭтаФорма.УчебныйДокумент.Область(2, 2).Значение = 3);
    Сообщить(ЭтаФорма.УчебныйДокумент.Область(3, 2).Значение = 1);
КонецПроцедуры

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

  1. Сначала создаётся непустое выделение одной своей области, чтобы очистка имела проверяемый эффект.

  2. Пустой массив передаётся явно, аргумент не опускается. Справка отдельно обещает пустое текущее выделение в интерфейсе Версия8_5.

  3. Массив повторно считывается после изменения. Документ не получает вызов Очистить.

  4. В другом интерфейсе не выдавайте второе сравнение за универсальную гарантию: этот урок требует Версия 8.5.

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

  1. В интерфейсе Версия 8.5: пять Истина. Документ всё ещё содержит три строки и количества 3/1.

  2. Повторное нажатие опять сначала создаёт, потом убирает своё выделение.

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

Показана очистка состояния выбора, не данных.

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

  1. Это интерфейсное отличие 8.5, не общий контракт для всех старых клиентов.

  2. Нет обращения к [0] после получения пустого массива.

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

Выделить два отдельных участка своего документа

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

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

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

Подготовка

  1. Создайте отдельную внешнюю обработку с новой пустой управляемой основной формой в учебной базе. ПриСозданииНаСервере назначьте одноимённой процедуре.

  2. Вставьте полный модуль на уровне модуля формы. УчебныйДокумент, УчебноеПолеТаблицы и кнопку вручную не создавайте: их добавляет код.

  3. Каждый урок — отдельная копия формы. Таблица содержит только собственную Книгу (3) и Ручку (1); это не печатная форма рабочего документа.

  4. Настольный тонкий/толстый или веб-клиент. Для урока очистки выделения выберите интерфейс Версия 8.5: его поведение выделения отдельно отмечено в справке.

  5. Код не вызывает печать, сохранение файла, сетевой обмен или запись базы. Внешняя кнопка остаётся вне табличного поля и его состояния.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    Новые.Добавить(Новый РеквизитФормы("УчебныйДокумент", Новый ОписаниеТипов("ТабличныйДокумент")));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    Документ = Новый ТабличныйДокумент;
    Документ.Область(1, 1).Текст = "Товар";
    Документ.Область(1, 2).Текст = "Количество";
    Документ.Область(2, 1).Текст = "Книга";
    Документ.Область(3, 1).Текст = "Ручка";
    Для НомерСтроки = 2 По 3 Цикл
        Ячейка = Документ.Область(НомерСтроки, 2);
        Ячейка.СодержитЗначение = Истина;
        Ячейка.ТипЗначения = Новый ОписаниеТипов("Число");
        Если НомерСтроки = 2 Тогда
            Ячейка.Значение = 3;
        Иначе
            Ячейка.Значение = 1;
        КонецЕсли;
    КонецЦикла;
    Документ.Область(, 1, , 1).ШиринаКолонки = 25;
    Документ.Область(, 2, , 2).ШиринаКолонки = 12;
    Документ.Область(2, 1, 3, 2).Имя = "УчебныеТовары";
    Документ.ТолькоПросмотр = Истина;
    ЭтаФорма.УчебныйДокумент = Документ;
    Поле = Элементы.Добавить("УчебноеПолеТаблицы", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеТабличногоДокумента;
    Поле.ПутьКДанным = "УчебныйДокумент";
    Поле.Редактирование = Ложь;
    Поле.РазрешитьНачалоПеретаскивания = Ложь;
    Поле.РазрешитьПеретаскивание = Ложь;
    Поле.РежимОтображенияВыделения = РежимОтображенияВыделения.Всегда;
    Поле.РежимОтображенияВыделенияРисунков = РежимОтображенияВыделенияРисунков.НеОтображать;
    Поле.РежимОтображенияКнопкиДействийЯчейки = РежимОтображенияКнопкиДействийЯчейки.НеОтображать;
    Поле.РежимОтображенияПанелиМножественногоВыделения = РежимОтображенияПанелиМножественногоВыделенияТабличногоДокумента.ОтображатьПриМножественномВыделении;


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

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

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

  1. Массив содержит собственные ячейки книги и количества ручки. Они не объединяются в одну прямоугольную область кодом.

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

  3. Количество проверяется до [0], типы проверены до обращения к координатам. Рисунок тоже может быть текущей областью в другом документе.

  4. Режимы выделения, кнопки действий и панели множественного выделения регулируют UI. Последний режим особенно важен для интерфейса 8.5.

  5. ТипКурсоров только диагностируется: справка не указывает конкретный тип значения, поэтому не выдумывается перечисление для присваивания.

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

  1. Четыре Истина и диагностический тип курсоров. Текущая область начинается в строке 2, колонке 1.

  2. Числа 3/1 не изменены; код не расшифровывает и не открывает рабочие объекты.

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

Выделение и текущая область проверены на собственной геометрии.

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

  1. Не вызывайте .Верх у текущего рисунка без проверки типа.

  2. Само выделение не является правкой или записью ячеек.

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

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

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

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

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