По теме из базы знаний
- Выгрузка-загрузка любых данных (и измененных) между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Регистры сведений 1С. Как это устроено.
- Параллельная обработка очереди сообщений
- Регистры сведений для аналитиков
- Мастер-класс «Строим команду мечты через people-management»
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Название регистра и изменение заменить на свое.
Наверное нужен отбор по сотруднику
Вы бы написали ваш запрос, и что получается, было бы понятна суть проблемы
Наверное нужен отбор по сотруднику
//получить последнюю цену по заданной номенклатуре
//назначенную до 31.03.2017 г. (включительно)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныСрезПоследних.Цена
|ИЗ
| РегистрСведений.Цены.СрезПоследних(
| ,
|
| ) КАК ЦеныСрезПоследних";
//Запрос.УстановитьПараметр("ПоДату", '20170331');
//Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Сообщить(Выборка.Цена);
КонецЕсли
ПоказатьВы бы написали ваш запрос, и что получается, было бы понятна суть проблемы
Если делаем выборку по срезу последних, но не ставим отбор по всем измерениям то получаем не одну запись
для получения именно последней по одному измерению 1) получаем срез последних по сотруднику
06.11.19 Сотрудник1 Док5 - Ресурс
06.11.19 Сотрудник1 Док8 - Ресурс
Помещаем в ВреТабл
В втором запросе выбираем нашу времТабл а на закладке условия указываем что (Период, сотрудник) в (Максимум(Период), Сотрудник из ВремТабл сгруппировать по Сотрудник)
Но в вашем примере выше обе записи одной датой, значит используйте в условии еще и макс по Документу, Хотя может у вас Период имеет состав типа ДатаВремя и тогда все норм будет.
для получения именно последней по одному измерению 1) получаем срез последних по сотруднику
06.11.19 Сотрудник1 Док5 - Ресурс
06.11.19 Сотрудник1 Док8 - Ресурс
Помещаем в ВреТабл
В втором запросе выбираем нашу времТабл а на закладке условия указываем что (Период, сотрудник) в (Максимум(Период), Сотрудник из ВремТабл сгруппировать по Сотрудник)
Но в вашем примере выше обе записи одной датой, значит используйте в условии еще и макс по Документу, Хотя может у вас Период имеет состав типа ДатаВремя и тогда все норм будет.
окей. а из вашего примера какая запись последняя?) док5 или док8 и по какому принципу определяется? по дате? вытащите дату и по МАКС отбор из (9) логики. может регистр не правильно спроектирован? если он не дает ответа на вопрос? может Период должен быть с Временем? и тогда все будет решено сразу
(16)Если нужен именно сам документ, то необходимо брать максимум МоментВремени, а не даты документа и только в этом случае нужна временная таблица результата для соединения с реальной таблицей регистра на следующем шаге.
Делать Максимум(Документ) - такое себе занятие.
Делать Максимум(Документ) - такое себе занятие.
(20)После 1-го обращения к регистру у вас не будет документа для использования отбора виртуальной таблицы. Чтобы его получить, необходимо 2 раза обратится к регистру, т.е. всего получится 3 обращения к регистру.
Это в случае, если нужен именно сам документ. Если документ не нужен, то количество обращений к регистру будет 1.
Это в случае, если нужен именно сам документ. Если документ не нужен, то количество обращений к регистру будет 1.
вообще бы понять какую структуру имеет регистр.. а то я то подумал что Док8 это измерение, а почитав выясняется что это ресурс...
тогда если в регистре измерение Период (периодический или отдельное измерение с типом дата), и измерение Сотрудник то того примера быть не может т.к. записи будут не уникальны, только если период с временем, но в такой структуре регистра срез последних должен нормально отрабатывать при отборе по сотруднику. структуру регистра в студию плиз.
тогда если в регистре измерение Период (периодический или отдельное измерение с типом дата), и измерение Сотрудник то того примера быть не может т.к. записи будут не уникальны, только если период с временем, но в такой структуре регистра срез последних должен нормально отрабатывать при отборе по сотруднику. структуру регистра в студию плиз.
(21) 1) получает срез последних с отбором по сотруднику
06.11.19 Сотрудник1 Док5 - Ресурсы
06.11.19 Сотрудник1 Док8 - Ресурсы
Помещаем в ВТ
2) выбираем эту же ВТ но на закладке условия ставит отбор (Период, Сотрудник ...) в правильно сгруппированной нашей же ВТ (Макс период, и пр.)
Где 2 -3 чтения? Документа нет для отбора виртуальной таблицы, есть сотрудник, документ нам надо как бы получить точнее последнюю запись в регистре по сотруднику, а т.к. Период без времени решено что последняя запись это где док.момент имеет максимум
06.11.19 Сотрудник1 Док5 - Ресурсы
06.11.19 Сотрудник1 Док8 - Ресурсы
Помещаем в ВТ
2) выбираем эту же ВТ но на закладке условия ставит отбор (Период, Сотрудник ...) в правильно сгруппированной нашей же ВТ (Макс период, и пр.)
Где 2 -3 чтения? Документа нет для отбора виртуальной таблицы, есть сотрудник, документ нам надо как бы получить точнее последнюю запись в регистре по сотруднику, а т.к. Период без времени решено что последняя запись это где док.момент имеет максимум
(22) минимум 2 чтения:
1.
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.Документ.МоментВремени
(23) нет.я не разложу в запрос прям, но по сути
1) Выбрать Период, Сотрудник, Док поместить в ВТ Из Регистр.....
2) Выбрать ВТ.Период, ВТ.Сотрудник, ВТ.Док Из ВТ ГДЕ (ВТ.Период, Вт.Сотрудник) в ( Выбрать Максимум(ВТ.период), ВТ.Сотрудник из ВТ Сгруппировать по ВТ.сотрудник) (по полям и группировкам может не корректно, но суть такая)
1 чтение из БД. остальные манипульции уже с временной таблицей
1) Выбрать Период, Сотрудник, Док поместить в ВТ Из Регистр.....
2) Выбрать ВТ.Период, ВТ.Сотрудник, ВТ.Док Из ВТ ГДЕ (ВТ.Период, Вт.Сотрудник) в ( Выбрать Максимум(ВТ.период), ВТ.Сотрудник из ВТ Сгруппировать по ВТ.сотрудник) (по полям и группировкам может не корректно, но суть такая)
1 чтение из БД. остальные манипульции уже с временной таблицей
(25)
а вы ни разу не делали срез последних по документам (именно по метаданным документы)?
Выбираем в первом запросе нужные нам поля (не знаю какие там точно),
в втором запросе делаем отбор по ПРАВИЛЬНО сгруппированному первому запросу выбирая поля максимум получая последнюю запись в том числе и по МоментВремени.
а вы ни разу не делали срез последних по документам (именно по метаданным документы)?
Выбираем в первом запросе нужные нам поля (не знаю какие там точно),
в втором запросе делаем отбор по ПРАВИЛЬНО сгруппированному первому запросу выбирая поля максимум получая последнюю запись в том числе и по МоментВремени.
(26)ээээ....
Не пробовал так, нет подходящих данных под такой запрос.
Выбрать Период, Сотрудник, Документ
Поместить ВТ_СрезПоследних
ИЗ регистр.СрезПоследних(, Сотрудник = &Сотрудник)
Индексировать по
Период, Сотрудник, Документ.МоментВремени
;
Выбрать Период, Сотрудник, Документ
Из ВТ_СрезПоследних
ГДЕ (Период, Сотрудник, Документ.МоментВремени) В (Выбрать Максимум(Период), Сотрудник, Максимум(Документ.МоментВремени))
ПоказатьНе пробовал так, нет подходящих данных под такой запрос.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот