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

Опубликовано ср, 18/04/2012 — 00:07 пользователем guru

1. Создаём Критерий отбора.

Создание Критерия отбора

Создание Критерия отбора

2. Выбираем тип данных, по которому будет производиться отбор в списке документов.

Создание Критерия отбора

3. Выбираем справочники и документы, в которых будет применяться отбор.

Состав Критерия отбора

4. Создаём новую форму списка копированием.

Создание формы списка копированием

5. Добавляем реквизит формы с  типом данных как и в критерии отбора.

Добавление реквизита формы списка

Свойства реквизита формы списка

6. Добавляем на форму поле ввода. (Данные – реквизит формы, созданный в п.5. Выбор групп и элементов – Элементы.)

Добавление поля ввода

Свойства поля ввода

7. Создаём обработчик события ПриИзменении.

Создание обработчика события ПриИзменении

//Отбор по номенклатуре
Процедура НоменклатураПриИзменении(Элемент)
	Если ЗначениеЗаполнено(Номенклатура) Тогда
		Отбор.ОтборПоНоменклатуре.Установить(Номенклатура);
	Иначе
		Отбор.ОтборПоНоменклатуре.Использование = Ложь;
	КонецЕсли;
КонецПроцедуры

8. Устанавливаем созданную форму в качестве основной формы списка.

Установка новой формы списка в качестве основной

© При копировании материалов сайта ссылка на оригинал обязательна.

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

Я
   bplmeddy

19.07.16 — 13:41

Добрый день.

