сегодня наступил ровно на такие же грабли:
Thor писал(а) 25. Июля 2008 :: 09:23:Предварительные результаты.
1. Объект тестирования - значения периодического реквизита "Курс" всех элементов справочника "Валюты". В справочнике 5 валют, одна из них - национальная (на тест не повлияла), из остальных четырех по одной (Евро) курс имеется на каждый рабочий день в течение 4 лет, по остальным заполнение от 1 до 10 значений в месяц.
2. Тесты Было выполнено 3 теста, результат сравнивался с образцом -
ТекЭлемент.Курс.Получить(ТекДата). Тесты различаются условиями отбора по дате периодического значения -
1.
WHERE objid=спр.id AND id=' E' AND date<= '"+ДатаСтр+"'
2.
WHERE objid=спр.id AND id=' E' AND (date< '"+ДатаСтр+"' OR date= '"+ДатаСтр+"')
3.
WHERE idx_ID_OBJID_DATE_TIME_DOCID_PARTNO <
|(' E' || спр.id || '"+ДатаСтр+"Я')
3. Результаты теста.
Сражу скажу, что второй тест выдал полное совпадение по всей выборке (отдельный респект
Chieftain )
Первый тест выдавал расхождения на датах, у которых день заказчивался на 9 - 9, 19 и 29 числа месяца. Причем влияет только число - 9-ка в месяце (сентябрь) не добавила расхождений.
Третий тест выдал расхождения по всем валютам, кроме национальной и Евро, причем возвращались значения, относящиеся к курсам других валют
. Скорей всего причина в том, что в 3-м тесте ключ сравнения составной, т.е. выполнение условия происходит на значениях валюты с меньшим внутренним идентификатором (национальная валюта и евро имеют наименьшие идентификаторы).
моя ситуация:
1. есть справочник "Номенклатура", у него периодический реквизит "НоваяЦена", изменяется только документами.
2. для одного элемента в таблице 1sconst есть только одна запись для указанного периодического реквизита с датой 08.04.2008
3. получаю значение реквизита запросом вида
select value
from __1s_const as Конст
where date <= :ДатаЗначения
and id = :ПоследнееЗначение.Номенклатура.НоваяЦена
and objid = :Элемент
order by date desc
limit 1
при Дата:
1. 08.04.09 все правильно
2. 09.04.09 запрос пустой
3. 10.04.09 и далее все правильно
если заменить запрос, как указано выше, то все в порядке:
select value
from __1s_const as Конст
where (date < :ДатаЗначения or date = :ДатаЗначения)
and id = :ПоследнееЗначение.Номенклатура.НоваяЦена
and objid = :Элемент
order by date desc
limit 1
чудеса, да и только...
пока есть только одна зацепка: недавно упаковывал таблицу констант старой досовской утилиткой dbed, но вроде раньше с ней проблем не было.
есть мысль попробовать нарисовать тест, вдруг Саша Орефков сюда заглянет