Каталог решений - Функция перезагрузки Таблицы Значений по условиям

Функция перезагрузки Таблицы Значений по условиям

Функция перезагрузки Таблицы Значений по условиям

В наличии

Возвращает таблицу значений, отфильтрованную по условию в заданной колонке (равно, не равно, больше, меньше, содержит, равны две указанные колонки)

Категория:

Описание

Функция ПерегрузитьТЗ(пТЗ,пУсловие,пЗначение,пНомКол)   
	// пУсловие "=" или ">" или "<" или "<>" или "in,=К"
	// nНомКол - номер колонки в которой nЗначение должно удовлетворять условию
	// "=К" - сравнение значений в двух колонках, в этом случае nЗначение номер второй колоки    
	//--- возвращает ТЗ отфильтрованную по условиию в заданной колонке
	//-- пример вызова:  ТЗ.Загрузить(ПерегрузитьТЗ(ТЗ,"in",5,1));
	Nil=ПолучитьПустоеЗначение();
	Контроль="=,<,>,<>,in,=К";
	Контроль=СтрЗаменить(Контроль,",",РазделительСтрок);
	Ошибка=1;
	Для А=1 По СтрКоличествоСтрок(Контроль) Цикл 
		ТС=СокрЛП(СтрПолучитьСтроку(Контроль,А)); 
		Если ТС=пУсловие Тогда
			Ошибка=0;
			Прервать;
		КонецЕсли; 
	КонецЦикла;      
	Если Ошибка=1 Тогда 
		Сообщить("неверное условие "+пУсловие,"!");
		Возврат  Nil;
	КонецЕсли;
	вТЗ=СоздатьОбъект("ТаблицаЗначений");
	пУсловие=СокрЛП(пУсловие);
	вТЗ.Загрузить(пТЗ);
	вТЗ.УдалитьСтроки();
	Для А=1 По пТЗ.КоличествоСтрок() Цикл
		Если пУсловие="=К"  Тогда
			Если пТЗ.ПолучитьЗначение(А,пНомКол)=пТЗ.ПолучитьЗначение(А,пЗначение) Тогда 
				вТЗ.НоваяСтрока();
				Для Кол=1 по вТЗ.КоличествоКолонок() Цикл
					вТЗ.УстановитьЗначение(вТЗ.КоличествоСтрок(),Кол,пТЗ.ПолучитьЗначение(А,Кол));
				КонецЦикла;
			КонецЕсли;        
		ИначеЕсли пУсловие="="  Тогда
			Если пТЗ.ПолучитьЗначение(А,пНомКол)=пЗначение Тогда 
				вТЗ.НоваяСтрока();
				Для Кол=1 по вТЗ.КоличествоКолонок() Цикл
					вТЗ.УстановитьЗначение(вТЗ.КоличествоСтрок(),Кол,пТЗ.ПолучитьЗначение(А,Кол));
				КонецЦикла;
			КонецЕсли;
		ИначеЕсли пУсловие=">" Тогда   
			Если пТЗ.ПолучитьЗначение(А,пНомКол)>пЗначение Тогда 
				вТЗ.НоваяСтрока();      
				Для Кол=1 по вТЗ.КоличествоКолонок() Цикл
					вТЗ.УстановитьЗначение(вТЗ.КоличествоСтрок(),Кол,пТЗ.ПолучитьЗначение(А,Кол));
				КонецЦикла;
			КонецЕсли;
		ИначеЕсли пУсловие="<" Тогда  
			Если пТЗ.ПолучитьЗначение(А,пНомКол)<пЗначение Тогда 
				вТЗ.НоваяСтрока();
				Для Кол=1 по вТЗ.КоличествоКолонок() Цикл
					вТЗ.УстановитьЗначение(вТЗ.КоличествоСтрок(),Кол,пТЗ.ПолучитьЗначение(А,Кол));
				КонецЦикла;
			КонецЕсли;
		ИначеЕсли пУсловие="<>" Тогда
			Если пТЗ.ПолучитьЗначение(А,пНомКол)<>пЗначение Тогда 
				вТЗ.НоваяСтрока();
				Для Кол=1 по вТЗ.КоличествоКолонок() Цикл
					вТЗ.УстановитьЗначение(вТЗ.КоличествоСтрок(),Кол,пТЗ.ПолучитьЗначение(А,Кол));
				КонецЦикла;
			КонецЕсли; 
		ИначеЕсли пУсловие="in" Тогда  
			ТекСтр=Строка(пТЗ.ПолучитьЗначение(А,пНомКол));
			Если Найти(ТекСтр,пЗначение)>0 Тогда 
				вТЗ.НоваяСтрока();
				Для Кол=1 по вТЗ.КоличествоКолонок() Цикл
					вТЗ.УстановитьЗначение(вТЗ.КоличествоСтрок(),Кол,пТЗ.ПолучитьЗначение(А,Кол));
				КонецЦикла;
			КонецЕсли;
		КонецЕсли; 
	КонецЦикла;  
	Возврат вТЗ; 
КонецФункции 
has been added to your cart:
Оформление заказа