1. user1145086 06.11.19 18:22 Сейчас в теме

Срез по одному измерению

Добрый вечер, Как можно получить Срез последних по Одному измерению из регистра сведений?
Например, два измерения: Сотрудник и ДокументОснование.
(срез по сотруднику).
Найденные решения
13. DmitriyPopow 32 06.11.19 19:34 Сейчас в теме
окей. а из вашего примера какая запись последняя?) док5 или док8 и по какому принципу определяется? по дате? вытащите дату и по МАКС отбор из (9) логики. может регистр не правильно спроектирован? если он не дает ответа на вопрос? может Период должен быть с Временем? и тогда все будет решено сразу
alex-l19041; darkmessiahan; user1145086; +3 Ответить
Остальные ответы
Избранное Подписка Сортировка: Древо
2. nomad_irk 41 06.11.19 18:44 Сейчас в теме
(1) Как обычно, либо определите, какой именно документ основание вас интересует и сформируйте срез последних самостоятельно.
5. user1145086 06.11.19 19:05 Сейчас в теме
(2)но мне документ основание не нужен, только последнюю запись, если их больше двух на дату среза
6. nomad_irk 41 06.11.19 19:12 Сейчас в теме
(5) В таком случае делайте срез последних вручную:

ВЫбрать Максимум(Период) КАК период, Сотрудник ИЗ Регистр.СрезПоследних() СГРУППИРОВАТЬ ПО Сотрудник.
7. user1145086 06.11.19 19:15 Сейчас в теме
(6)в таком случае ресурс тоже придётся взять как Максимум? И получится ли он от последней записи, если на по этим изменениям две записи на период среза
8. nomad_irk 41 06.11.19 19:17 Сейчас в теме
(7)нет, вы ж запросом только нужные вам поля выбираете, если не нужен период, то только сотрудника можно выбрать или если отбор задан по сотруднику, то сразу выбирать Максимум(Период)
3. darkmessiahan 105 06.11.19 18:55 Сейчас в теме
Название регистра и изменение заменить на свое.
Наверное нужен отбор по сотруднику
//получить последнюю цену по заданной номенклатуре

//назначенную до 31.03.2017 г. (включительно)

Запрос = Новый Запрос;

Запрос.Текст =

    "ВЫБРАТЬ

    |   ЦеныСрезПоследних.Цена

    |ИЗ

    |   РегистрСведений.Цены.СрезПоследних(

    |       ,

    |       

    |   ) КАК ЦеныСрезПоследних";



//Запрос.УстановитьПараметр("ПоДату", '20170331');

//Запрос.УстановитьПараметр("Номенклатура", Номенклатура);



Выборка = Запрос.Выполнить().Выбрать();



Если Выборка.Следующий() Тогда

    Сообщить(Выборка.Цена);

КонецЕсли
Показать

Вы бы написали ваш запрос, и что получается, было бы понятна суть проблемы
4. user1145086 06.11.19 19:03 Сейчас в теме
(3)например,
06.11.19 Сотрудник1 Док5, - Ресурсы
06.11.19 Сотрудник1 Док8, - Ресурсы
Хотелось бы получить последнюю запись по этому сотруднику.
9. DmitriyPopow 32 06.11.19 19:19 Сейчас в теме
Если делаем выборку по срезу последних, но не ставим отбор по всем измерениям то получаем не одну запись
для получения именно последней по одному измерению 1) получаем срез последних по сотруднику
06.11.19 Сотрудник1 Док5 - Ресурс
06.11.19 Сотрудник1 Док8 - Ресурс
Помещаем в ВреТабл
В втором запросе выбираем нашу времТабл а на закладке условия указываем что (Период, сотрудник) в (Максимум(Период), Сотрудник из ВремТабл сгруппировать по Сотрудник)
Но в вашем примере выше обе записи одной датой, значит используйте в условии еще и макс по Документу, Хотя может у вас Период имеет состав типа ДатаВремя и тогда все норм будет.
user1145086; +1 Ответить
11. user1145086 06.11.19 19:29 Сейчас в теме
(9)но все таки, может попасться либо Док5, либо Док8. (поскольку документ основание имеет составной тип).
Не получится же сделать всегда последнюю запись, То-есть Док8?
13. DmitriyPopow 32 06.11.19 19:34 Сейчас в теме
окей. а из вашего примера какая запись последняя?) док5 или док8 и по какому принципу определяется? по дате? вытащите дату и по МАКС отбор из (9) логики. может регистр не правильно спроектирован? если он не дает ответа на вопрос? может Период должен быть с Временем? и тогда все будет решено сразу
alex-l19041; darkmessiahan; user1145086; +3 Ответить
14. user1145086 06.11.19 19:43 Сейчас в теме
(13)спасибо большое!!) Просто в режиме предприятия в этом регистре Док8 и был последним, не подумал про дату документа
15. nomad_irk 41 06.11.19 19:58 Сейчас в теме
(9)К чему такие трудности? не нужны никакие временные таблицы.
Выбрать Максимум(Период) КАК период, Сотрудник ИЗ Регистр.СрезПоследних() СГРУППИРОВАТЬ ПО Сотрудник
16. DmitriyPopow 32 07.11.19 08:21 Сейчас в теме
(15) в вашем решении не учитывается измерение Документ, его тоже надо брать максимум, да и даже если мы возьмем Максимум от даты документа, то тогда мы не узнаем сам документ
17. nomad_irk 41 07.11.19 08:38 Сейчас в теме
(16)Если нужен именно сам документ, то необходимо брать максимум МоментВремени, а не даты документа и только в этом случае нужна временная таблица результата для соединения с реальной таблицей регистра на следующем шаге.
Делать Максимум(Документ) - такое себе занятие.
user1145086; +1 Ответить
18. DmitriyPopow 32 07.11.19 08:40 Сейчас в теме
(17) да согласен, но даже если брать Макс(Док.моментВремени) то в результирующей таблице не будет самого документа, согласны?
19. nomad_irk 41 07.11.19 08:42 Сейчас в теме
(18)Естественно не будет, нужно еще одно соединение с реальной таблицей регистра.
20. DmitriyPopow 32 07.11.19 08:47 Сейчас в теме
(19) т.е. мы 2 раза будем читать данные регистра? чем не вариант 1 раз прочитать, и потом на виртуальную таблицу наложить отбор по сгруппированной той же самой временной таблице?
21. nomad_irk 41 07.11.19 08:52 Сейчас в теме
(20)После 1-го обращения к регистру у вас не будет документа для использования отбора виртуальной таблицы. Чтобы его получить, необходимо 2 раза обратится к регистру, т.е. всего получится 3 обращения к регистру.

Это в случае, если нужен именно сам документ. Если документ не нужен, то количество обращений к регистру будет 1.
10. DmitriyPopow 32 06.11.19 19:25 Сейчас в теме
вообще бы понять какую структуру имеет регистр.. а то я то подумал что Док8 это измерение, а почитав выясняется что это ресурс...
тогда если в регистре измерение Период (периодический или отдельное измерение с типом дата), и измерение Сотрудник то того примера быть не может т.к. записи будут не уникальны, только если период с временем, но в такой структуре регистра срез последних должен нормально отрабатывать при отборе по сотруднику. структуру регистра в студию плиз.
12. user1145086 06.11.19 19:30 Сейчас в теме
(10)Измерение, а затем идут ресурсы, которые нужно получить
22. DmitriyPopow 32 07.11.19 09:19 Сейчас в теме
(21) 1) получает срез последних с отбором по сотруднику
06.11.19 Сотрудник1 Док5 - Ресурсы
06.11.19 Сотрудник1 Док8 - Ресурсы
Помещаем в ВТ
2) выбираем эту же ВТ но на закладке условия ставит отбор (Период, Сотрудник ...) в правильно сгруппированной нашей же ВТ (Макс период, и пр.)

Где 2 -3 чтения? Документа нет для отбора виртуальной таблицы, есть сотрудник, документ нам надо как бы получить точнее последнюю запись в регистре по сотруднику, а т.к. Период без времени решено что последняя запись это где док.момент имеет максимум
user1145086; +1 Ответить
23. nomad_irk 41 14.11.19 08:37 Сейчас в теме
(22) минимум 2 чтения:

1.
Выбрать МАКСИМУМ(Период) КАК Период, Сотрудник, МАКСИМУМ(Документ.МоментВремени) КАК МоментВремени, Ресурс1, Ресурс2, ......,РесурсN  ПОМЕСТИТЬ ВТ_СрезПоследних ИЗ Регистр.СрезПоследних(, Сотрудник = &Сотрудник) Сгруппировать ПО Сотрудник, Ресурс1, Ресурс2, .....РесурсN

2.
Выбрать Т1.Период, Т1.Сотрудник, Т2.Документ, Т1.Ресурс1, Т1.Ресурс2, ......Т1.РесурсN 
ИЗ ВТ_СрезПоследних КАК Т1
ЛЕВОЕ СОЕДИНЕНИЕ Регистр.СрезПоследних(, Сотрудник = &Сотрудник) КАК Т2
ПО Т1.Период = Т2.период
И Т1.Сотрудник = Т2.Сотрудник
И Т1.МоментВремени = Т2.Документ.МоментВремени
24. DmitriyPopow 32 14.11.19 09:01 Сейчас в теме
(23) нет.я не разложу в запрос прям, но по сути
1) Выбрать Период, Сотрудник, Док поместить в ВТ Из Регистр.....
2) Выбрать ВТ.Период, ВТ.Сотрудник, ВТ.Док Из ВТ ГДЕ (ВТ.Период, Вт.Сотрудник) в ( Выбрать Максимум(ВТ.период), ВТ.Сотрудник из ВТ Сгруппировать по ВТ.сотрудник) (по полям и группировкам может не корректно, но суть такая)
1 чтение из БД. остальные манипульции уже с временной таблицей
25. nomad_irk 41 14.11.19 09:28 Сейчас в теме
(24) Каким образом вы собираетесь получить последний документ по моменту времени?
26. DmitriyPopow 32 14.11.19 10:47 Сейчас в теме
(25)
а вы ни разу не делали срез последних по документам (именно по метаданным документы)?
Выбираем в первом запросе нужные нам поля (не знаю какие там точно),
в втором запросе делаем отбор по ПРАВИЛЬНО сгруппированному первому запросу выбирая поля максимум получая последнюю запись в том числе и по МоментВремени.
27. nomad_irk 41 14.11.19 11:31 Сейчас в теме
(26)ээээ....

Выбрать Период, Сотрудник, Документ 
Поместить ВТ_СрезПоследних
ИЗ регистр.СрезПоследних(, Сотрудник = &Сотрудник)
Индексировать по
Период, Сотрудник, Документ.МоментВремени
;
Выбрать Период, Сотрудник, Документ 
Из ВТ_СрезПоследних 
ГДЕ (Период, Сотрудник, Документ.МоментВремени) В (Выбрать Максимум(Период), Сотрудник, Максимум(Документ.МоментВремени))
Показать


Не пробовал так, нет подходящих данных под такой запрос.
28. DmitriyPopow 32 14.11.19 11:38 Сейчас в теме
(27) да тип того. теперь согласны что 1 чтение?)
29. nomad_irk 41 14.11.19 12:08 Сейчас в теме
(28)Согласен, при условии, что оно будет работать в таком виде :)
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Екатеринбург
зарплата до 120 000 руб.
Полный день

Консультант-аналитик 1С
Рязань
зарплата до 80 000 руб.
Полный день

Программист 1С
Рязань
зарплата от 90 000 руб.
Полный день

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день