Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Удаление строк из таблицы значений по заданному условию / 21 сообщений из 21, страница 1 из 1
05.12.2012, 04:29
    #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
05.12.2012, 08:50
    #38065554
pail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк из таблицы значений по заданному условию
Сергей1981,
НоваяСтрока - объект типа СтрокаТаблицыЗначений, и "Если НоваяСтрока = """" Тогда"
не имеет смысла, всегда Ложь.
...
Рейтинг: 0 / 0
05.12.2012, 09:46
    #38065605
Diego_Iv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк из таблицы значений по заданному условию
Сергей1981,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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