powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Удаление строк из таблицы значений по заданному условию
21 сообщений из 21, страница 1 из 1
Удаление строк из таблицы значений по заданному условию
    #38065459
Сергей1981
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужен алгоритм удаления строк из таблицы значений по заданному условию(платформа 1с 8). На входе таблица:
Код Артикул
0001 432AB432
0002 321DC321
0003 634CG345
0004 345PC324
0005 324FQ543
0006 234PG244
0007 234GG432

Необходимо удалить все строки, в артикуле которых встречается символ "С" или символ "G".
Сделал обработку, но строки не удаляются почему-то. Помогите, пожалуйста.
Код:


Процедура КнопкаВыполнитьНажатие(Кнопка)
ТаблицаЗначений = Новый ТаблицаЗначений;
// создаем нужные колонки
ТаблицаЗначений.Колонки.Добавить("Код");
ТаблицаЗначений.Колонки.Добавить("Артикул");
// Добавим новую строку и зададим значения в колонках таблицы
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.Код = 0001;
НоваяСтрока.Артикул = "432AB432";
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.Код = 0002;
НоваяСтрока.Артикул = "321DC321";
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.Код = 0003;
НоваяСтрока.Артикул = "634CG345";
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.Код = 0004;
НоваяСтрока.Артикул = "345PC324";
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.Код = 0005;
НоваяСтрока.Артикул = "324FQ543";
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.Код = 0006;
НоваяСтрока.Артикул = "234PG244";
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.Код = 0007;
НоваяСтрока.Артикул = "234GG432";

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

Процедура ОсновныеДействияФормыУдалитьСтроки(Кнопка,Значение)
// удалим все строки по заданному условию
Сч = 0;
Пока Сч < ТаблицаЗначений.Количество() Цикл
НоваяСтрока = ТаблицаЗначений.Получить(Сч);
// заменить символы C, G на кавычки
НоваяСтрока.Артикул = СтрЗаменить(НоваяСтрока.Артикул, "C", """");
НоваяСтрока.Артикул = СтрЗаменить(НоваяСтрока.Артикул, "G", """");
Если НоваяСтрока = """" Тогда
// удалить строки, в которых присутствуют кавычки
ТаблицаЗначений.Удалить(НоваяСтрока);
Иначе
Сч = Сч + 1;
КонецЕсли;
КонецЦикла;

КонецПроцедуры
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38065554
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей1981,
НоваяСтрока - объект типа СтрокаТаблицыЗначений, и "Если НоваяСтрока = """" Тогда"
не имеет смысла, всегда Ложь.
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38065605
Diego_Iv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей1981,

Не нужно менять нужный символ на кавычки
Просто ищите нужный символ в строке:
Если Найти(НоваяСтрока.Артикул, "с") > 0 Тогда // удаляем эту строку

И строки ТЗ нужно обходить с конца до начала,
тогда не будет ошибок при удалении строк из этой ТЗ.
Т.е. цикл идет с количества строк в ТЗ до 1.
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38065663
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Diego_IvСергей1981,

Не нужно менять нужный символ на кавычки
Просто ищите нужный символ в строке:
Если Найти(НоваяСтрока.Артикул, "с") > 0 Тогда // удаляем эту строку

И строки ТЗ нужно обходить с конца до начала,
тогда не будет ошибок при удалении строк из этой ТЗ.
Т.е. цикл идет с количества строк в ТЗ до 1.

Это было в 7.7. В восьмерке можно удалять прямым перебором коллекции.
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38065698
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP,

ХМ, был увер что можно... А на практике глотает строки. :(
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38065708
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP,
а можно вообще лошадью походить. В первом цикле "для каждого" выбрать в массив строки, которые нужно удалить. Во втором цикле "для каждого" по выбранным строкам удалить их из исходной таблицы.
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38067512
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerAHDP,
а можно вообще лошадью походить. В первом цикле "для каждого" выбрать в массив строки, которые нужно удалить. Во втором цикле "для каждого" по выбранным строкам удалить их из исходной таблицы.

там "сдвиг" идет
перебор с конца нужно
может что-то и поменяется (поменялось в некоторых видах коллекций) но у меня эта привычка с 7ки и ни разу не пожалел о ней
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38067603
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Last1Cmen,
в том что я написал есть два цикла, но сдвига нет. Это не быстрое решение, но позволяет выдавить из себя семерочность. Потому что нет никаких Сч , +1 -1 , получить и так далее.
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38067661
nicktcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

Я делаю обычно так:

Для инд = 0 По ТаблицаЗначений.Количество()-1 Цикл
Если инд = ТаблицаЗначений.Количество() Тогда
Прервать;
КонецЕсли;
//определение предиката для проверки на необходимость удаления текущей строки ТаблицаЗначений[инд]
НужноУдалитьСтроку = .....
Если НужноУдалитьСтроку Тогда
ТаблицаЗначений.Удалить(инд)
инд = инд - 1;
КонецЕсли;
КонецЦикла;
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38067664
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Last1CmenjavapeckerAHDP,
а можно вообще лошадью походить. В первом цикле "для каждого" выбрать в массив строки, которые нужно удалить. Во втором цикле "для каждого" по выбранным строкам удалить их из исходной таблицы.

там "сдвиг" идет
перебор с конца нужно
может что-то и поменяется (поменялось в некоторых видах коллекций) но у меня эта привычка с 7ки и ни разу не пожалел о ней +1

С конца один цикл

Сч=ТаблицаЗначений.Количество()-1
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38067695
nicktcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с,

С начала тоже один цикл, только надо не забыть отконтролить условие прекращения перебора, чтобы индекс строки не вылетел за границы коллекции
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38067716
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прекратите)))
я же вроде объяснил почему написал вариант с двумя циклами.
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38067741
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nicktcher,
С начала тоже один цикл, только надо не забыть отконтролить условие прекращения перебора, чтобы индекс строки не вылетел за границы коллекции А вот это мне кажется работать не будет, разве что я не понял что такое "отконтролить условие прекращения перебора"
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38068278
nicktcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

Выше я привел пример кода, который прекрасно работает, не сомневайтесь. Многократно проверено). И в вашем случае это должно подойти, если я правильно понял заголовок топика.
А проверка на выход за границы коллекции - имеется в виду в примере первое условие в цикле и оператор "Прервать"
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38068294
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nicktcher,
я к заголовку топика отношения не имею. Просто подумал, что когда вы написалиС начала тоже один цикл, только надо не забыть отконтролить условие прекращения перебора, чтобы индекс строки не вылетел за границы коллекции, имели ввиду не тот способ, который уже привели, а какой-то еще.
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38068321
nicktcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

аа, ну да, понял, другой чел писал. Ну извините, коллега))
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38068494
rigus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если поля типизированы, то можно еще через запрос грохнуть лишние записи. Таблицу значений в запрос а затем условие наложить, и результат обратно в таблицу значений выгрузить. Хотя по мне, нужно уменьшать количество объектной техники с данными (т.к. это в доброй половине случаев приводит к существенной просадке по производительности) и делать так чтобы результат уже содержал то что нужно.
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38068506
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно еще впихнуть исходную таблицу значений в табличное поле, вывести список, распечатать, отдать в бухгалтерию, пусть они нужные строчки в тетрадку выпишут, потом тетрадку отсканировать, распознать, скопировать в эксель, из экселя в дбф, создать в конфе справочник, написать обработку которая туда загрузит данные из дбф, а потом вуаля - запросом выбрать данные из справочника в таблицу значений)
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38071883
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
мФильтр = Новый Массив;
мФильтр .Добавить( "C" );
мФильтр .Добавить( "G" );

Количество = ТаблицаЗначений.Количество() - 1;
Для Индекс = 0 По Количество Цикл
	Позиция = Количество - Индекс;
	Для Каждого Фильтр Из мФильтр Цикл
		Если Найти( ТаблицаЗначений[ Позиция ].Артикул, Фильтр ) Тогда
			ТаблицаЗначений.Удалить( Позиция );
			Прервать;
		КонецЕсли;
	КонецЦикла;
КонецЦикла;
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38071987
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaM,

Для Индекс = 0 По Количество Цикл
Позиция = Количество - Индекс;Кручу верчу запутать хочу)
...
Рейтинг: 0 / 0
Удаление строк из таблицы значений по заданному условию
    #38077073
vladimir9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДляУдаления = Новый Массив;

Для Каждого Строчка Из ТЗ Цикл
Если Найти(Строчка.Артикул, "C") ИЛИ Найти(Строчка.Артикул, "G") Тогда
ДляУдаления.Добавить(Строчка);
КонецЕсли;
КонецЦикла;

Для Каждого Строчка Из ДляУдаления Цикл
ТЗ.Удалить(Строчка);
КонецЦикла;
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Удаление строк из таблицы значений по заданному условию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]