База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как получить одну запись из СрезПоследних в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 10 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
2 июля 2026 в 16:28 #38028
ВЫБРАТЬ
РасчетАмортизацииСрезПоследних.Объект КАК Объект,
РасчетАмортизацииСрезПоследних.ДатаВводаВЭксплуатацию КАК ДатаВводаВЭксплуатацию,
РасчетАмортизацииСрезПоследних.СтоимостьБУ КАК СтоимостьБУ,
РасчетАмортизацииСрезПоследних.ОстаточнаяСтоимостьБУ КАК ОстаточнаяСтоимостьБУ,
РасчетАмортизацииСрезПоследних.СуммаАмортизацииБУ КАК СуммаАмортизацииБУ
ИЗ
РегистрСведений.РасчетАмортизации.СрезПоследних(&Дата1, Объект = &Объект) КАК РасчетАмортизацииСрезПоследнихЧто не так ? выбираются все записи, а не одна
-
2 июля 2026 в 16:28 #38029
Проблема в том, что в запросе используется срез последних по регистру сведений с фильтром по Объекту, но при этом в регистре может быть несколько записей с одинаковым Объектом на одну дату &Дата1 (или на дату, не совпадающую с &Дата1, если &Дата1 не точная дата с временем).
Вызов среза последних:
|РегистрСведений.РасчетАмортизации.СрезПоследних(&Дата1, Объект = &Объект)
возвращает все записи, у которых дата <= &Дата1 и Объект = &Объект, но если в регистре несколько записей с разными датами, то срез последних вернёт по каждой комбинации измерений последнюю запись, а если измерений несколько, то может быть несколько записей.
Если хотите получить именно одну запись — последнюю по дате для конкретного объекта, то нужно:
1. Убедиться, что в регистре сведений «РасчетАмортизации» измерения — Объект и ДатаВводаВЭксплуатацию (или другая дата), и что срез последних по дате и объекту возвращает одну запись.
2. Если срез последних возвращает несколько записей, то нужно дополнительно ограничить выборку, например, выбрать запись с максимальной датой.
Пример решения:
|ВЫБРАТЬ
| РАСЧЕТ.Объект КАК Объект,
| РАСЧЕТ.ДатаВводаВЭксплуатацию КАК ДатаВводаВЭксплуатацию,
| РАСЧЕТ.СтоимостьБУ КАК СтоимостьБУ,
| РАСЧЕТ.ОстаточнаяСтоимостьБУ КАК ОстаточнаяСтоимостьБУ,
| РАСЧЕТ.СуммаАмортизацииБУ КАК СуммаАмортизацииБУ
|ИЗ
| РегистрСведений.РасчетАмортизации.СрезПоследних(&Дата1, Объект = &Объект) КАК РАСЧЕТ
|ГДЕ
| РАСЧЕТ.ДатаВводаВЭксплуатацию = (ВЫБРАТЬ МАКСИМУМ(ДатаВводаВЭксплуатацию)
| | ИЗ РегистрСведений.РасчетАмортизации.СрезПоследних(&Дата1, Объект = &Объект))То есть добавляем условие, что дата ввода в эксплуатацию должна быть максимальной из всех доступных на дату &Дата1 для данного объекта.
Если в регистре есть другие измерения, которые влияют на уникальность записей, то нужно их тоже учитывать.
Если хотите получить просто одну запись, то можно использовать:
|ВЫБРАТЬ ПЕРВЫЕ 1
| …но это не гарантирует, что будет именно последняя по дате.
Итого: проблема в том, что срез последних возвращает все последние записи по каждой комбинации измерений, а не одну запись. Нужно дополнительно ограничить выборку по дате или другим измерениям, чтобы получить одну запись.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.