![]() |
![]() |
![]() |
|
v7: Получить реквизит справочника на дату (не периодический) | ☑ | ||
---|---|---|---|---|
0
Масянька
22.09.15
✎
13:40
|
День добрый!
Как лучше получить значение реквизита справочника на дату? Реквизит не периодический (и не предлагать). Интересует сам алгоритм. Спасибо. |
|||
1
ДенисЧ
22.09.15
✎
13:41
|
Если реквизит не периодический - тогда никак
|
|||
2
Aleksey
22.09.15
✎
13:42
|
Легко. включаем версионность и смотрим на любую дату
|
|||
3
ДенисЧ
22.09.15
✎
13:42
|
(2) Что включаем? В 77?
|
|||
4
HawkEye
22.09.15
✎
13:44
|
(0) см 1.. никак
|
|||
5
Карст
22.09.15
✎
13:44
|
поиск ссылок на объекты - где участвует ... имхо только так
|
|||
6
Масянька
22.09.15
✎
13:44
|
(1) Блин - забыла: реквизит сам дата.
Кроме, перебора и сравнение есть еще что-нибудь? |
|||
7
Карст
22.09.15
✎
13:45
|
(4) не совсем правда ;))
|
|||
8
HawkEye
22.09.15
✎
13:45
|
+4 либо создать справочник, и писать в него при записи значение реквизита... та-же периодичность но самописная...
|
|||
9
ДенисЧ
22.09.15
✎
13:46
|
(6) Так.. Масяня... Или ты перестаёшь бредить и описываешь полностью свою структуру данных... Или сидишь в луже и не отсвечиваешь.
|
|||
10
Масянька
22.09.15
✎
13:46
|
(8) Извиняюсь - забыла. См. (6).
|
|||
11
HawkEye
22.09.15
✎
13:46
|
(6) это ничего не меняет...
|
|||
12
НЕА123
22.09.15
✎
13:46
|
(6)
запрос ? |
|||
13
Масянька
22.09.15
✎
13:47
|
(9) Будешь на личности переходить - поцарапаю...
|
|||
14
HawkEye
22.09.15
✎
13:47
|
(6) что перебирать то?
|
|||
15
ДенисЧ
22.09.15
✎
13:47
|
(13) Вах... Какая страстная женчина... Пишу из-под стола... Весь трясусь...
|
|||
16
Масянька
22.09.15
✎
13:47
|
(11) Почему?
В справочнике есть записи, у каждой записи есть дата. Нужно получить запись с датой на заданную. |
|||
17
spectre1978
22.09.15
✎
13:48
|
(16) запросом можно
|
|||
18
1Сергей
22.09.15
✎
13:48
|
что такое в Вашем понимание "значение непериодического реквизита справочника на дату"?
|
|||
19
Масянька
22.09.15
✎
13:48
|
+ (16) Вернее, ближайшую к заданной.
|
|||
20
oslokot
22.09.15
✎
13:48
|
прямым
|
|||
21
шаэс
22.09.15
✎
13:49
|
(16) блин, ну это совсем другая постановка задачи...
|
|||
22
1Сергей
22.09.15
✎
13:49
|
ВыбратьЭлементыПоРеквизиту?
|
|||
23
Масянька
22.09.15
✎
13:49
|
(18) Например:
та, 12.09.2011 ре, 25.12.2012 пи, 01.01.2013 |
|||
24
spectre1978
22.09.15
✎
13:50
|
Обрабатывать НеПомеченныеНаУдаление;
ТекЭлем = Справочник.ТвойСправочник.ТекущийЭлемет; ЗначениеДата = Справочник.ТвойСправочник.ЭлементДата; Группировка ТекЭлем; Условие (ЗначениеДата = НужнаяДата); |
|||
25
Масянька
22.09.15
✎
13:50
|
(21) Я всё утро сижу... Думаю... А не приходят мысли... :(((
|
|||
26
spectre1978
22.09.15
✎
13:50
|
+ (24) или НайтиПоРеквизиту ()
|
|||
27
1Сергей
22.09.15
✎
13:51
|
(25) перебором давно бы уже сделала
|
|||
28
Масянька
22.09.15
✎
13:51
|
(22) (26) Там разве не точное соответствие?
|
|||
29
spectre1978
22.09.15
✎
13:51
|
да зачем перебором-то? НайтиПоРеквизиту () чем плох?
|
|||
30
шаэс
22.09.15
✎
13:51
|
(25) а какие мысли, если нет уверенности, что заданная дата есть в записях справочника? только полностью ТЗ с разницей по датам и сортировка по наименьшей разнице
|
|||
31
Масянька
22.09.15
✎
13:52
|
По примеру в (23):
нужно получить на дату 25.12.2011 -> та, 12.09.2011 |
|||
32
dk
22.09.15
✎
13:53
|
определись с задачей
получить точно в дату получить ближайшую по дате получить не ранее даты получтьи не позже даты |
|||
33
Масянька
22.09.15
✎
13:53
|
(27) Не нравится мне...
|
|||
34
spectre1978
22.09.15
✎
13:54
|
(31) вона чо, Михалыч... Тогда не так-то легко
|
|||
35
Масянька
22.09.15
✎
13:54
|
(32) А что не понятно в (31)?
|
|||
36
шаэс
22.09.15
✎
13:54
|
(33) ты же даже приблизительно устраивающую разницу не знаешь, чем тебе может не нравится перебор?
|
|||
37
Масянька
22.09.15
✎
13:55
|
(36) Не кошерно как-то... ИМХО.
|
|||
38
spectre1978
22.09.15
✎
13:56
|
Тогда если только выгрузить справочник в ТЗ, отсортитровав его по этому реквизиту, и реализовать бинарный поиск по критерию попадания нужной даты между двумя соседними.
|
|||
39
Масянька
22.09.15
✎
13:56
|
А никто не знает алгоритма Получить для периодического реквизита?
|
|||
40
spectre1978
22.09.15
✎
13:56
|
так будет гораздо быстрее чем перебором
|
|||
41
1Сергей
22.09.15
✎
13:56
|
(37) бей жидов, спасай Россию!
|
|||
42
oslokot
22.09.15
✎
13:57
|
(39) там небось, отсортированная тз по дате, вот и весь алгоритм
|
|||
43
dk
22.09.15
✎
13:58
|
(35) тем что в (31) подходят 2 варианта
получить ближайшую по дате получтьи не позже даты |
|||
44
spectre1978
22.09.15
✎
14:03
|
(39) нужно будет выгрузить в ТЗ две колонки - дату по возрастанию и соответствующий ей ТекущийЭлемент справочника.
Затем сделать бинарный поиск по дате. Т.е. сначала берем первую и последнюю строки ТЗ. Проверяем, входит ли дата между датами в этих строках. Если входит, то бьем на два интервала (1; половина таблицы) и (половина таблицы + 1; вся таблица). Положим, в первый интервал не попадает - исключаем из рассмотрения. Далее так же бьем второй интервал. И так до тех пор пока не останется последний интервал который уже не бьется. |
|||
45
Масянька
22.09.15
✎
14:03
|
А индексированную таблицу (в данном варианте) никто не юзал?
|
|||
46
spectre1978
22.09.15
✎
14:04
|
(45) мы юзаем штатные средства семерки или как?
|
|||
47
Масянька
22.09.15
✎
14:04
|
(46) Не только штатные :)
|
|||
48
spectre1978
22.09.15
✎
14:06
|
(47) ну тогда можно посмотреть что на эту тему в 1С++ есть, может как-то проще можно. Но идея вот такая. Собственно, тот же индекс, только с двоичным поиском, а не с Б-деревом, как принято в индексах.
|
|||
49
ADirks
22.09.15
✎
14:22
|
например, схематично
SELECT ВладелецПериодики.ID, Периодика.Значение FROM ВладелецПериодики LEFT JOIN ( SELECT Владелец, Max(Дата) спрПериодика WHERE Дата < :ДатаП GROUP BY Владелец ) Периодика_макс ON Периодика_макс.Владелец = ВладелецПериодики.ID LEFT JOIN спрПериодика ON Периодика.Владелец = ВладелецПериодики.ID AND Периодика.Дата = Периодика_макс.Дата |
|||
50
spectre1978
22.09.15
✎
14:26
|
Да, если база SQL и можно делать прямые запросы, то средствами SQL решается вопрос
|
|||
51
Масянька
22.09.15
✎
14:27
|
(49) Вот без этого - однозначно. Не получается у меня.
(50) Нет. Dbf. |
|||
52
spectre1978
22.09.15
✎
14:29
|
(51) тогда (44)
|
|||
53
Масянька
22.09.15
✎
14:31
|
(52) Уже индексированную таблицу пробую.
|
|||
54
ADirks
22.09.15
✎
14:33
|
ну если ДБФ, то историю лучше документами делать - для документов можно выборку с условием <= делать
|
|||
55
spectre1978
22.09.15
✎
14:38
|
(53) скорее всего станцует, там есть НайтиБлижайшуюБольше /
НайтиБлижайшуюМеньше. Правда, есть узкое место - выгрузка из справочника, может быть долго. Ну и расход памяти. |
|||
56
Масянька
22.09.15
✎
14:59
|
(55) Не просто станцует... Вальсирует :))))))
Всем спасибо! |
|||
57
Aleksey
22.09.15
✎
15:01
|
(3) А в чем проблема, допилить и включить?
|
|||
58
Гёдза
22.09.15
✎
15:35
|
Срез последних по справочнику в 7.7?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |