Проверить выбранную строку без режима диалога выбора

Учебные задачи

Создаём собственную таблицу книги и ручки. Выделение строки относится к интерфейсу; режим выбора выключен, команда читает только текущую строку.

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

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

Подготовка

  1. В учебной базе: Файл → Новый → Внешняя обработка. Создайте управляемую форму и назначьте её основной. Дайте обработке имя УчебнаяТаблица.

  2. Не добавляйте вручную реквизит Товары и одноимённые элементы: код создаст их при открытии. Модуль формы для этой задачи должен быть пустым.

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

  4. Данные Книга/Ручка создаются в памяти формы. Справочники, документы и регистры вашей конфигурации не читаются и не записываются.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    НовыеРеквизиты = Новый Массив;
    НовыеРеквизиты.Добавить(Новый РеквизитФормы("Товары", Новый ОписаниеТипов("ТаблицаЗначений")));
    НовыеРеквизиты.Добавить(Новый РеквизитФормы("Код", Новый ОписаниеТипов("Строка"), "Товары", "Код"));
    НовыеРеквизиты.Добавить(Новый РеквизитФормы("Наименование", Новый ОписаниеТипов("Строка"), "Товары", "Название"));
    НовыеРеквизиты.Добавить(Новый РеквизитФормы("Количество", Новый ОписаниеТипов("Число",
        Новый КвалификаторыЧисла(9, 0, ДопустимыйЗнак.Неотрицательный)), "Товары", "Количество"));
    ЭтаФорма.ИзменитьРеквизиты(НовыеРеквизиты);
    Данные = Новый ТаблицаЗначений;
    Данные.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
    Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
    Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число",
        Новый КвалификаторыЧисла(9, 0, ДопустимыйЗнак.Неотрицательный)));

    СтрокаТовара = Данные.Добавить();
    СтрокаТовара.Код = "A-01";
    СтрокаТовара.Наименование = "Книга";
    СтрокаТовара.Количество = 3;
    СтрокаТовара = Данные.Добавить();
    СтрокаТовара.Код = "B-02";
    СтрокаТовара.Наименование = "Ручка";
    СтрокаТовара.Количество = 1;

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

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

&НаКлиенте
Процедура УчебноеДействие(Команда)
    СтрокаТовара = Элементы.ТаблицаТоваров.ТекущиеДанные;
    Если СтрокаТовара = Неопределено Тогда
        Сообщить("Сначала выберите свою строку Книга или Ручка");
        Возврат;
    КонецЕсли;
    Сообщить(Не Элементы.ТаблицаТоваров.РежимВыбора);
    Сообщить(СтрШаблон("Своя строка %1: %2, количество %3", СтрокаТовара.Код, СтрокаТовара.Наименование, СтрокаТовара.Количество));
КонецПроцедуры

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

  1. ПриСозданииНаСервере создаёт свои реквизиты, данные и элементы формы.

  2. РежимВыбора меняем на сервере: на клиенте это свойство только для чтения.

  3. РежимВыделенияСтроки=Строка выделяет строку целиком, но не возвращает результат внешнему диалогу и не выбирает товар из справочника.

  4. Клиентская команда проверяет ТекущиеДанные на Неопределено до чтения собственных колонок.

  5. Команда ничего не записывает и не меняет количество. Переключение между книгой и ручкой меняет только читаемую текущую строку.

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

  1. При создании две проверки Истина; при нажатии команды также читается Ложь у режима выбора.

  2. Выберите книгу: сообщение A-01 / Книга / 3. Выберите ручку: B-02 / Ручка / 1. Без выбранной строки выводится просьба выбрать её.

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

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

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

  1. ТекущиеДанные не являются всем набором выделенных строк.

  2. Нельзя присваивать РежимВыбора на клиенте только потому, что оно writable на сервере.

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

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

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

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

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