Работа со свойством текущие данные 1С

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

Вся информация, представленная в статье, относится только к управляемому приложению.

Так как свойство относится к элементу формы (таблице), данные получаются именно из него, а не из источника. Из этого следует несколько особенностей свойства ТекущиеДанные:

  • Доступно только на клиенте. Его нельзя передавать и использовать на сервере. Поэтому правильно будет получить значения нужных полей в клиентской процедуре и передать их в серверную, при необходимости.
    &НаКлиенте
    Процедура ТаблицаНоменклатурыНоменклатураПриИзменении(Элемент)
    
        ТекущиеДанные = Элементы.ТаблицаНоменклатуры.ТекущиеДанные;	
        НоменклатураПриИзмененииНаСервере(ТекущиеДанные.Номенклатура);
    	
    КонецПроцедуры
    
    &НаСервере
    Процедура НоменклатураПриИзмененииНаСервере(Номенклатура)
        //Серверная обработка изменения строки таблицы
    КонецПроцедуры
    
  • Содержит данные реквизитов добавленных на форму, а также данные реквизитов с установленным флагом Использовать всегда. Остальные реквизиты отсутствуют в коллекции.
    Текущие данные 1С
    Как видно на картинке, в текущих данных представлены реквизиты Номенклатура и Сумма, добавленные в таблицу и реквизит Количество с установленным флагом Использовать всегда.
  • В случае, если таблица формы пустая или у нее нет активизированной строки, свойство ТекущиеДанные будет содержать значение Неопределено. Поэтому, перед использованием свойства, имеет смысл делать проверку. Но только в тех случаях, когда таблица действительно может быть пустой или не активизированной. Например событие ПриАктивизацииСтроки вызывается и для пустой таблицы. А вот событие ПриИзменении колонки таблицы, может вызываться только при наличии активизированной строки. Поэтому в проверке не будет смысла.
    &НаКлиенте
    Процедура ТаблицаНоменклатурыПриАктивизацииСтроки(Элемент)
    
        Если Элемент.ТекущиеДанные = Неопределено Тогда
            Возврат;
        КонецЕсли;
    	
        Сообщить(Элемент.ТекущиеДанные.Номенклатура);
    		
    КонецПроцедуры
    

  • При помощи свойства ТекущиеДанные можно не только читать, но и изменять информацию. Исключение — таблица формы, источником которой является динамический список. В этом случае изменение текущих данных, не приведет к изменению строки таблицы.
    &НаКлиенте
    Процедура ТаблицаНоменклатурыКоличествоПриИзменении(Элемент)
    	
        ТекущиеДанные = Элементы.ТаблицаНоменклатуры.ТекущиеДанные;	
        ТекущиеДанные.Сумма = ТекущиеДанные.Количество * ТекущиеДанные.Цена; 
    	
    КонецПроцедуры
    

Варианты получения свойства Текущие данные 1С

В общем случае к свойству ТекущиеДанные можно обратиться через элемент формы к которому оно относится.

Элементы.<ИмяТаблицыФормы>.ТекущиеДанные

Например:

ТекущиеДанные = Элементы.ТаблицаНоменклатуры.ТекущиеДанные;

Но при обращении к текущим данным из обработчика события таблицы формы, можно воспользоваться параметром Элемент. В нем уже содержится таблица формы. В этом случае обращение к текущим данным будет выглядеть следующим образом:

Элемент.ТекущиеДанные

Например:

&НаКлиенте
Процедура ТаблицаНоменклатурыПриИзменении(Элемент)
	
    Если Элемент.ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;

    //Код обрабатывающий событие
	
КонецПроцедуры

Такое обращение к текущим данным не получится реализовать в обработчиках событий колонок таблицы формы. Так как в параметр Элемент там передается ПолеФормы, относящееся к колонке.

Один комментарий

  1. Спасибо за статью! Благодаря Вам пришло большее осознавание по обращению к текущим данным таблицы формы, а что самое главное, теперь понятно как применяется «ИспользоватьВсегда» для реквизитов формы!

Добавить комментарий

Ваш адрес email не будет опубликован.