|
Искусственный срез последних | ☑ | ||
---|---|---|---|---|
0
Demetres
14.11.14
✎
09:46
|
Добрый день! Нужно получить искусственный срез последних. В одну и туже секунду может быть несколько документов. Нужно выбрать тот который был проведен последним. После группировки по периоду делаю группировку по регистратору, это правильно?
ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ_ПраваПользователей.Сотрудник, ВТ_ПраваПользователей.Физлицо, ИмяРегистраПоКоторомуНуженСрез.Период, ИмяРегистраПоКоторомуНуженСрез.Регистратор, ИмяРегистраПоКоторомуНуженСрез.Состояние ПОМЕСТИТЬ ВТ_СостоянияПользователей ИЗ ВТ_ПраваПользователей КАК ВТ_ПраваПользователей ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИмяРегистраПоКоторомуНуженСрез КАК ИмяРегистраПоКоторомуНуженСрез ПО ВТ_ПраваПользователей.Сотрудник= ИмяРегистраПоКоторомуНуженСрез.Сотрудник И ВТ_ПраваПользователей.ПериодКонец >= ИмяРегистраПоКоторомуНуженСрез.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_СостоянияПользователей.Сотрудник, МАКСИМУМ(ВТ_СостоянияПользователей.Период) КАК Период ПОМЕСТИТЬ ВТ_ГруппировакаСостоянийПериод ИЗ ВТ_СостоянияПользователей КАК ВТ_СостоянияПользователей СГРУППИРОВАТЬ ПО ВТ_СостоянияПользователей.ПользовательРесурсов ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_СостоянияПользователей.Период, МАКСИМУМ(ВТ_СостоянияПользователей.Регистратор) КАК Регистратор, ВТ_СостоянияПользователей.ПользовательРесурсов ПОМЕСТИТЬ ВТ_ГруппировакаСостоянийСсылка ИЗ ВТ_СостоянияПользователей КАК ВТ_СостоянияПользователей ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ГруппировакаСостоянийПериод КАК ВТ_ГруппировакаСостоянийПериод ПО ВТ_СостоянияПользователей.Сотрудник= ВТ_ГруппировакаСостоянийПериод.Сотрудник И ВТ_СостоянияПользователей.Период = ВТ_ГруппировакаСостоянийПериод.Период СГРУППИРОВАТЬ ПО ВТ_СостоянияПользователей.Сотрудник, ВТ_СостоянияПользователей.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_СостоянияПользователей.Сотрудник, ВТ_СостоянияПользователей.Физлицо, ВТ_ГруппировакаСостоянийСсылка.Регистратор ИЗ ВТ_СостоянияПользователей КАК ВТ_СостоянияПользователей ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ГруппировакаСостоянийСсылка КАК ВТ_ГруппировакаСостоянийСсылка ПО ВТ_СостоянияПользователей.Сотрудник= ВТ_ГруппировакаСостоянийСсылка.Сотрудник И ВТ_СостоянияПользователей.Регистратор = ВТ_ГруппировакаСостоянийСсылка.Регистратор И ВТ_СостоянияПользователей.Период = ВТ_ГруппировакаСостоянийСсылка.Период Или нужно делать после группировки по периоду делать соединение по регистратору и сравнивать момент времени, и выбирать там где ЕСТЬ NULL ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ_ПраваПользователей.Сотрудник, ВТ_ПраваПользователей.Физлицо, ИмяРегистраПоКоторомуНуженСрез.Период, ИмяРегистраПоКоторомуНуженСрез.Регистратор, ИмяРегистраПоКоторомуНуженСрез.Состояние, ИмяРегистраПоКоторомуНуженСрез.МоментВремени ПОМЕСТИТЬ ВТ_СостоянияПользователей ИЗ ВТ_ПраваПользователей КАК ВТ_ПраваПользователей ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИмяРегистраПоКоторомуНуженСрез КАК ИмяРегистраПоКоторомуНуженСрез ПО ВТ_ПраваПользователей.Сотрудник= ИмяРегистраПоКоторомуНуженСрез.Сотрудник И ВТ_ПраваПользователей.ПериодКонец >= ИмяРегистраПоКоторомуНуженСрез.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_СостоянияПользователей.Сотрудник, МАКСИМУМ(ВТ_СостоянияПользователей.Период) КАК Период ПОМЕСТИТЬ ВТ_ГруппировакаСостоянийПериод ИЗ ВТ_СостоянияПользователей КАК ВТ_СостоянияПользователей СГРУППИРОВАТЬ ПО ВТ_СостоянияПользователей.ПользовательРесурсов ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_СостоянияПользователей.Период, ВТ_СостоянияПользователей.Регистратор, ВТ_СостоянияПользователей.ПользовательРесурсов ПОМЕСТИТЬ ВТ_ГруппировакаСостоянийСсылка ИЗ ВТ_СостоянияПользователей КАК ВТ_СостоянияПользователей ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ГруппировакаСостоянийПериод КАК ВТ_ГруппировакаСостоянийПериод ПО ВТ_СостоянияПользователей.Сотрудник= ВТ_ГруппировакаСостоянийПериод.Сотрудник И ВТ_СостоянияПользователей.Период = ВТ_ГруппировакаСостоянийПериод.Период ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СостоянияПользователей КАК ВТ_СоединениеМоментВремени ПО ВТ_СостоянияПользователей.Сотрудник= ВТ_СоединениеМоментВремени.Сотрудник И ВТ_СостоянияПользователей.Период = ВТ_СоединениеМоментВремени.Период И ВТ_СостоянияПользователей.Регистратор <> ВТ_СоединениеМоментВремени.Регистратор И ВТ_СостоянияПользователей.МоментВремени < ВТ_СоединениеМоментВремени.МоментВремени ГДЕ ВТ_СоединениеМоментВремени.Регистратор ЕСТЬ NULL ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_СостоянияПользователей.Сотрудник, ВТ_СостоянияПользователей.Физлицо, ВТ_ГруппировакаСостоянийСсылка.Регистратор ИЗ ВТ_СостоянияПользователей КАК ВТ_СостоянияПользователей ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ГруппировакаСостоянийСсылка КАК ВТ_ГруппировакаСостоянийСсылка ПО ВТ_СостоянияПользователей.Сотрудник= ВТ_ГруппировакаСостоянийСсылка.Сотрудник И ВТ_СостоянияПользователей.Регистратор = ВТ_ГруппировакаСостоянийСсылка.Регистратор И ВТ_СостоянияПользователей.Период = ВТ_ГруппировакаСостоянийСсылка.Период |
|||
1
СвинТуз
14.11.14
✎
09:48
|
купи себе книгу и почитай
в учебниках это есть сотри тот толмуд где регистры описываются |
|||
2
Demetres
14.11.14
✎
09:51
|
(1) спасибо за совет, не совсем понял что нужно СТИРАТЬ
|
|||
3
hhhh
14.11.14
✎
09:52
|
(2) буква М выпала
|
|||
4
Demetres
14.11.14
✎
09:56
|
(3) да я понял :) просто шутка (лопата)
Ну так что подскажите или придется книжку искать и ковырять, если честно лень немного. |
|||
5
manti
14.11.14
✎
10:09
|
(4) база самокат? У Вас при выполнении какого из запросов выбираются более-менее актуальные данные?
|
|||
6
Salimbek
14.11.14
✎
10:09
|
(4) Тут посмотри "Что есть срез последних в платформе?": http://helpf.pro/faq82/view/1499.html
|
|||
7
ДемонМаксвелла
14.11.14
✎
10:11
|
если регистраторы разных типов, то в пределах секунды ты их не отсортируешь
|
|||
8
Demetres
14.11.14
✎
10:17
|
(7) Почему не отсортирую, второй вариант вполне жизнеспособен
|
|||
9
Demetres
14.11.14
✎
10:25
|
(7) хотя наверное да, сейчас базу какую-нибудь сделаю проверю.
|
|||
10
ДемонМаксвелла
14.11.14
✎
10:27
|
я имею в виду, что повторяемость и предсказуемость сортировки не гарантирована
|
|||
11
Gantoha
14.11.14
✎
10:31
|
да, да ..если на тестовых данных получишь что работает, то это не значит что это будет всегда работать. Вообще в конечном счете если есть упорядочивающий признак , то время хорошо упорядочивает события, но если они происходят одновременно и все таки упорядочены между собой, то значит не хватает какого то еще атрибута который этот порядок описывает.
|
|||
12
Demetres
14.11.14
✎
10:38
|
Ребята так как же отобрать последний проведенный документ в одной секунде?
|
|||
13
Михаил Козлов
14.11.14
✎
10:40
|
(12) В каком смысле последний? (Последний предполагает упорядочивание).
|
|||
14
Demetres
14.11.14
✎
10:51
|
(13) В смысле если сделать срез последних регистра сведений то получить те же данные
|
|||
15
ДемонМаксвелла
14.11.14
✎
10:53
|
(14) ну и сделай срез последних регистра сведений
|
|||
16
Demetres
14.11.14
✎
11:04
|
(15) Так как это сделать??? Если тебе нужно сединиться с таблицей и для каждой строки срез на свою дату должен быть?
Если регистраторы разных типов то ни 1 ни 2 вариант в шапке не работает. Если есть идеи милости просим :) |
|||
17
Demetres
14.11.14
✎
11:16
|
(1) Можете что-то предложить, если честно то по моему нельзя это сделать в запросе (при условии что регистраторы разных типов).
|
|||
18
ДемонМаксвелла
14.11.14
✎
11:18
|
(16) тебе видимо нужен "срез последних на каждую дату в запросе" а не то что ты пишешь? ну так поищи в поиске, сто раз решалось.
для определенного набора измерений найти срез последних не проблема, а абстрактная задача "кто последний двинул регистр в эту секунду, и пофиг на измерения" - такая задача никому не нужна, и не решаема может я просто не понимаю, что ты хочешь. Но видимо не только я |
|||
19
Demetres
14.11.14
✎
11:26
|
(18) Так я и писал, искусственный срез последних, разве это не одно и тоже что срез последних на каждую дату в запросе? Нужно получить аналогичные данные как РегистрСведений.ИмяРегистра.СрезПоследних(&ТекДата) только для каждой строки, а в каждой строке &ТекДата разные.
Простите если плохо объяснил. |
|||
20
ДемонМаксвелла
14.11.14
✎
11:28
|
||||
21
Demetres
14.11.14
✎
11:29
|
(18) Во всех источниках там регистратор одного типа. И можно группировать по периоду и потом по ссылке, а у меня регистраторы разных типов.
(20) нет там такого |
|||
22
Salimbek
14.11.14
✎
11:30
|
(19) Цитирую первый абзац из ссылки в (6)
"1С 8.2 УП : Срез последних (остатки) на каждую дату Бывают ситуации, когда в запросе требуется получить остатки не на фиксированную дату (параметр - один на весь отчет), а на произвольную, (когда дата остатков в каждой строке своя). Существует несколько способов получить нужные данные. ..." и т.д. |
|||
23
Salimbek
14.11.14
✎
11:31
|
хм... в (20) то же самое
|
|||
24
ДемонМаксвелла
14.11.14
✎
11:32
|
(23) думаю миста первична, там авторы указаны
|
|||
25
Demetres
14.11.14
✎
11:37
|
(24) (22) Я только что попробовал вариант из (20) для запроса, не работаю они для регистратора с разными типами.
Группировки возвращают разные данные с данными если брать РегистрСведений.ИмяРегистра.СрезПоследних(&ТекДата) |
|||
26
Salimbek
14.11.14
✎
11:42
|
(25) х.з. я для себя делал так (пришлось потому, что Цены могут быть заданы как на конкретный магазин, так и на всю сеть разом):
|
|||
27
Demetres
14.11.14
✎
11:47
|
(26) Это понятно, а у меня в одни Период может несколько регистраторов (разных типов) записать для одного и того же набор разные Цены.
|
|||
28
ДемонМаксвелла
14.11.14
✎
11:48
|
(27) по одному и тому же полному набору измерений?
|
|||
29
Salimbek
14.11.14
✎
11:50
|
(27) А ты у меня в запросе увидел где-то привязку к типу Регистратора?
|
|||
30
Demetres
14.11.14
✎
11:50
|
(28) Да, но конфликта нет так как в регистре стоит Режим записи: "Подчинение регистратору".
|
|||
31
Demetres
14.11.14
✎
11:52
|
(28) Регистратор тоже получается измерение
|
|||
32
Demetres
14.11.14
✎
11:53
|
(29) нет, в (27) я дописал как в моем случае
|
|||
33
ДемонМаксвелла
14.11.14
✎
11:53
|
(30) и я о том же
|
|||
34
Demetres
14.11.14
✎
11:54
|
(33) Режим записи нет возможности менять
|
|||
35
Demetres
14.11.14
✎
11:55
|
(33) имел ввиду периодичность, простите. Периодичность должна быть по позиции регистратор.
|
|||
36
Demetres
14.11.14
✎
11:58
|
(28) Периодичность по позиции регистратора, нет ошибки при проведении в одну и ту же секунду.
|
|||
37
ДемонМаксвелла
14.11.14
✎
11:58
|
ладно, разбирайся. я на обед.
|
|||
38
Demetres
14.11.14
✎
12:00
|
(37) приятного аппетита :)
|
|||
39
Salimbek
14.11.14
✎
12:09
|
(38) Кстати говоря - любопытный вопрос, вот сделал я Переоценкой цену в 100 руб. и в тот же момент другой пользователь документом ХитраяПереоценка ставит цену в 200 руб. Какая цена в итоге будет правильной и действующей?
|
|||
40
Demetres
14.11.14
✎
12:13
|
(39) Правильная будет та которую выдаст РегистрСведений.ИмяРегистра.СрезПоследних() они же все равно запишутся в какой-то последовательности
|
|||
41
Salimbek
14.11.14
✎
12:31
|
(40) Ну если хочешь 100% задублировать, то, как указано в (20):
"Все это можно увидеть посмотрев технологический журнал с включенным режимом протоколирования запросов " т.е. посмотреть тут - какие запросы получаются на выходе и в своем запросе шлифовать до полного соответствия. |
|||
42
Demetres
14.11.14
✎
13:10
|
(41) А как его включить :) подскажите нубу
|
|||
43
Demetres
14.11.14
✎
14:01
|
(41) на работе не получится, прав нет, дома попробую, спасибо за идею
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |