Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 16:32

Запрос при открытии формы

Автор safronowmax, 07 апр 2013, 18:04

0 Пользователей и 1 гость просматривают эту тему.

safronowmax

Подскажите пожалуйста, 1с 8.2. Хочу привязать запрос к открытию формы списка (форма основана на справочнике Книги). Прописываю в модуль формы в событие при открытии следующий код:

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

Но результат запроса не выполняется, как были в списке все авторы, так и остались. В чем может быть проблема?

   

starz555

Поподробнее лучше бы. Форма управляемая? Что является основным реквизитом формы списка?
И, воообще, в результате работы этого запроса, насколько я понимаю, максимум будут выданы сообщения со списком авторов. Вы же хотите отфильтровать список по конкретному автору? Такая задача стоит?

SlazZy

а почему что-то должно меняться-то? И почему у вас событие ПриОткрытии выполняется на сервере?

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

safronowmax

Форма управляемая, основным реквизитом является Наименование (пробовал и с этим реквизитом, то же самое). Да, задача стоит отфильтровать сообщения по конкретному автору.


SlazZy

Цитата: safronowmax от 07 апр 2013, 20:06Форма управляемая, основным реквизитом является Наименование (пробовал и с этим реквизитом, то же самое). Да, задача стоит отфильтровать сообщения по конкретному автору.

Да не может быть основным реквизитом управляемой формы наименование :lol:
Может быть ДинамическийСписок, либо Объект. Не бывает основного реквизита - наименование, серьезно.

starz555

Смотрите, в редакторе форм в окне редактирования реквизитов формы(в верхней части окна справа) один из реквизитов выделен жирным шрифтом, это и есть основной реквизит формы. У него есть наименование и тип, тип этого реквизита какой у Вас? И откуда взята форма этого списка - Вы ее сами создали, или же это стандартная форма уже существовала в конфигурации? И что это за конфигурация, если это одна из типовых?
Добавлено: 08 апр 2013, 10:41


safronowmax, а форма у Вас программно открывается или интерактивно? Всегда такой отбор должен быть наложен?
Добавлено: 08 апр 2013, 12:23


Этот отбор можно настроить в пользовательском режиме (если это подходит). Через "Все действия"/Настроить список/Отбор.
Если надо, чтобы настройка была создана в конфигураторе, то в качестве основного реквизита формы у Вас должен быть указан реквизит с типом "ДинамическийСписок". У этого реквизита в свойствах должна быть выбрана основная таблица - Ваш справочник "Книги".
Тогда у этой формы существуют такой параметр, как "Отбор" - структура, его  и можно определить при открытии формы.
В общем, ван нужно, чтобы основной реквизит формы у вас был "ДинамическийСписок", в конфигураторе открываете свойства реквизита (этого Динамического Списка) и по ссылке "Настройка списка открыть" в его свойствах открываете его параметры.

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

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

   Автор= "Иванов";//присваиваете нужное значение, можете из Вашего запроса взять
   ЭлементОтбора = Список.Отбор.Элементы[0];//"Список" - имя основного реквизита Вашей формы, который имеет тип "ДинамическийСписок".
   ЭлементОтбора.ПравоеЗначение = Автор;
КонецПроцедуры

Плюс к этому, если при настройке динамического списка из конфигуратора - в свойствах динамического списка по ссылке "Свойства списка - Открыть",  Вы выделите строку отбора и правой кнопкой "Подробно"/режим редактирования ="Недоступно" - тогда пользователь даже не узнает, что настроен отбор, не увидит и следовательно отключить его не сможет.

Ну, а если нужен отбор по нескольким авторам, то в конфигураторе меняете вид сравнения на "Всписке", код немного правите:

Автор1 = "Иванов";
Автор2 = Смирнов";
Отборр = Новый Массив;
Отборр.Добавить(Автор1);
Отборр.Добавить(Автор2);
ЭлементОтбора = Список.Отбор.Элементы[0];
ЭлементОтбора.ПравоеЗначение = Отборр;

Если что непонятно, пишите

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск