Имя: Пароль:
1C
1С v8
Как в запросе определить минимум разностей дат?
0 Prog111
 
26.05.17
11:21
Есть такая функция, в ней из периодического регистра сведений получаю записи. Мне нужна та запись, которая ближе всего находится к переданному параметру &Время (то есть разность может быть положительной и отрицательной, и нужна разность, где минимальный модуль у разности дат. Подскажите, как это реализовать, пока на самом начале запроса сижу)

Функция ПолучитьСостояниеВизита(Пациент, Время, СостояниеВизита)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    РАЗНОСТЬДАТ(ПосещенияПациентов.Период, &Время, СЕКУНДА) КАК Поле1,
    |    ПосещенияПациентов.Пациент,
    |    ПосещенияПациентов.СостояниеВизита
    |ИЗ
    |    РегистрСведений.ПосещенияПациентов КАК ПосещенияПациентов
    |ГДЕ
    |    ПосещенияПациентов.Период >= &НачалоПериода
    |    И ПосещенияПациентов.Период <= &КонецПериода
    |    И ПосещенияПациентов.Пациент = &Пациент
    |    И ПосещенияПациентов.СостояниеВизита = &СостояниеВизита";
    Запрос.УстановитьПараметр("Пациент", Пациент);
    Запрос.УстановитьПараметр("Время", Время);
    Запрос.УстановитьПараметр("СостояниеВизита", СостояниеВизита);
1 1dvd
 
26.05.17
11:24
варианта всего два. объединить выборки до Точки и после точки. Выбрать наименьшую
2 Рэйв
 
26.05.17
11:31
Выбрать максимум меньше &Время и минимум после &Время
Сравнивать Разностьдат в первой выборке и -Разностьдат  во второй
3 Рэйв
 
26.05.17
11:32
или во второй выборке от периода отнимать &Вермя - тогда минус не нужен
4 Михаил Козлов
 
26.05.17
11:34
Можно попробовать модуль реализовать через ВЫБОР...КОГДА
5 FIXXXL
 
26.05.17
11:35
помножь значения Поле1 те, что меньше 0 на -1, отсортируй по Поле1, возьми первую строку
6 alexey123perm
 
26.05.17
11:35
Выбор
Когда РазностьДат(Период, &Время,Секунда)>0 Тогда
  РазностьДат(Период, &Время,Секунда)
Иначе
  -РазностьДат(Период, &Время,Секунда)
Конец

После таких преобразований отриц. не будет, и самое близкое можно определить по "Минимум".
7 Sserj
 
26.05.17
11:36
или я чего то не понял или должно быть просто

ВЫБОР
   КОГДА ПосещенияПациентов.Период > Время Тогда
      РАЗНОСТЬДАТ(ПосещенияПациентов.Период, &Время, СЕКУНДА)
   ИНАЧЕ
      РАЗНОСТЬДАТ(&Время, ПосещенияПациентов.Период, СЕКУНДА)
КОНЕЦ КАК Поле1
8 alexey123perm
 
26.05.17
11:37
(7) Да, можно и так.
9 Prog111
 
26.05.17
11:40
Всем спасибо, буду тестить)