Роковая ошибка фильтрации

Изначально у меня фильтрация была в цикле перебора таблицы:

Для Каждого Накладная ИЗ Накладные Цикл
	
	Если СокрЛП(Накладная.Дата) = "" Тогда
		Продолжить;
	КонецЕсли;     
	
	Попытка
		Дата = СтрокаДаты_ДД_ММ_ГГГГ_ВДату(Накладная.Дата);
	Исключение
		Сообщить(Описание + ".  Неправильная дата: " + Накладная.Дата);
		Продолжить;
	КонецПопытки;
	
	//Пропускаем ненужные даты
	Если Дата < Дата1 ИЛИ  Дата > Дата2 Тогда
		Продолжить;
	КонецЕсли;
	
	...
	
КонецЦикла;

Решил удалять из таблицы ненужные даты сразу, перед загрузкой таблицы. Написал код:

Всего = ТЗ.Количество();

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

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

Ошибку диагностировал сразу и поправил (нужно было использовать И вместо Или):

Всего = ТЗ.Количество();

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

Досадная ошибка! Старайтесь тестировать на больших данных, тогда можете таких ошибок избежать.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *