Как в табличном поле обычной формы 1С отобразить срез последних регистра сведений?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При разработке интерфейсов на обычных формах часто возникает необходимость вывести актуальные данные из периодического регистра сведений (срез последних) для конкретного элемента справочника или документа. По умолчанию реквизит формы с типом РегистрСведенийСписок отображает все записи регистра с учетом установленных отборов.

Рассмотрим подробно два основных подхода к решению этой задачи: использование встроенных свойств табличного поля платформы 1С и программное получение данных с помощью запроса.

Способ 1. Использование штатного свойства табличного поля «ВыбиратьСрез»

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

Для настройки отображения среза последних выполним следующие шаги:

  1. В палитре свойств табличного поля (в конфигураторе) найдем категорию Использование.
  2. Установим значение свойства ВыбиратьСрез в положение ИспользованиеСреза.Последние (по умолчанию установлены значение ИспользованиеСреза.НеИспользовать).

Также это свойство можно установить программно при открытии формы или инициализации элементов:

ЭлементыФормы.ИмяТабличногоПоля.ВыбиратьСрез = ИспользованиеСреза.Последние;

Проанализируем работу отборов при таком подходе. При активизации строки основного списка (например, справочника) мы можем наложить отбор по измерению регистра:


Процедура СправочникСписокПриАктивизацииСтроки(Элемент)
    
    РС.Отбор.Карта.Установить(Элемент.ТекущиеДанные.Ссылка);
    
КонецПроцедуры

Обратите внимание на ограничения метода:

  1. Механизм работает только для периодических регистров сведений.
  2. В режиме отображения среза табличное поле выводит виртуальные данные, поэтому интерактивное добавление и редактирование записей непосредственно в таком поле ограничено.
  3. Срез строится по всем измерениям регистра. Если требуется ограничить разрез, нужно явно устанавливать отборы через свойство Отбор списка.

Способ 2. Получение среза последних с помощью запроса

Если штатного механизма недостаточно (например, требуется сложная обработка данных или вывод дополнительных реквизитов), можно использовать таблицу значений в качестве источника данных табличного поля и заполнять ее с помощью запроса к виртуальной таблице СрезПоследних.

Посмотрим на пример кода, аналогичный типовым решениям (например, выводу цен номенклатуры):


Процедура ОбновитьСрезПоследних()
    
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |	Цены.ТипЦен КАК ТипЦен,
    |	Цены.Цена КАК Цена,
    |	Цены.СпособРасчетаЦены КАК СпособРасчетаЦены,
    |	Цены.Валюта КАК Валюта,
    |	Цены.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    |	Цены.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки
    |ИЗ
    |	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен В (&ТипыЦен)
    |		И Номенклатура = &Номенклатура) КАК Цены";
    
    Запрос.УстановитьПараметр("Дата", РабочаяДата);
    Запрос.УстановитьПараметр("ТипыЦен", ТаблицаЦен.ВыгрузитьКолонку("ТипЦен"));
    Запрос.УстановитьПараметр("Номенклатура", Ссылка);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        СтрокаЦен = ТаблицаЦен.Найти(Выборка.ТипЦен, "ТипЦен");
        Если СтрокаЦен <> Неопределено Тогда
            ЗаполнитьЗначенияСвойств(СтрокаЦен, Выборка);
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Выясним преимущества и особенности второго способа:

  1. Полный контроль над данными: мы можем запрашивать только необходимые поля и накладывать любые условия в ГДЕ-секции виртуальной таблицы.
  2. Гибкость отображения: результаты запроса выгружаются в ТаблицаЗначений, что позволяет легко редактировать данные на форме и обрабатывать их перед записью.

Таким образом, если задача простая — достаточно включить свойство ВыбиратьСрез у табличного поля. Если же требуется сложная логика обработки данных — следует использовать запрос к таблице СрезПоследних с выгрузкой в таблицу значений.

← На главную