ТаблицаФормы.ТекущиеДанные

Свойства · CurrentData

Тип: ДанныеФормыСтруктура, ДанныеФормыЭлементКоллекции, ДанныеФормыЭлементДерева. Представляет доступ к текущим данным (данным текущей строки).

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

ТаблицаФормы.ТекущиеДанные (FormTable.CurrentData)

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

ТекущиеДанные (CurrentData)

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

Использование:
Только чтение.
Описание:
Тип: ДанныеФормыСтруктура, ДанныеФормыЭлементКоллекции, ДанныеФормыЭлементДерева.
Представляет доступ к текущим данным (данным текущей строки).
Доступность:

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

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

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

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

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

Связать команду с текущей строкой своей таблицы

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

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

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

Подготовка

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

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

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

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

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

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


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

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

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

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

  1. ИспользуемаяТаблица обязана принадлежать той же форме; используем созданную здесь ТаблицаТоваров.

  2. Отдельно задаём использование текущей строки и неиспользование выделенного набора.

  3. В обработчике проверяем ТекущиеДанные на Неопределено, затем читаем код и количество выбранной учебной строки.

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

  1. Два сравнения при создании Истина.

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

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

Команда использует выбранный контекст безопасно и предсказуемо.

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

  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";
    Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
    Список.УстановитьОбязательноеИспользование("Цена", Истина);
    Список.ПолучениеПредставленийДляНевидимыхПолей = Ложь;
    Сообщить(Список.ПолучитьОбязательноеИспользование("Цена"));

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

&НаКлиенте
Процедура РассчитатьВыбранное(Команда)
    Товар = Элементы.ТаблицаТоваров.ТекущиеДанные;
    Если Товар = Неопределено Тогда
        Сообщить("Выберите товар");
        Возврат;
    КонецЕсли;
    Сообщить(Товар.Наименование + ": сумма " + Строка(Товар.Количество * Товар.Цена));
КонецПроцедуры

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

  1. Цена отсутствует среди создаваемых колонок, но УстановитьОбязательноеИспользование требует её выборку и передачу клиенту.

  2. Настройка получения представлений относится к ссылочным полям: здесь Цена — число. Она не заменяет обязательное использование и не запрещает чтение.

  3. Кнопка вызывает клиентский обработчик. ТекущиеДанные доступно на клиенте; Неопределено обрабатывается до чтения свойств.

  4. Сумма рассчитывается для одной выбранной строки и выводится сообщением, не записывается в объект базы.

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

  1. При открытии проверка обязательного использования даёт Истина; колонки Цена нет.

  2. Выберите Книгу, нажмите Рассчитать выбранное: сумма 750. Для Воды сумма 0.

  3. Если нет выбранной строки, получаете сообщение Выберите товар, а не ошибку чтения свойства.

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

Работа со скрытым числовым полем выбранной строки с корректным клиентским контекстом.

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

  1. Не показывать колонку — не защита цены: значение явно передаётся клиенту.

  2. При группировке текущей может быть строка группы. Этот урок без группировки; перенос в сгруппированную форму требует отдельной проверки типа строки.

  3. Получение представления ссылки может потребовать дополнительных данных; этот урок не измеряет производительность.

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

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

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

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

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