Прошу Вашей помощи в решении такой задачи: есть 1С 8.3, есть тестовая конфигурация, самописная, под обычные формы (не управляемые). Есть документ «Расходной документ» в нём есть форма списка. Вопрос: как можно выводить в этот список документы, реквизит табличной части которого имеет искомое значение (например отобразить документы в которых продавался определённый товар) Пытался сделать через запрос — возникла проблема с строка ТЧ формы списка (я не знаю как ТЧ в этой форме можно очистить и добавить новую строку (при команде «…ДокументСписок.ДобавитьСтроку()» создает новый документ). Через отбор списка тоже не получается так как он работает только с реквизитами документа, но не с реквизитами табличной части внутри документа. Ещё раз прошу посоветовать вариант решения задачи, чтобы в этой же таблице можно было фильтровать документы по товару. Спасибо !

  

Партнерская программа EFSOL Oblako

   Горогуля

1 — 19.07.16 — 13:42

ссылка в списке

   bplmeddy

2 — 19.07.16 — 13:44

(1) Не очень Вас понял. Если можно — поподробней обьясните пожалуйста.

   PR

3 — 19.07.16 — 13:45

Вообще-то из коробки уже работает, че вы там городите?

   Горогуля

4 — 19.07.16 — 13:45

наклади фильтр по ссылке. чтоб она была в заранее подготовленном списке

   bplmeddy

5 — 19.07.16 — 13:47

(4) Воистину,всё гениальное — просто. Идея насколько простая, настолько и хороша. Спасибо огромное, буду пробовать.

   hhhh

6 — 19.07.16 — 13:48

критерии отбора покурите

   PR

7 — 19.07.16 — 13:49

(0) УФ?

   bplmeddy

8 — 19.07.16 — 13:50

(7) Нет.

   bplmeddy

9 — 19.07.16 — 13:53

(4) (5) Хотя есть и трудность. Если таких документов 10-15, а вывести надо все? Фильтр то работает по принципу Равно/Неравно, а ссылки уникальны. Вот и загвоздка.

   Горогуля

10 — 19.07.16 — 13:54

ссылка в списке. в списке ссылка. списке ссылка в. в ссылка списке

   hhhh

11 — 19.07.16 — 13:56

(9) тогда критерии отбора покурите

   bplmeddy

12 — 19.07.16 — 13:56

(10) Прошу простить мою «глупость» , но нИпонятнА =(

   lera01

13 — 19.07.16 — 13:59

(12) Чтобы организовать отбор по всем документам какого-то вида, в табличной части которых есть реквизит с нужным вам значением, нужно написать запрос. По результату запроса сформировать список ссылок на документы и засунуть их в отбор.

  

Горогуля

14 — 19.07.16 — 13:59

(12) Фильтр работает не только по принципу Равно/Неравно

Быстрый старт в Python для 1С Разработчиков | 1s-to-python.ru

17 правил для составления оптимального ЗАПРОСа к данным базы 1С 47
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ


Быстрый отбор в справочнике по первой букве 0
В статье описан способ быстрой организации отбора в списке справочника по первой букве наименования. Механизм легко дотачивается под собственные нужды.
https://helpf.pro/uploads/img/_1-T4ZDj6uNPX.png
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
НаКлиенте


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


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


Выборка (перебор) бизнес-процессов 0
Выбрать( , , , )
отбора
отбора
(необязательный) — Структура. Задает реквизит вида расчета и значение этого реквизита, по которому будет создана выборка. Ключ структуры задает имя реквизита, а значение структуры — значение отбора по этому рекви


Посмотреть все результаты поиска похожих

0 / 0 / 0

Регистрация: 28.05.2010

Сообщений: 26

1

отбор в списке документов

04.06.2010, 14:46. Показов 41612. Ответов 10


Друзья, помогите в модуле формы списка документов прописана следующая процедура

Процедура ПриОткрытии(Отказ, СтандартнаяОбработка)
глТекущийПользователь=Имяпользователя();
ДокументСписок.Отбор.Автор.ВидСравнения = ВидСравнения.Равно;
ДокументСписок.Отбор.Автор.Использование = Истина;
ДокументСписок.Отбор.Автор.Значение = глТекущийПользователь;
КонецПроцедуры

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

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

8.1



0



1 / 1 / 0

Регистрация: 15.11.2009

Сообщений: 947

04.06.2010, 23:50

2

ЭлементыФормы.ДокументСписок.НастройкаОтбора.Автор .Доступность = Ложь;

Но при отключении отбора не забыть вернуть в Истину.



0



0 / 0 / 0

Регистрация: 23.04.2010

Сообщений: 553

05.06.2010, 00:49

3

Цитата
Сообщение от Neft

ДокументСписок.Отбор.Автор.ВидСравнения = ВидСравнения.Равно;
ДокументСписок.Отбор.Автор.Использование = Истина;
ДокументСписок.Отбор.Автор.Значение = глТекущийПользователь;

Можно заменить 1 строкой:

Код ( (Unknown Language)):
ДокументСписок.Отбор.Автор.Установить(глТекущийПол ьзователь);
А после этого дописать

Цитата
Сообщение от Дайнеко

ЭлементыФормы.ДокументСписок.НастройкаОтбора.Автор .Доступность = Ложь;

Будет красиво и изящно



0



0 / 0 / 0

Регистрация: 28.05.2010

Сообщений: 26

05.06.2010, 10:29

4

Цитата
Сообщение от Дайнеко

ЭлементыФормы.ДокументСписок.НастройкаОтбора.Автор .Доступность = Ложь;

Спасибо!

И с заменой трех строк одним условием прикольно!

еще хотелось бы уточнить при прописании строки ЭлементыФормы.До….. = Ложь;
полностью закрывается отбор для текущего пользователя по колонке «автор» а что добавить чтоб отбор по этой колонке был но при пользовании им, а вернее его отключении, значение отбора по колонке «автор» все равно возвращалось к отбору по автору с текущим имененм пользователя?



0



0 / 0 / 0

Регистрация: 23.04.2010

Сообщений: 553

05.06.2010, 13:43

5

Цитата
Сообщение от Neft

полностью закрывается отбор для текущего пользователя по колонке «автор» а что добавить чтоб отбор по этой колонке был но при пользовании им, а вернее его отключении, значение отбора по колонке «автор» все равно возвращалось к отбору по автору с текущим имененм пользователя?

Не совсем понятен вопрос.

Вы хотите запретить снятие отбора по полю «Автор», но в тоже время его блокировать не надо и при отключении отбора, все равно сохранялся фильтр по текущему пользователю?



0



0 / 0 / 0

Регистрация: 28.03.2004

Сообщений: 1,913

05.06.2010, 15:05

6

Цитата
Сообщение от Neft

Спасибо!

И с заменой трех строк одним условием прикольно!

Что значит ваше «прикольно»? Анекдотично, скоморошество, буффонада, Сатирично…
Или вот, скажем, ник из 4 букв — прикольно?



0



0 / 0 / 0

Регистрация: 28.05.2010

Сообщений: 26

05.06.2010, 15:50

7

Цитата
Сообщение от Darlock

Не совсем понятен вопрос.

Вы хотите запретить снятие отбора по полю «Автор», но в тоже время его блокировать не надо и при отключении отбора, все равно сохранялся фильтр по текущему пользователю?

именно, только не полностью запретить а при отключении пользователем отбора его значение возвращалось к фильтру по текущему пользователю
или такое невозможно?



0



0 / 0 / 0

Регистрация: 23.04.2010

Сообщений: 553

05.06.2010, 16:46

8

«Прав был медведь Винни Пух п**н если есть, то его сразу нет» (с)

Тоже и про отбор:
Он или есть или его нет. Заблокировн для редактирования или нет.

Гипотетически сделать то, что вы хотите возможно, но:
1) все действия над списком документов надо создавать самому руками (отключить флаг «Автозаполнение»);
2) работу отбора полностью описать руками, что при компиляции будет медленнее использования отбора предлагаемого платформой.



