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

Публикация № 57382

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

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

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. 06.11.08 09:47 Сейчас в теме
Вообще конечно, все это хорошо для маленьких таблиц.
Автор, убей вот этот код, потому что на больших таблицах он будет жутко тормозить:

вТЗ.Загрузить(пТЗ);
вТЗ.УдалитьСтроки();

Если что, то в моей библиотеке функций есть функция по копированию колонок, подвяжи ее.

К тому же непонятна суть затеи - если хочется оставить в ТЗ только нужные по условию строки, то не проще ли сначала отобрать массив ненужных строк, а затем его удалить, зачем все эти перезагрузки?

Предлагаю другой алгол:
1. Сначала отбираешь строки, не удовлетворяющие условию.
2. Потом их чикаешь.

Все, никаких перезагрузок.
7. Abadonna 3834 06.11.08 15:47 Сейчас в теме
(1)>то не проще ли сначала отобрать массив ненужных строк
И что ж ты все к семерке с восьмерочными мерками и методами? Нема такого в семерке
3. Vitek 06.11.08 13:23 Сейчас в теме
(2)Индексированная таблица рулит!
4. alexk-is 6423 06.11.08 14:32 Сейчас в теме
Если без использования внешних компонент, то посмотри http://infostart.ru/blogs/index.php?id=693&ref=34707
blogs/693 (7) рекомендую вариант alexk v.2
замени следующую строку на свои проверки
Код
Если УсловиеВыполняется(ТЗ.К) = 1 Тогда
Показать полностью
6. Abadonna 3834 06.11.08 15:42 Сейчас в теме
(4)>Если Найти(",=,<,>,<>,in,=К,", "," + пУсловие + "," ) = 0 Тогда
Ага! Например, были сиволы >> , и что твоя вернет? Что все зашибись?(!)
8. alexk-is 6423 06.11.08 23:07 Сейчас в теме
5. alexk-is 6423 06.11.08 14:38 Сейчас в теме
Код
   Nil=ПолучитьПустоеЗначение();
   Контроль="=,<,>,<>,in,=К";
   Контроль=СтрЗаменить(Контроль,",",РазделительСтрок);
   Ошибка=1;
   Для А=1 По СтрКоличествоСтрок(Контроль) Цикл 
      ТС=СокрЛП(СтрПолучитьСтроку(Контроль,А)); 
      Если ТС=пУсловие Тогда
         Ошибка=0;
         Прервать;
      КонецЕсли; 
   КонецЦикла;      
   Если Ошибка=1 Тогда 
      Сообщить("неверное условие "+пУсловие,"!");
      Возврат  Nil;
   КонецЕсли;
Показать полностью


замени на
Код
Если Найти(",=,<,>,<>,in,=К,", "," + пУсловие + "," ) = 0 Тогда
   Сообщить("Неверное условие " + пУсловие, "!");
   Возврат  ПолучитьПустоеЗначение();
КонецЕсли;
Показать полностью
Оставьте свое сообщение

См. также

Использование классов .Net в 1С для новичков 147

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Разработка внешних компонент Универсальные функции

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    62856    Serginio    104       

Процедура расшифровки ячейки таблицы в отчетах 1С 7.7 11

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования Универсальные функции

Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 1С 7.7.

24.09.2015    13795    Anzhey    13       

Получение характеристик и управление текущим процессом 1С на основе WMI 36

Статья Программист Нет файла v7.7 v8 1cv8.cf 1cv7.md Windows Бесплатно (free) Универсальные функции

Функционал для работы из 1С с текущим процессом класса Win32_Process. Пример получает текущее значение ОЗУ занятое процессом 1С. По описанной методике можно получать значения пиковых нагрузок на ОЗУ, время запуска текущей сессии 1С с точностью до миллисекунд. Определять загрузку активного ядра процессом и даже поменять приоритет самого процесса.

09.07.2012    18984    dusha0020    8       

Хитрость. Использование БУЛЕВО при OLE обмене/подключении из 7.7 к 8 17

