Имя: Пароль:
1C
1C 7.7
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?