0



0 / 0 / 0

Регистрация: 28.05.2010

Сообщений: 26

05.06.2010, 16:52

9

:fuckyou: Вини Пух да….

ясно, спасибо



0



0 / 0 / 0

Регистрация: 23.04.2010

Сообщений: 553

05.06.2010, 16:53

10

Мне наверно кажется, но в ветке также кто-то пишет курсовую, с подобной структурой

Добавлено:

Цитата
Сообщение от Neft

Вини Пух да….

ясно, спасибо

Намек ясен куда копать?

P.S. Типа того, только это из Сектора Газа».



0



0 / 0 / 0

Регистрация: 28.05.2010

Сообщений: 26

05.06.2010, 16:57

11

про Сектор да….

в принципе про направление я понял…. чего-нибудь поразмыслю. Все равно огромное спасибо!



0



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

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

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

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

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

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

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

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

Код 1C v 8.х

 ДокументСписок.Отбор.Сбросить();
      
ДокументСписок.Отбор.статус.ВидСравнения=ВидСравнения.Содержит;
ДокументСписок.Отбор.Статус.Значение="Принята";
ДокументСписок.Отбор.Статус.установить();

Подпишитесь на нашу рассылку новостей

Хотите узнать больше по этому вопросу?

Подпишитесь на нашу рассылку новостей

Подписаться

Чтобы задать вопрос или предложить тему статьи, нажмите на кнопку ниже:

Предложить статью

Рассмотрим различные варианты установки отбора при выборе объекта на документе ДокументОтборПриемаТовара. У документа имеются следующие реквизиты (см. рисунок 1):

  • ПоставщикОтбор (тип СправочникСсылка.Поставщики);
  • ТоварОтбор (тип СправочникСсылка.Товары);
  • ОтветственныйОтбор (тип СправочникСсылка.Ответственный);
  • ПриемТовара (тип ДокументСсылка.ПриемТовара).
Рисунок 1. Структура документа ДокументОтборПриемаТовара

Выбирать будем документ ПриемТовара, а отбор в форме выбора будет устанавливаться по реквизитам с постфиксом Отбор.

Документ ПриемТовара имеет реквизиты (см. рисунок 2):

  • Поставщик (тип СправочникСсылка.Поставщики);
  • Ответственный (тип СправочникСсылка.Ответственный);
  • Комментарий (Тип Строка).

А так же табличную часть Товары, состоящую из реквизитов Товар (тип СправочникСсылка.Товары) и Количество (тип Число).

Рисунок 2. Структура документа ПриемТовара

1. Установка отбора в свойствах реквизита объекта метаданных

Самый простой вариант отбора. Нужно всего лишь в свойствах реквизита «Связи параметров выбора»  и «Параметры выбора» задать параметры выбора. Допустим, при выборе документа ПриемТовара, нужно в форме выбора показывать документы отобранные по поставщику и только проведенные. Для этого в связях параметров выбора задаем отбор по поставщику, а в параметрах выбора отбор только проведенных документов (см. рисунок 3).

Рисунок 3. Отбор в свойствах реквизита объекта метаданных

Больше ничего делать не нужно, платформа сама завернет указанные параметры выбора в структуру (см. рисунок 4) и поместит её в параметр Отбор формы выбора, далее, анализируя данный параметр формы, платформа устанавливает отборы для динамического списка.

Рисунок 6. Значение параметра формы выбора Отбор

2. Установка отбора в свойствах элемента формы

Такой же простой вариант как и первый, только те же самые свойства задаются для элемента формы (см. рисунок 5).

Рисунок 5. Отбор в свойствах элемента формы

Свойства элемента формы имеют приоритет над свойствами реквизита объекта.

3. Установка собственного отбора при создании формы выбора на сервере

Усложним задачу и будем производить отбор документов по табличной части, а конкретно по товару в ней. Для этого в связях параметров выбора зададим связь, где параметр будет Товар (прям ручками пишем), а реквизит ТоварОтбор (см. рисунок 6).

Рисунок 6. Связь параметра Товар с реквизитом ТоварОтбор

