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