Отбор в динамическом списке по реквизиту табличной части элемента

На днях получил задание реализовать поиск документа по контрагенту, указанному в нем. Все было бы элементарно просто, но структура документа была не совсем обычна. Документ регистрирует продажу долга контрагентов сторонней организации, при этом одним документом может продаваться сразу несколько долгов. Поэтому в документе есть табличная часть, состоящая из двух колонок: Контрагент и СуммаДолга.

Список документов представлен управляемой формой и динамическим списком на ней. И конечно стандартный инструмент Настройка списка дает возможность проводить отбор только по реквизитам документа, но не по реквизитам табличной части.

Рассмотрим причину возникновения этой проблемы. Дело в том, что формирование динамического списка происходит на основе запроса. Этот запрос может быть сформирован как вручную, так и автоматически, если мы указываем Основную таблицу динамического списка. Когда мы создаем форму списка по умолчанию применяется второй способ — автоматическое формирование запроса. При этом в выбираемые поля запроса попадают все реквизиты документа и табличные части. И именно по этим полям потом можно делать отбор. Но табличные части попадают в поле запроса целиком, поэтому сделать отбор по конкретному реквизиту табличной части невозможно.

Отбор в динамическом списке по реквизиту табличной части элемента

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

  1. В свойствах реквизита Список на управляемой форме установим флаг Произвольного запроса и перейдем в Настройку списка. Для наглядности для появившегося запроса можно открыть конструктор запросов.
    Отбор в динамическом списке по реквизиту табличной части элемента
  2. В конструкторе запросов необходимо убрать из полей выборки все табличне части. Вместо этого добавим табличную часть, по реквизиту которой необходимо делать отбор, в источники запроса (таблицы).
    Отбор в динамическом списке по реквизиту табличной части элемента
  3. Далее левым соединением соединяем табличные части с самим документом.
    Отбор в динамическом списке по реквизиту табличной части элемента
  4. И делаем группировку по всем полям (хотя можно и использовать ВЫБРАТЬ РАЗЛИЧНЫЕ).
    Отбор в динамическом списке по реквизиту табличной части элемента
  5. На вкладке Компановка данных — Таблицы снимаем флаг Обязательно для табличной части. Это нужно для того, чтобы соединение выполнялось не всегда, а только если используется отбор. Таким образом экономятся ресурсы и ускоряется работа конфигурации.
    Отбор в динамическом списке по реквизиту табличной части элемента
    На вкладке Компановка данных — Условия создаем необходимые условия отбора по необходимым реквизитам табличной части.
    Отбор в динамическом списке по реквизиту табличной части элемента
  6. Сохраняем запрос и переходим на вкладку Настройка. Там можно сразу добавить необходимые условия отбора, чтобы пользователям самим не приходилось каждый раз выбирать поля. Не забудьте снять флаги с полей отбора, иначе при открытии формы списка условие отбора будет сразу применено.

Отбор в динамическом списке по реквизиту табличной части элемента

Отбор в динамическом списке по реквизиту табличной части элемента

 

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

1 × 1 =