|   |   | 
| 
 | 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?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |