Получение списка объектов из ЭлементыФормы.СправочникСписок/ДокументСписок с учетом отборов и сортировки

18.09.14

Разработка - Универсальные функции

Бывает нужно получить список ссылок из ЭлементыФормы.ДокументСписок или ЭлементыФормы.СправочникСписок, причем именно тот, который видит пользователь. А пользователь может настроить кучу отборов и сортировку... Данная функция позволяет сделать это.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Обработка с примером
.epf 10,80Kb ver:1
2 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Использование:

СписокДок = ПолучитьТаблицуСписка("Справочник.Номенклатура", ЭлементыФормы.ОбъектСписок);

Функция ПолучитьТаблицуСписка(ОбъектЗапроса, ЭлементыФормыСписок)     
	
	ВидыСравнения = Новый Соответствие;
	ВидыСравнения.Вставить(ВидСравнения.Равно,			" = ");
	ВидыСравнения.Вставить(ВидСравнения.НеРавно,			" <> ");
	ВидыСравнения.Вставить(ВидСравнения.Больше,			" > ");
	ВидыСравнения.Вставить(ВидСравнения.Меньше,			" < ");
	ВидыСравнения.Вставить(ВидСравнения.БольшеИлиРавно,		" >= ");
	ВидыСравнения.Вставить(ВидСравнения.МеньшеИлиРавно,		" <= ");
	ВидыСравнения.Вставить(ВидСравнения.ВСписке,			" В ");
	ВидыСравнения.Вставить(ВидСравнения.НеВСписке,			" В ");
	ВидыСравнения.Вставить(ВидСравнения.ВИерархии,			" В ИЕРАРХИИ ");
	ВидыСравнения.Вставить(ВидСравнения.НеВИерархии,		" В ИЕРАРХИИ ");
	ВидыСравнения.Вставить(ВидСравнения.ВСпискеПоИерархии,		" В ИЕРАРХИИ ");
	ВидыСравнения.Вставить(ВидСравнения.НеВСпискеПоИерархии,	" В ИЕРАРХИИ ");
	ВидыСравнения.Вставить(ВидСравнения.Содержит,			" ПОДОБНО ");
	ВидыСравнения.Вставить(ВидСравнения.НеСодержит,			" ПОДОБНО ");
	ВидыСравнения.Вставить(ВидСравнения.ИнтервалВключаяГраницы,	" МЕЖДУ ");
	ВидыСравнения.Вставить(ВидСравнения.Интервал,			" МЕЖДУ ");
	ВидыСравнения.Вставить(ВидСравнения.ИнтервалВключаяНачало,	" МЕЖДУ ");
	ВидыСравнения.Вставить(ВидСравнения.ИнтервалВключаяОкончание,	" МЕЖДУ ");
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	ОбъектЗапроса.Ссылка
	|ИЗ
	|	"+ОбъектЗапроса+" КАК ОбъектЗапроса ";
	
	пОтбор = ЭлементыФормыСписок.Значение.Отбор;
	Если пОтбор.Количество() > 0 Тогда
		
		СтрокаОтбора = "ГДЕ ";
		Для Каждого ТекОтбор Из пОтбор Цикл
			
			Если ТекОтбор.Использование = Истина Тогда
				Если ТекОтбор.ВидСравнения = ВидСравнения.НеВСписке 
					ИЛИ ТекОтбор.ВидСравнения = ВидСравнения.НеВИерархии 
					ИЛИ ТекОтбор.ВидСравнения = ВидСравнения.НеВСпискеПоИерархии 
					ИЛИ ТекОтбор.ВидСравнения = ВидСравнения.НеСодержит Тогда 
					сНЕ = "НЕ ";
				Иначе 
					сНЕ = "";
				КонецЕсли;
				
				Если ВидыСравнения.Получить(ТекОтбор.ВидСравнения) = " МЕЖДУ " Тогда 
					СтрокаОтбора = СтрокаОтбора + сНе +"ОбъектЗапроса." + ТекОтбор.Имя + ВидыСравнения.Получить(ТекОтбор.ВидСравнения) +"&" + ТекОтбор.Имя + "С И &" + ТекОтбор.Имя + "По И ";
					Запрос.УстановитьПараметр(""+ТекОтбор.Имя+"С", ТекОтбор.ЗначениеС);
					Запрос.УстановитьПараметр(""+ТекОтбор.Имя+"По", ТекОтбор.ЗначениеПо);
					
					Если ТекОтбор.ВидСравнения = ВидСравнения.Интервал Тогда
						СтрокаОтбора = СтрокаОтбора + "ОбъектЗапроса." + ТекОтбор.Имя +"<> &" + ТекОтбор.Имя + "С И " + "ОбъектЗапроса." + ТекОтбор.Имя +"<> &" + ТекОтбор.Имя + "По И ";
					ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.ИнтервалВключаяНачало Тогда
						СтрокаОтбора = СтрокаОтбора + "ОбъектЗапроса." + ТекОтбор.Имя +"<> &" + ТекОтбор.Имя + "По И ";
					ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.ИнтервалВключаяОкончание Тогда 
						СтрокаОтбора = СтрокаОтбора + "ОбъектЗапроса." + ТекОтбор.Имя +"<> &" + ТекОтбор.Имя + "С И ";
					КонецЕсли;
				Иначе 	
					СтрокаОтбора = СтрокаОтбора + сНе +"ОбъектЗапроса." + ТекОтбор.Имя + ВидыСравнения.Получить(ТекОтбор.ВидСравнения) +" ( &" + ТекОтбор.Имя + ") И ";
					Запрос.УстановитьПараметр(ТекОтбор.Имя, ТекОтбор.Значение);
				КонецЕсли;
				
			КонецЕсли;
		КонецЦикла;
		Если СтрДлина(СтрокаОтбора)>4 Тогда 
			СтрокаОтбора = Лев(СтрокаОтбора, СтрДлина(СтрокаОтбора) - 2);
			Запрос.Текст = Запрос.Текст + СтрокаОтбора;
		КонецЕсли;
	КонецЕсли;
	
	пПорядок = ЭлементыФормыСписок.Значение.Порядок;
	Если пПорядок.Количество() > 0 И Не (пПорядок.Количество() = 1 И пПорядок.Получить(0).Имя = "Порядок") Тогда
		
		СтрокаПорядка = "УПОРЯДОЧИТЬ ПО ";
		Для Каждого ТекПорядок Из пПорядок Цикл
			Если ТекПорядок.Имя = "Порядок" Тогда
				Продолжить;
			КонецЕсли;
			СтрокаПорядка = СтрокаПорядка + ТекПорядок.Имя + ?(ТекПорядок.Направление = НаправлениеСортировки.Убыв, " УБЫВ", "") + ", ";
		КонецЦикла;
		
		Если СтрДлина(СтрокаПорядка)>15 Тогда 
			СтрокаПорядка = Лев(СтрокаПорядка, СтрДлина(СтрокаПорядка) - 2);
			Запрос.Текст = Запрос.Текст + СтрокаПорядка;
		КонецЕсли;
	КонецЕсли;
	
	Возврат Запрос.Выполнить().Выгрузить();
	
КонецФункции

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4200    Abysswalker    11    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    7815    DeerCven    15    

62

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    53135    dimanich70    84    

174

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7703    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    67744    atdonya    31    

72

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9654    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ojiojiowka 19.09.14 09:59 Сейчас в теме
Я правильно понимаю, что Ваша обработка работает только в случае указания таблицы в качестве источника данных динамического списка? Т.е. если указан произвольный запрос (что бывает довольно часто) от неё толку нет. Также если включён RLS разве не будет возникать ошибка из-за отсутствия слова "разрешенные" в запросе?
2. webstep 9 19.09.14 10:55 Сейчас в теме
Обработка дана только в качестве примера использования функции.
Да, функция предназначена для работы с динамическим списком и решает только одну специфическую проблему.
Кому будет мешать RLS, могут вставить в запрос слово "разрешенные".
Извините, я не стремился написать функцию, которая может помочь абсолютно всем. :)
3. BigB 193 19.09.14 23:38 Сейчас в теме
В 8.3.6 эта задача будет решаться очень просто.
Вот статья Получение данных динамического списка
4. ya.Avoronov 115 11.03.15 09:52 Сейчас в теме
Здорово помогло, спасибо!
Для отправки сообщения требуется регистрация/авторизация