Статья Системный администратор Программист Нет файла v7.7 v8 1cv8.cf 1cv7.md Windows Бесплатно (free) Перенос данных из 1С7.7 в 1C8.X Универсальные функции

Как известно, при OLE обмене доступны только типы СТРОКА, ЧИСЛО, ДАТА. А вот БУЛЕВО (ИСТИНА, ЛОЖЬ) использовать при подключении из 7.7 к 8 не получается. Как же быть? Есть хитрость, как использовать тип булево в семерке при обмене с 1С8! :)

28.09.2011    14066    bsturtle    9       

Быстрый поиск подчиненного документа, с помощью прямого запроса 1

Статья Программист Нет файла openconf 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

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

26.05.2011    11492    Vix    1       

Посчитать людей по XML-файлам, выгруженным для ПФ 2010 7

Инструменты и обработки Программист Бухгалтер Внешняя обработка (ert,epf) v77::Расчет 1С7:ЗиК БУ НУ Windows Управление персоналом (HRM) ФОМС, ПФ, ФСС Бесплатно (free) Обмен через XML Универсальные функции

Обработка считает и выводит людей, которые находятся в xml-файлах для пенсионного фонда. Также может служить "рыбой" для дополнительной обработки данных в файлах пенсионного фонда

24.01.2011    10416    81    kserdyukov    1       

Универсальный фильтр 8

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Универсальные функции

Удобный фильтр. Нет необходимости вешать на форму N-ое количество списков значений.

08.07.2010    8750    115    ShEvOvIcH    8       

Мьютексы в 1С 7.7 10

Статья Программист Нет файла v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Файловые протоколы обмена, FTP Универсальные функции

Существует ряд задач, которые требуют строго последовательного исполнения. Чаще всего это возникает при многопоточном программировании, в этом случае используются критические секции, но иногда надо синхронизировать и разные приложения - для этого существуют такие объекты ядра операционной системы как Мьютекс-ы. http://ru.wikipedia.org/wiki/Мьютекс В статье рассказывается как можно сделать аналогичный объект средствами 1С v7.7

02.07.2010    12265    Sk0rp    24       

Обработка для поиска Контрагентов 9

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Поиск данных Обработка справочников Универсальные функции

Не первая и не последняя.. Не лучшая, и не худшая. Просто вариант поиска контрагентов по нескольким словам или их частям в наименовании.

19.05.2010    8687    108    aka AMIGO    7       

Как получить GUID без v7plus.dll в Предприятии 7.7 10

Статья Программист Нет файла v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

Часто в терминальных сессиях у пользователю Windows не хватает прав на регистрацию v7plus.dll. Соответственно нельзя воспользоваться, например методом СоздатьGUID() класса V7SysInfo.

12.05.2010    12276    prolancer    5       

Алгоритм расчета периодов 3

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

Вычисление периодов в формате ГГММДД. Вычисление дат по формуле Дата + ГГММДД. Примечание: Даты передаем в виде 'ДД.ММ.ГГГГ', периоды - "ГГ-ММ-ДД". Пользуйтесь.

10.03.2010    8283    arithmometr    1       

Интервал дат прописью 8

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Универсальные функции

Иногда возникает необходимость подсчитать количество дней, недель, месяцев или лет в интервале дат и вывести результат прописью. Обработка предназначена для демонстрации работы функции ПолучитьИнтервалДат(Дата1,Дата2,Период) Используется стандартный файл прописи для рублей. Специально не оптимизировал функции, чтобы каждый мог настроить их под свои требования.

15.02.2010    7779    143    Vlan    3       

1С Предприятие 7.7 и Mozilla Thunderbird. Отправка писем из командной строки 5

Статья Системный администратор Программист Нет файла v77::ОУ v77::БУ 1cv7.md 1С7:Бух Windows Бесплатно (free) Универсальные функции Email

Клиент захотел чтобы у него из 1С формировались письма с вложениями и отправлялись через Mozilla Thunderbird. Из этого вышла маленькая процедура.

30.11.2009    12497    kasperok    15       

Транслитерация в латиницу 39

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

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

02.10.2009    24329    yuraer    17       

