Имя: Пароль:
1C
1С v8
Как заполнить предыдущие строки или следующие в таблице значений
0 Ayvengo
 
07.08.12
17:33
Собственно говоря есть таблица с колонками "Ключ", "Значение", где Ключ - это дата, значение - это структура. Это в принципе соответствие, но с возможностью сортировки - это обязательное условие - сортировка.

Таблица выглядит так:

14.06.2012 4:04:00    
14.06.2012 4:05:00    
14.06.2012 4:06:00    
14.06.2012 4:07:00    
14.06.2012 4:08:00    Структура
14.06.2012 4:09:00    Структура
14.06.2012 4:10:00    Структура
14.06.2012 4:11:00    Структура
14.06.2012 4:12:00    Структура
14.06.2012 4:13:00    
14.06.2012 4:14:00    Структура
14.06.2012 4:15:00    Структура
14.06.2012 4:16:00    
14.06.2012 4:17:00    Структура
14.06.2012 4:18:00    Структура
14.06.2012 4:19:00    
14.06.2012 4:20:00    Структура
14.06.2012 4:21:00    
14.06.2012 4:22:00    

Как вы заметили, есть строки, где нет структуры. Мне нужно каким-то способом заполнить эти пустые значения. Нужно, что бы структура из 4:08:00 попала во все, что выше., структура что в 4:14:00 должна попасть в 4:13 и т.д.

У меня пока такой вариант: отсортировать по убыванию и если значение пустое, то заполняем его тем, что сохранено. Беда в том, что у меня остаются первые пустые строки ... как бы их покрасивее заполнить...
1 Kashemir
 
07.08.12
17:35
Реши проблему запросом - после перепроставь значения структур
2 Ayvengo
 
07.08.12
17:42
Ну если кто понял понял, поделитесь.. так то я решил проблему, но возможно кривовато и не очень красиво :(
3 Kashemir
 
07.08.12
17:58
+(1) По условию задачи исходим что у тебя все значения ключа в таблицы уникальны и упорядочены.

Добавляем булеву колонку "ЕстьЗначение" скармливаем запросу


ВЫБРАТЬ
   ТЗ.Ключ,
   ТЗ.ЕстьЗначение
ПОМЕСТИТЬ ТЗ
ИЗ
   &ТЗ КАК ТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТЗСКлючами.Ключ,
   ТЗСИндексами.ИндексСтроки
ИЗ
   (ВЫБРАТЬ
       ВложенныйЗапрос.Ключ КАК Ключ,
       ЕСТЬNULL(ВложенныйЗапрос.Ключ1, ВложенныйЗапрос.Ключ2) КАК КлючПоляЗначения
   ИЗ
       (ВЫБРАТЬ
           ТЗ.Ключ КАК Ключ,
           МАКСИМУМ(ПредыдущееЗначение.Ключ) КАК Ключ1,
           МИНИМУМ(СледующееЗначение.Ключ) КАК Ключ2
       ИЗ
           ТЗ КАК ТЗ
               ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ПредыдущееЗначение
               ПО (ПредыдущееЗначение.ЕстьЗначение = ИСТИНА)
                   И ТЗ.Ключ >= ПредыдущееЗначение.Ключ
               ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК СледующееЗначение
               ПО (СледующееЗначение.ЕстьЗначение = ИСТИНА)
                   И ТЗ.Ключ <= СледующееЗначение.Ключ
       
       СГРУППИРОВАТЬ ПО
           ТЗ.Ключ) КАК ВложенныйЗапрос) КАК ТЗСКлючами
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ТЗ.Ключ КАК Ключ,
           КОЛИЧЕСТВО(ТЗ1.Ключ) КАК ИндексСтроки
       ИЗ
           ТЗ КАК ТЗ
               ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ1
               ПО ТЗ.Ключ > ТЗ1.Ключ
       
       СГРУППИРОВАТЬ ПО
           ТЗ.Ключ) КАК ТЗСИндексами
       ПО ТЗСКлючами.КлючПоляЗначения = ТЗСИндексами.Ключ


и получаем новую таблицу:  Ключ+ИндексСтроки
добавляем колонку Значение - обходим таблицу и добавляем данные структур из базовой таблицы по индексу строк.

Если бы исходная таблица сразу была с примитивными типами (а не структурой) - можно было обойтись одним запросом.