ТаблицаФормы.ТекущаяСтрока

Свойства · CurrentRow

Тип: Произвольный. Идентификатор текущей строки таблицы. В режиме совместимости выше Версия8_3_22, для поля диаграммы Ганта при изменении значения данного свойства меняется значение свойства ТекущееЗначение расширения поля формы для поля диаграммы Ганта.

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

ТаблицаФормы.ТекущаяСтрока (FormTable.CurrentRow)

ТаблицаФормы (FormTable)

ТекущаяСтрока (CurrentRow)

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

Использование:
Чтение и запись.
Описание:
Тип: Произвольный.
Идентификатор текущей строки таблицы.
В режиме совместимости выше Версия8_3_22, для поля диаграммы Ганта при изменении значения данного свойства меняется значение свойства ТекущееЗначение расширения поля формы для поля диаграммы Ганта.
Доступность:

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

Примечание:
Если устанавливаемое значение не является допустимым (такое значение отсутствует) для данной таблицы, то такая установка игнорируется.
Тип определяется расширением таблицы.
См. также:
Расширение таблицы формы для таблицы значений
Расширение таблицы формы для дерева значений
Расширение таблицы формы для списка значений
Расширение таблицы формы для табличных частей
Расширение таблицы формы для отбора
Расширение таблицы формы для динамического списка
Расширение данных строки для динамического списка
ТаблицаФормы, метод ДанныеСтроки
ДанныеФормыКоллекция, метод НайтиПоИдентификатору
ДанныеФормыЭлементКоллекции, метод ПолучитьИдентификатор

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

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

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

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

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

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

ПропускатьПриВводе у поля-колонки управляет последовательным вводом. Это не запрет программного выбора и не блокировка значения.

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

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

Подготовка

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

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

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

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

  5. Проверяйте в настольном тонком/толстом или веб-клиенте 8.5.1.1343, не в мобильном приложении. Для каждого урока отдельная учебная форма с пустым модулем.

  6. Изменение учебных строк остаётся только в открытой форме. При её новом открытии снова создаются Книга/3 и Ручка/1. Настройки таблицы не являются правами доступа к данным.


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

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

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

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

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

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

  1. Задаём пропуск на сервере при создании поля, не выключаем Доступность.

  2. При последовательном вводе исследуем переход между колонками в настольном клиенте.

  3. Команда находит единственную Книгу, ставит её идентификатор и поле Количество текущими.

  4. Явный выбор отличается от последовательного перехода: значение по-прежнему хранится и доступно.

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

  1. Команда выбирает A-01/Количество; данные Книги остаются 3 до ручного изменения.

  2. Сравните переход Tab и выбор мышью/командой в своём клиенте. В браузере возможна дополнительная навигация окна.

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

Разделены ввод по порядку, явный фокус и запрет редактирования.

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

  1. Пропуск не является правом или серверной блокировкой.

  2. Режимы выделения и редактирования могут влиять на удобство навигации.

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

Выбрать Книгу в таблице по составному ключу

Для двух ключевых полей используем вид КлючСтроки. Клиентская кнопка задаёт ТекущаяСтрока ключом с теми же путями, а не номером позиции на экране.

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

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

Подготовка

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

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

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

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

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

  6. В Командах формы добавьте ВыбратьКнигу, действие ВыбратьКнигу; перетащите команду на форму кнопкой. Пример уже содержит клиентский обработчик.

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

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

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

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

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

  1. Основная таблица пустая; собственный запрос создаёт четыре товара. Поля ключа УчебныйНомер и Категория задаются явно.

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

  3. Кнопка строит ключ Книги по двум значениям и присваивает ТекущаяСтрока. Она не меняет запрос и не добавляет товар.

  4. Проверка появления выбранной строки визуальная. Отсутствие строки с таким ключом не превращается автоматически в запись нового товара.

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

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

  2. Нажмите ВыбратьКнигу: две клиентские проверки дают Истина; в таблице должна быть выбрана Книга с номером 1 и категорией Канцелярия.

  3. Измените сортировку таблицы и повторите выбор: Книга выбирается по ключу, а не по позиции строки.

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

Выбор собственной строки по двум ключевым полям без изменения данных.

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

  1. Нельзя подменять составной ключ числом 1 только потому, что у Книги номер 1.

  2. Указанная основная таблица имеет другие правила ключа: пример специально без неё.

  3. ТекущиеДанные после выбора и взаимодействия с сервером — отдельная операция; урок не выдаёт их до готовности строки.

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

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

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

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

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