|   |   | 
| 
 | v7: Позиционируется ли периодический методом ЗначениеНаДату ? | ☑ | ||
|---|---|---|---|---|
| 0
    
        e-9 21.10.14✎ 12:38 | 
        или просто возвращает значение?
 (можно конечно тестик набросать - но уж очень влом всякий чих платформы проверять; подскажите, а?) | |||
| 1
    
        Looser-1c 21.10.14✎ 12:39 | 
        нет     | |||
| 2
    
        e-9 21.10.14✎ 12:40 | 
        (1) спс!)     | |||
| 3
    
        e-9 21.10.14✎ 17:49 | 
        ...А корректно ли воспользоваться методом НайтиЗначение в цикле перебора исторических записей, т.е.:
 ИсторияПодразделения = СоздатьОбъект("Периодический"); ИсторияПодразделения.ИспользоватьОбъект("ВремПодр",СпрСотрудники); ИсторияПодразделения.ВыбратьЗначения(ДНач,ДКон); Пока ИсторияПодразделения.ПолучитьЗначение()=1 Цикл Если (ИсторияПодразделения.НайтиЗначение(ИсторияПодразделения.ДатаЗнач,0)=1) Тогда //мегакод ... ??? Дело в том, что на одну дату может быть несколько записей в истории; ВыбратьЗначения занудно перебирает все, что между ДНач и ДКон - а мне надо отсеять те записи в истории, которые не актуальны. Правильно ли я рассчитываю, что вышеприведенная конструкция даст то, что мне нужно? (сорри, времени не хватает замутить надежные тесты - вот и тереблю гур...) | |||
| 4
    
        Ёпрст гуру 21.10.14✎ 17:52 | 
        (3) бред какой то.. зачем при переборе всех значений, что то еще искать при этом ?     | |||
| 5
    
        Ёпрст гуру 21.10.14✎ 17:52 | 
        они и так все будут в выборке.     | |||
| 6
    
        e-9 21.10.14✎ 17:55 | 
        (5) ай, Епрст, напряги моск - неужели не очевидно, что как раз НЕ все нужны? На одну дату - N записей; значит, N-1 из них надо выкинуть
 вот в чем дело | |||
| 7
    
        e-9 21.10.14✎ 17:55 | 
        *ЕСЛИ на одну дату - N записей...     | |||
| 8
    
        Ёпрст гуру 21.10.14✎ 18:06 | 
        (6) я просто откомментил твой код.
 На счет найти в цикле - всё можно, в ложном удалении, например | |||
| 9
    
        Ёпрст гуру 21.10.14✎ 18:07 | 
        ну и.. чем просто значение на дату через Получить не устраивает ?
 все типовые на этом основаны (и пофик, сколько там записей было в пределах дня) | |||
| 10
    
        MishaD 21.10.14✎ 18:11 | 
        (9) а может ему не  последняя, а 8-я слева от 5-й сзади нужна     | |||
| 11
    
        e-9 21.10.14✎ 18:22 | 
        (9) именно так у меня и было! а теперь - рефакторинг:)
 во-первых, мне кажется, так Для Дт=Днач По ДКон Цикл МойРеквизит.Получить(Дт); КонецЦикла; - не по-пацански: у многих людей вообще одно значение за период. С другой стороны, по каждому кадровому перемещению (а в некоторых цехах у многих работников чуть ли не каждый день новое перемещение) надо вытянуть (из документа о перемещении) доп. инфу. (10) ага, типа того | |||
| 12
    
        Classic 21.10.14✎ 18:25 | 
        (11)
 А разве по документу не ищется? Что там СП говорит? | |||
| 13
    
        e-9 21.10.14✎ 18:29 | 
        (12) э?...
 в смысле, перебрать выборку документов КадровоеПеремещение - и где Сотрудник из нашего Подразделения (тот самый реквизит, который мучаю), оттуда все дергать? думал таким путем идти - но там свои заморочки. Хотелось бы все ж через периодический реквизит "войти"... | |||
| 14
    
        e-9 21.10.14✎ 18:56 | 
        (3) а вот фигушки (напрягся-таки потестить)
 в общем, первый раз ПолучитьЗначение()=1 выполняется, потом в цикле срабатывает НайтиЗначение() - и все, выборка периодики сбрасывается; по крайней мере, следующее ПолучитьЗначение() равно 0. Хотя в реквизите целая куча записей, в период с ДНач по ДКон!!! | |||
| 15
    
        Йохохо 21.10.14✎ 19:05 | 
        (14) в (0) ты не про это спрашивал     | |||
| 16
    
        e-9 22.10.14✎ 11:17 | 
        (15) а я в (14) и не ссылаюсь на (0):) я на (3) там ссылаюсь
 ...Великий Ёпрст! почему ты не напомнил про ОбратныйПорядок(1)?! Это и есть оно, решение (3)!!! | |||
| 17
    
        e-9 22.10.14✎ 11:18 | 
        типа так:
 //мечтаем перебрать всю периодику внутри некоего интервала, отбросив неактуальные записи ДКон = КонИнтервала; ДНач = 0; ТекДата = 0; //нуна для отбрасывания "гнилых" записей ИсторияПодразделения.ИспользоватьОбъект("ВремПодр",СпрСотрудники); ИсторияПодразделения.ОбратныйПорядок(1); Если ИсторияПодразделения.ВыбратьЗначения(НачИнтервала,ДКон) = 1 Тогда Пока ИсторияПодразделения.ПолучитьЗначение() = 1 Цикл //может быть несколько записей на одну дату, а нам нужна только ПОСЛЕДНЯЯ, актуальная запись - поэтому "листаем" Если ИсторияПодразделения.ДатаЗнач = ТекДата Тогда Продолжить; КонецЕсли; //тут любой г...код, но обязательно в том числе меняем ДНач и ДКон, в зависимости от своих потребностей ДНач = Макс(НачИнтервала,ИсторияПодразделения.ДатаЗнач); Для Дт=ДНач По ДКон Цикл //мучаем кого-то в это интервальчике КонецЦикла; //либо так ДКон = ДНач-1; ////либо этак //ДКон = ИсторияПодразделения.ДатаЗнач-1; Если ДКон < НачИнтервала Тогда Прервать; КонецЕсли; ТекДата = ИсторияПодразделения.ДатаЗнач; КонецЦикла; //конец перебора периодики КонецЕсли; //если вообще не было периодики за месяц, или закончилась датой позднее начала месяца Если (Число(ДНач) = 0) ИЛИ (Число(ДНач)>Число(НачИнтервала)) Тогда //то проверяем еще начало интервала - если был в подразделении, то Если ПринадлПодмножеству(СпрСотрудники.ВремПодр.Получить(НачИнтервала), Подразделение)=1 Тогда Для Дт=НачИнтервала По ДКон Цикл //опять спасаем вселенную КонецЦикла; //а если нам еще что-то надо от первой, перед НачИнтервала, записи в периодике Если (ИсторияПодразделения.НайтиЗначение(НачИнтервала,-1)=1) Тогда //то нет проблем КонецЕсли; КонецЕсли; КонецЕсли; | |||
| 18
    
        e-9 22.10.14✎ 11:20 | 
        "...зерна отольюся в пули,
 пули отольются в гири, таким ударным инструментом мы пробьем все стены в мире!" https://www.youtube.com/watch?v=sUOf-RrqEgU#t=217 | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |