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

Установить отбор

Автор Sekeretteni, 02 мар 2023, 17:41

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

Sekeretteni

Добрый день! Нужно установить отбор. Сделала так, но при этом логика рушится, если оставить редактирование поля (а оно нужно). Подскажите, какие еще варианты есть, чтобы задать отбор и разрешить ручной ввод?

в форме документа:

&НаКлиенте
Процедура ПозицииКонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   
   СтандартнаяОбработка = Ложь;
   МассивКонтрагентов = КонтрагентыСДокументомСмета();
   ПараметрыФормы = Новый Структура("РежимВыбора",Истина);
   ПараметрыФормы.Вставить("ОтборПоМассивуКонтрагентов", МассивКонтрагентов);    
   ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора",ПараметрыФормы,Элемент);
   
КонецПроцедуры

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

В Справочнике Контрагенты ФормаВыбора (Добавить в Процедуру ПриСозданииНаСервере)

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


antoneus

Чтобы логика работала при ручном вводе - ловить событие АвтоПодбор.

Afinogen

в типовых конфигурациях  уже все процедуры по установке отборов динамических списков прописаны

вот это

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

изобретать не нужно

Далее

в обработчике ОткрытьФорму() 7 -й параметр - ОбработкаОповещени,  в которой содержится имя экспортной процедуры в которую  прилетает результат закрытия открытой формы,  то есть можете написать так



&НаКлиенте
Процедура ПозицииКонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   
   СтандартнаяОбработка = Ложь;



ОписаниеОп = Новый ОписаниеОповещения("ПослеЗакрытияФормыПодбора",ЭтаФорма,Неопределено);

   
   ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора",ПараметрыФормы,ЭтаФорма,,,,ОписаниеОп);
   
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗакрытияФормыПодбора(Результат, ДопПарметры = Неопределено) Экспорт
КонецПроцедуры

В переменной Результат - будет содержаться результат закрытия формы подбора, и можете уже с ним играться

Теги:

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

Рейтинг@Mail.ru

Поиск