Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
Нужен алгоритм удаления строк из таблицы значений по заданному условию(платформа 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; КонецЕсли; КонецЦикла; КонецПроцедуры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2012, 04:29 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
Сергей1981, НоваяСтрока - объект типа СтрокаТаблицыЗначений, и "Если НоваяСтрока = """" Тогда" не имеет смысла, всегда Ложь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2012, 08:50 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
Сергей1981, Не нужно менять нужный символ на кавычки Просто ищите нужный символ в строке: Если Найти(НоваяСтрока.Артикул, "с") > 0 Тогда // удаляем эту строку И строки ТЗ нужно обходить с конца до начала, тогда не будет ошибок при удалении строк из этой ТЗ. Т.е. цикл идет с количества строк в ТЗ до 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2012, 09:46 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
Diego_IvСергей1981, Не нужно менять нужный символ на кавычки Просто ищите нужный символ в строке: Если Найти(НоваяСтрока.Артикул, "с") > 0 Тогда // удаляем эту строку И строки ТЗ нужно обходить с конца до начала, тогда не будет ошибок при удалении строк из этой ТЗ. Т.е. цикл идет с количества строк в ТЗ до 1. Это было в 7.7. В восьмерке можно удалять прямым перебором коллекции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2012, 10:29 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
AHDP, ХМ, был увер что можно... А на практике глотает строки. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2012, 10:48 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
AHDP, а можно вообще лошадью походить. В первом цикле "для каждого" выбрать в массив строки, которые нужно удалить. Во втором цикле "для каждого" по выбранным строкам удалить их из исходной таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2012, 10:55 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
javapeckerAHDP, а можно вообще лошадью походить. В первом цикле "для каждого" выбрать в массив строки, которые нужно удалить. Во втором цикле "для каждого" по выбранным строкам удалить их из исходной таблицы. там "сдвиг" идет перебор с конца нужно может что-то и поменяется (поменялось в некоторых видах коллекций) но у меня эта привычка с 7ки и ни разу не пожалел о ней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 11:17 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
Last1Cmen, в том что я написал есть два цикла, но сдвига нет. Это не быстрое решение, но позволяет выдавить из себя семерочность. Потому что нет никаких Сч , +1 -1 , получить и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 11:58 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
javapecker, Я делаю обычно так: Для инд = 0 По ТаблицаЗначений.Количество()-1 Цикл Если инд = ТаблицаЗначений.Количество() Тогда Прервать; КонецЕсли; //определение предиката для проверки на необходимость удаления текущей строки ТаблицаЗначений[инд] НужноУдалитьСтроку = ..... Если НужноУдалитьСтроку Тогда ТаблицаЗначений.Удалить(инд) инд = инд - 1; КонецЕсли; КонецЦикла; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 12:19 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
Last1CmenjavapeckerAHDP, а можно вообще лошадью походить. В первом цикле "для каждого" выбрать в массив строки, которые нужно удалить. Во втором цикле "для каждого" по выбранным строкам удалить их из исходной таблицы. там "сдвиг" идет перебор с конца нужно может что-то и поменяется (поменялось в некоторых видах коллекций) но у меня эта привычка с 7ки и ни разу не пожалел о ней +1 С конца один цикл Сч=ТаблицаЗначений.Количество()-1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 12:19 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
Программист 1с, С начала тоже один цикл, только надо не забыть отконтролить условие прекращения перебора, чтобы индекс строки не вылетел за границы коллекции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 12:28 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
Прекратите))) я же вроде объяснил почему написал вариант с двумя циклами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 12:33 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
nicktcher, С начала тоже один цикл, только надо не забыть отконтролить условие прекращения перебора, чтобы индекс строки не вылетел за границы коллекции А вот это мне кажется работать не будет, разве что я не понял что такое "отконтролить условие прекращения перебора" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 12:39 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
javapecker, Выше я привел пример кода, который прекрасно работает, не сомневайтесь. Многократно проверено). И в вашем случае это должно подойти, если я правильно понял заголовок топика. А проверка на выход за границы коллекции - имеется в виду в примере первое условие в цикле и оператор "Прервать" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 16:37 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
nicktcher, я к заголовку топика отношения не имею. Просто подумал, что когда вы написалиС начала тоже один цикл, только надо не забыть отконтролить условие прекращения перебора, чтобы индекс строки не вылетел за границы коллекции, имели ввиду не тот способ, который уже привели, а какой-то еще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 16:46 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
javapecker, аа, ну да, понял, другой чел писал. Ну извините, коллега)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 16:55 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
Если поля типизированы, то можно еще через запрос грохнуть лишние записи. Таблицу значений в запрос а затем условие наложить, и результат обратно в таблицу значений выгрузить. Хотя по мне, нужно уменьшать количество объектной техники с данными (т.к. это в доброй половине случаев приводит к существенной просадке по производительности) и делать так чтобы результат уже содержал то что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 18:11 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
а можно еще впихнуть исходную таблицу значений в табличное поле, вывести список, распечатать, отдать в бухгалтерию, пусть они нужные строчки в тетрадку выпишут, потом тетрадку отсканировать, распознать, скопировать в эксель, из экселя в дбф, создать в конфе справочник, написать обработку которая туда загрузит данные из дбф, а потом вуаля - запросом выбрать данные из справочника в таблицу значений) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 18:17 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2012, 08:00 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
SashaM, Для Индекс = 0 По Количество Цикл Позиция = Количество - Индекс;Кручу верчу запутать хочу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2012, 10:35 |
|
||
|
Удаление строк из таблицы значений по заданному условию
|
|||
|---|---|---|---|
|
#18+
ДляУдаления = Новый Массив; Для Каждого Строчка Из ТЗ Цикл Если Найти(Строчка.Артикул, "C") ИЛИ Найти(Строчка.Артикул, "G") Тогда ДляУдаления.Добавить(Строчка); КонецЕсли; КонецЦикла; Для Каждого Строчка Из ДляУдаления Цикл ТЗ.Удалить(Строчка); КонецЦикла; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 10:02 |
|
||
|
|

start [/forum/topic.php?fid=28&gotonew=1&tid=1520068]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 139ms |

| 0 / 0 |