Именно такую задаем связь, так как более одной точки(.) в колонке Имя при написании параметра мы не можем использовать (платформенное ограничение), то есть написать «Отбор.Товары.Товар» мы не сможем.
Так как имя параметра мы задали вручную, то платформа его не поместит в параметр Отбор формы выбора, поэтому в форме выбора документа ПриемТовара в обработчике события ПриСозданииНаСервере напишем программный код, который будет обрабатывать наш параметр Товар и устанавливать отбор по реквизиту табличной части:

  
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Товар = Неопределено;
ЭтотОбъект.Параметры.Свойство("Товар", Товар);
Если Товар <> Неопределено Тогда
ФиксОтбор = ЭтотОбъект.Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
ЭлементОтбора = ФиксОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Товары.Товар");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Товар;
ЭлементОтбора.Использование = Истина;
КонецЕсли;

КонецПроцедуры

4. Программная установка параметров выбора

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

  
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Создаем связи параметров выбора.
МассивСвязей = Новый Массив;
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Поставщик", "Объект.ПоставщикОтбор");
МассивСвязей.Добавить(НоваяСвязь);
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Ответственный", "Объект.ОтветственныйОтбор");
МассивСвязей.Добавить(НоваяСвязь);
НоваяСвязь = Новый СвязьПараметраВыбора("Товар", "Объект.ТоварОтбор");
МассивСвязей.Добавить(НоваяСвязь);

// Создаем параметры выбора.
МассивПараметров = Новый Массив;
НовыйПараметр = Новый ПараметрВыбора("Отбор.Проведен", Истина);
МассивПараметров.Добавить(НовыйПараметр);

// Устанавливаем связи параметров и параметры выбора для элемента формы.
Элементы.ПриемТовара.СвязиПараметровВыбора = Новый ФиксированныйМассив(МассивСвязей);
Элементы.ПриемТовара.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);

КонецПроцедуры

Для корректной работы отборов необходимо создать событие ПриСозданииНаСервере с таким же программным кодом как в варианте №3 у формы выбора документа ПриемТовара.

5. Установка параметров выбора в момент начала выбора

Этот вариант позволяет «на лету» устанавливать параметры выбора. Усложним задачу и будем устанавливать отбор только по заполненным реквизитам отбора.
В модуле формы документа ДокументОтборПриемаТовара в событии НачалоВыбора для элемента ПриемТовара, который связан с реквизитом объекта ПриемТовара, напишем код, который будет устанавливать параметры выбора в зависимости от заполненности реквизитов отбора:

  
&НаКлиенте
Процедура ПриемТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

МассивПараметров = Новый Массив;
Если ЗначениеЗаполнено(Объект.ПоставщикОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Отбор.Поставщик", Объект.ПоставщикОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ОтветственныйОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Отбор.Ответственный", Объект.ОтветственныйОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ТоварОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Товар", Объект.ТоварОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
НовыйПараметр = Новый ПараметрВыбора("Отбор.Проведен", Истина);
МассивПараметров.Добавить(НовыйПараметр);
Элементы.ПриемТовара.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);

КонецПроцедуры

Для корректной работы отборов необходимо создать событие ПриСозданииНаСервере с таким же программным кодом как в варианте №3 у формы выбора документа ПриемТовара.

6. Открытие формы выбора с установленным параметром формы Отбор в момент начала выбора

Данный способ отличается от предыдущего тем, что мы отменяем стандартную обработку события НачалоВыбора, сами формируем параметр формы Отбор, передаем его в открываемую форму выбора с указанием владельца формы, то есть все делаем за платформу. Обратите внимание, что в данном случае нам не нужно обходить ограничение платформы (больше одной точки в имени параметра), что бы установить отбор по товару в табличной части, достаточно указать параметр отбора Товары типа Структура, в котором ключом будет имя колонки «Товар», а значение ссылка на товар.

  
&НаКлиенте
Процедура ПриемТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

Отбор = Новый Структура;
Если ЗначениеЗаполнено(Объект.ПоставщикОтбор) Тогда
Отбор.Вставить("Поставщик", Объект.ПоставщикОтбор);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ОтветственныйОтбор) Тогда
Отбор.Вставить("Ответственный", Объект.ОтветственныйОтбор);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ТоварОтбор) Тогда
Отбор.Вставить("Товары", Новый Структура("Товар", Объект.ТоварОтбор));
КонецЕсли;
Отбор.Вставить("Проведен", Истина);
ПараметрыФормы = Новый Структура("Отбор", Отбор);
ОткрытьФорму("Документ.ПриемТовара.ФормаВыбора", ПараметрыФормы, Элемент);

КонецПроцедуры

Отборы на динамический список платформа наложит сама, писать дополнительно код больше не нужно, как в варианте №3.

А что будет, если отбор в связях параметров выбора и параметры выбора пересекаются?

Как показал мой эксперимент, страшного ничего не случится, платформа установит отбор по связям параметров выбора.

Понравилась статья? Поделить с друзьями:

Другие крутые статьи на нашем сайте:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии