Списки документов или справочников в 1C

Вывести диалог со списком документов или список значение справочников просто:

фрмСписок= Документы.РеализацияТоваровУслуг.ПолучитьФормуСписка();	
фрмСписок.Открыть();

А теперь усложняем…

1. Замена стандартного выбора из списка на свой
У нас есть поле в котором указывается документ (РеализацияТоваровУслуг).
На форме это поле имеет имя: «ДокументТУ».
Поле конечно выводит все документы когда нажимаешь на кнопку выбора.
Заменяем этот диалог.
Делаем на поле обработку события «НачалоВыбора»:

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

2. Добавление фильтрацию в список документов
На самом деле никому не нужен весь список документов. Для того что бы отфильтровать данные вы можете воспользоваться стандартным отбором обратившись к свойству «Отбор».
Через это свойство вы можете поставить будущее значение полей отбора и указать что этот отбор надо использовать.

фрмСписок.Отбор.<ПолеОтбора>.Значение = <ЗначениеОтбора> ;
фрмСписок.Отбор.<ПолеОтбора>.Использование = Истина;

Пример показа документов только за текущий год + все документы больше миллиона рублей:

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

	// Все документы за этот год
	фрмСписок.Отбор.Дата.ЗначениеС = НачалоГода(ТекущаяДата());
	фрмСписок.Отбор.Дата.ЗначениеПо= КонецГода(ТекущаяДата());
	фрмСписок.Отбор.Дата.Использование = Истина;
	
	// Все что больше 1 000 000
	фрмСписок.Отбор.СуммаДокумента.Значение = 1000000;
	фрмСписок.Отбор.СуммаДокумента.ВидСравнения = ВидСравнения.БольшеИлиРавно;
	фрмСписок.Отбор.СуммаДокумента.Использование = Истина;

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

Теперь мы имеем фильтрацию. Если вы нажмете на кнопку «Отбор и сортировка» то увидите что нужные фильтры установлены.
Пытливый ум задастся вопросом «А как узнать имена полей отбора?». Я делаю точку останки после создания формы. Потом вызываю через контекстное меню «Вычислить выражение» и смотрю какие поля есть у свойства «Отбор» (ввел «фрмСписок.Отбор» и нажал кнопку «Вычислить»).

3. Как не дать пользователю отключить фильтрацию
Все бы ничего только пользователь может снять с такой любовью созданный фильтр (Просто нажать на кнопку «Отключить отбор»). Для этого надо обратится к элементам формы (НастройкаОтбора) и заблокировать нужные вам элементы отбора.


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

В данном случае (для поиска НастройкаОтбора) также рекомендую воспользоваться вычислением выражения.
А теперь все полностью:

Процедура ДокументТУНачалоВыбора(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	
	ЭлеТУ = ЭлементыФормы.ДокументТУ; // Элемент управления
	фрмСписок = Документы.РеализацияТоваровУслуг.ПолучитьФормуСписка(,ЭлеТУ);	
	фрмСписок.Заголовок = "Выберите документ...";	
	
	// Все документы за этот год
	фрмСписок.Отбор.Дата.ЗначениеС = НачалоГода(ТекущаяДата());
	фрмСписок.Отбор.Дата.ЗначениеПо= КонецГода(ТекущаяДата());
	фрмСписок.Отбор.Дата.Использование = Истина;	
	
	// Все что больше 1000 000
	фрмСписок.Отбор.СуммаДокумента.Значение = 1000000;
	фрмСписок.Отбор.СуммаДокумента.ВидСравнения = ВидСравнения.БольшеИлиРавно;
	фрмСписок.Отбор.СуммаДокумента.Использование = Истина;
	
	фрмСписок.ЭлементыФормы.Список.НастройкаОтбора.Дата.Доступность = Ложь;
	фрмСписок.ЭлементыФормы.Список.НастройкаОтбора.СуммаДокумента.Доступность = Ложь;	
	
	Если не фрмСписок.Открыта() тогда
		фрмСписок.РежимВыбора = Истина;	
		фрмСписок.Открыть();		
	КонецЕсли;	
КонецПроцедуры

Списки документов или справочников в 1C: 2 комментария

  1. Arthur

    То что нужно. Второй день уже ищу как работать со стандартным отбором
    пасиба ))

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

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