Имя: Пароль:
1C
1С v8
Есть дата начала и дата окончания как узнать попала дата в этот период или нет?
0 EvgeniuXP
 
15.03.13
19:05
Есть дата начала и дата окончания (одна таблица) как узнать попала дата (другая таблица) в этот период или нет через запрос?
1 NcSteel
 
15.03.13
19:05
запрос
2 EvgeniuXP
 
15.03.13
19:06
(1) запросом как
3 EvgeniuXP
 
15.03.13
19:08
И второе:
Дата начала
01.01.2010
05.08.2010
08.12.2012
и т.д.

нужно получить таблицу:
01.01.2010   05.08.2012
05.08.2010   08.12.2012
08.12.2012   NULL (или текущая дата)
4 GROOVY
 
15.03.13
19:08
МЕЖДУ
5 EvgeniuXP
 
15.03.13
19:10
(4) между знаю - но в между надо подзапрос засунуть
6 Рыжий Лис
 
15.03.13
19:21
(3) ЛЕВОЕ СОЕДИНЕНИЕ
7 EvgeniuXP
 
15.03.13
20:19
(6) и какое условие?
8 NcSteel
 
15.03.13
20:35
(7) А < D and a>C
9 EvgeniuXP
 
15.03.13
20:45
левое соединение Период1 < Период2, далее группировка и получение минимального значения.
10 ilpar
 
15.03.13
20:48
Обычно такие задачки тестовыми делают...
а ты на сайт )
11 ilpar
 
15.03.13
20:50
(9) хотя прочитав пост 9 сливаюсь... Думать уже неохота было, не тудысь взел походу )
12 ilpar
 
15.03.13
20:51
Только не понял связь.
Ответ на пост (3) в посте (9)
(0) другой вопрос?
13 Aprobator
 
15.03.13
20:53
(7) между )
14 EvgeniuXP
 
15.03.13
20:58
(12) это таблицу я получил первую (дата начала, дата окончания)... теперь из второй таблицы надо определить попадают ли ее даты в первую таблицу (, если да - то выбрать.
15 Aprobator
 
15.03.13
21:03
Соединение по ... между
16 Vertalex
 
15.03.13
21:07
(3) Интересно, что второй столбец это поднятый на 1 позицию вверх - левый. А в левом - исходный столбец.

Вопрос ко всем - можно ли запросом (v.8) добавлять к исходной таблице колонку с инкрементом (значения 1,2,3 и т.д.)??
Тогда можно было бы сделать левое соединение по условию разницы (=1) между инкрементными колонками...
17 Vertalex
 
15.03.13
21:11
ответы про соединение по МЕЖДУ: в исходном условии (0) не говорилось произвести расстановку по условию, а дать ответ по каждой строке таблицы периодов и таблицы дат - входит дата или нет в период. Ведь так? Запросом это не просто сделать, мне кажется.
18 EvgeniuXP
 
15.03.13
21:17
(16) можно, для этого выбираешь Ссылка < Ссылка2 и группируешь, получаешь 1, 2, 3 и т.д.

(17) именно так.
19 Aprobator
 
15.03.13
21:18
Причем тут расстановка то? Есть хотя бы одно соединение,  то есть и вхождение.
20 Vertalex
 
15.03.13
21:31
(19) соединение работает по принципу "соединить (сопоставить, произвести расстановку) строки если выполнится условие". А это в задаче НЕ требуется. Нужно построчно (для каждой строки таблицы периодов и той-же (по порядку) строки таблицы проверяемых дат) сказать (в новом каком-то результирующем булевом столбце) - входит/не входит.
21 EvgeniuXP
 
15.03.13
21:34
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   _2_Периоды.ДатаНачала КАК ДатаНачала,
   _2_Периоды.ДатаОкончания КАК ДатаОкончания,
   _1_УникальныеДаты.Дата
ИЗ
   _1_УникальныеДаты КАК _1_УникальныеДаты
       ЛЕВОЕ СОЕДИНЕНИЕ _2_Периоды КАК _2_Периоды
       ПО (_1_УникальныеДаты.Дата МЕЖДУ _2_Периоды.ДатаНачала И _2_Периоды.ДатаОкончания)

УПОРЯДОЧИТЬ ПО
   ДатаНачала

всё
22 Vertalex
 
15.03.13
21:38
(21) - ну это же вроде и есть расстановка (периоды сопоставятся по уникальным датам). Я думал условие задачи таки другое (описал в (20))
23 Aprobator
 
15.03.13
21:40
(21) что и требовалось доказать. Отработку нулл еще тока добавить.
24 Vertalex
 
15.03.13
21:41
(18) - не понял как это... Вообще, интересно придумать как делать инкрементную колонку таблицы, чтобы при этом размер запроса не зависел от количества строк в таблице....
25 Vertalex
 
15.03.13
21:43
(23) - это было просто, теперь решите мой пример запросом (20) :)
26 Aprobator
 
15.03.13
21:44
(22) запрос чуток тока подрихтовать,немного модифицировать третье поле в выбрать и делов то.
27 Aprobator
 
15.03.13
21:47
Вернее запрос надо по менять чуток по другому, но суть та же, соединение ролляет.
28 ILM
 
гуру
15.03.13
21:51
Мужики, вы о чем пишите? Простое условие:

ГДЕ ПРОВЕРЯЕМАЯДАТА >= Т.ДАТАНАЧАЛА И ПРОВЕРЯЕМАЯДАТА   <= Т.ДАТАОКОНЧАНИЯ
29 Aprobator
 
15.03.13
21:53
Бгг
30 Vertalex
 
15.03.13
21:53
(27) повторю: при соединении происходит сопоставление по условию вхождения в период и строки с таблицы периодов "раскидываются" по своим строкам с уникальной датой.

А нужно, чтобы они шли также как и были + должна добавиться колонка с признаком - входит или не входит. Кодом это 2 секунды. Запросом - хз как.
31 Vertalex
 
15.03.13
21:55
Наверное, самый правильный ответ задачи (моей)- "запросом никак" :)
32 ILM
 
гуру
15.03.13
21:57
Условие перепишите в поле, результат будет  булево, вставите в выбор  будет признак.
33 EvgeniuXP
 
15.03.13
21:57
(24) левое соединение Т.Ссылка <= Т1.Ссылка, группируешь по ссылке сумма по количеству ссылка 1
34 EvgeniuXP
 
15.03.13
21:58
(+33) не сумма, просто количество (ссылка1)
35 ILM
 
гуру
15.03.13
22:03
Лучше 1  как поле и сумма(поле) как номер.
36 Vertalex
 
15.03.13
22:05
(32) - это все хорошо когда все в одной таблице, но таблица периодов и таблица уникальных дат - это две разные. Нужно сначала сделать прямое построчное сопоставление. Как?
37 ILM
 
гуру
15.03.13
22:21
Таблица проверяемых дат и таблица периодов?
Ха-ха,  

ВЫБРАТЬ ТОДИН.ПРОВЕРЯЕМАЯДАТА, ТДВА.ПЕРИОДНАЧАЛА, ТДВА.ПЕРИОДОКОНЧАНИЯ, ИСТИНА КАК ПРИЗНАК ИЗ ТАБЛИЦАДАТ КАК ТОДИН, ТАБЛИЦАПЕРИОДОВ КАК ТДВА
ГДЕ ТОДИН.ПРВЕРЯЕМАЯДАТА>= ТДВА.ДАТАНАЧАЛА И ТОДИН.ПРОВЕРЯЕМАЯДАТА  <= ТДВА.ДАТАОКОНЧАНИЯ
38 ILM
 
гуру
15.03.13
22:22
Что не так?
39 Vertalex
 
15.03.13
22:28
(35) так вроде получилось (инкремент появился). Интересный прием... что-то мне подсказывает что он будет работать не только для дат. Для каких еще типов он применим?


ВЫБРАТЬ
   ТаблицаДат.ПоследовательнаяДата,
   СУММА(1) КАК Инкремент
ИЗ
   Справочник.ТаблицаДат КАК ТаблицаДат
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ТаблицаДат КАК ТаблицаДат1
       ПО ТаблицаДат.ПоследовательнаяДата <= ТаблицаДат1.ПоследовательнаяДата

СГРУППИРОВАТЬ ПО
   ТаблицаДат.ПоследовательнаяДата
40 ILM
 
гуру
15.03.13
22:30
То что можно сравнить и то, что уникально в наборе данных.
41 ILM
 
гуру
15.03.13
22:33
Можно для любого праймари кея так делать. Группировка и сравнение могут быть и по группе полей, например чисел: номер передела. Номер затраты. Номер партии. И.т.д.
42 ILM
 
гуру
15.03.13
22:35
Если что, пишите на почту. Я спать у нас уже почти два часа ночи.
43 Vertalex
 
15.03.13
22:36
Зачем на почту, форум можно и завтра посетить :))
44 ILM
 
гуру
15.03.13
22:37
Занят сильно,проектов много)))
45 ILM
 
гуру
15.03.13
22:39
Можно еще и ускорить запрос раза в три, добавив два условия и связь между таблицами сделать. Какие отгадайте сами)))
46 Vertalex
 
15.03.13
22:44
(37) - тут я так понял перемножены таблицы и оставлены только строки с условием попадания в периоды. Немного не то. Вот пример.

таблица периодов
строка 1: с первого по пятое марта
строка 2: с первого по пятое апреля

таблица дат
строка 1: третье марта
строка 2: шестое апреля

Ожидаемый Результат
строка 1: с первого по пятое марта / третье марта / Истина
строка 2: с первого по пятое апреля / шестое апреля / Ложь
47 ILM
 
гуру
16.03.13
07:33
Выбрал истину, а потом если не входит в массив, то.... Ну вы сами уже знаете ответ
48 Mishell
 
17.03.13
12:19
А если так:
Таблицы передаются в запрос в параметры (Таблица1, Таблица2)
Таблица1 содержит периоды, колонки Дата1 и Дата2,Таблица2 даты для которых необходимо определить их вхождение, в результат попадут даты попавшие в интервалы, при желании можно выбрать и сами интервалы.
ВЫБРАТЬ
  Таблица1.Дата1,
  Таблица1.Дата2
ПОМЕСТИТЬ Таблица1
ИЗ
  &Таблица1 КАК Таблица1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
  Таблица2.Дата
ПОМЕСТИТЬ Таблица2
ИЗ
  &Таблица2 КАК Таблица2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
  Таблица2.Дата
ИЗ
  Таблица2 КАК Таблица2
     ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица1 КАК Таблица1
     ПО (Таблица2.Дата МЕЖДУ Таблица1.Дата1 И Таблица1.Дата2)
49 Barchuk
 
17.03.13
12:26
В рарус собеседование проходишь что ли?