Альтернатива стандартному предупреждению(вопросу) 18

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Работа с интерфейсом Универсальные функции

Начальство решило, что на предупреждения оформляемые стандартными средствами 1С малоприметны... В результате родилась прикольная штучка... Вывод текста сообщения бАААААльшими буквами, цвет можно задавать. 7 кнопок видимость и текст задаются при вызове Возвращает текст нажатой кнопки..... ВК у нас не применяются...

28.08.2009    9158    59    nikakoy    29       

Создаем сортировку по подразделению в любом документе (Зарплата и Кадры 7.7) 3

Статья Программист Нет файла v77::Расчет 1С7:ЗиК Windows Бесплатно (free) Универсальные функции

Создаем сортировку по подразделению (Зарплата и Кадры 7.7) на примере документа Выплата заработной платы

27.05.2009    10800    Craig    67       

Напоминалка дня рождения по ИНН 2

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::БУ 1cv7.md Украина Windows Бесплатно (free) Разное Универсальные функции

Используя конфигурацию для сельского хозяйства в Украине, понадобилась напоминалка о днях рождения сотрудников. В самой конфигурации не предусмотрено поле "День рождения", но зато есть ИНН, который и был использован для этой цели. Не судите строго, это первая разработка, выложенная мной на Ваш сайт.

01.04.2009    8483    117    stalker    9       

Пакетный ввод на основании без изменения форм и модулей 20

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Универсальные функции

Обработка демонстрирует подход для ввода на основании большого количества документов без правки модулей, с вызовом метода "ОткрытьФорму" - что позволяет не перетягивать код из модуля формы документа, и не менять его...

10.10.2008    20969    1014    Fragster    22       

Горячая печать реквизитов (их значений ) документов с использованием FormEx 19

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Печатные формы документов Универсальные функции

Иногда хочется увидеть все реквизиты документа, в том числе и те, которые на форме отсутствуют. Особенно, если они автоматом понаустанавливались. Приведенный код позволяет по горячим клавишам CTRL+ALT+P получить распечатку ВСЕХ реквизитов, начиная от общих, заканчивая ТЧ. Код необходимо вставить в Глобальный модуль, или в Дополнительный глобальный модуль, подключенный с помощью Formex

14.04.2008    16253    Abadonna    11       

Конвертер таблиц из 1С (7.7) в MS Office Word 23

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Загрузка и выгрузка в Excel Работа с интерфейсом Универсальные функции

Обработка конвертирует печатную форму 1С в формат Word. Преобразование сложных таблиц проходит медленно. Проверено на Word 2003. Объединение - только горизонтальное. Не идеал, но приемлемо. Если нет параметра - открывается демо таблица.

10.12.2007    12706    219    Джуниор    8       

FormEx. Быстрый поиск в поле ввода 2.1 27

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Поиск данных Разработка внешних компонент Универсальные функции

Универсальный инструмент пользователя, требует FormEx v2.0.5.0 - http://dorex.pro/?projects&formex&download Реализация механизма быстрого поиска элемента по первым символам непосредственно в поле ввода. Ограничения: Не работает для полей ввода многострочной части.

26.09.2007    15478    261    item    27       

[МФ] Тривиальный шаблон обработки с использованием множественного фильтра (МФ) 17

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ 1cv7.md Windows Бесплатно (free) Универсальные функции

Надоело копи-пастить МФ... Простой шаблон обработки с использованием МФ. На форме - минимально требуемые реквизиты для типового МФ, в коде - обработка этих реквизитов... Т.е. - типа "облагороженный" кусок из кода типовой ТиС для быстрого клонирования для своих обработок

15.09.2006    15466    89    CheBurator    10       

Формирование штрихкодов (EAN-13) 54

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Розничная торговля Учет ТМЦ Бесплатно (free) Сканер штрих-кода Ценники Универсальные функции

Один из наиболее простых алгоритмов формирования штрихкодов с использованием специализированных шрифтов (BearRock). Обработка автоматически вычисляет контрольную цифру по коду и показывает на экране образец сформированного штрихкода.

10.04.2006    29557    1163    imsoftware    13