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