Всем привет, что то запутался.
Как можно получить предыдущее состоянии документа если:

У документа есть измерение индивидуальный номер
А также табличная часть с продуктами.

Нужно получить предыдущий индивидуальный номер по текущим продуктам
---
если правильно понял задачу, то нужно что-то в этом роде:

```1c
    ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
    ПОМЕСТИТЬ ВТ_Номенклатура
    ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ГДЕ
    РеализацияТоваровУслугТовары.Ссылка = &Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_Номенклатура.Номенклатура КАК Номенклатура,
    МАКСИМУМ(РеализацияТоваровУслугТовары.Ссылка.Дата) КАК Дата
    ПОМЕСТИТЬ ВТ_Даты
    ИЗ
    ВТ_Номенклатура КАК ВТ_Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ПО ВТ_Номенклатура.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура
    И (РеализацияТоваровУслугТовары.Ссылка.МоментВремени < ВЫРАЗИТЬ(&Ссылка КАК Документ.РеализацияТоваровУслуг).МоментВремени)

    СГРУППИРОВАТЬ ПО
    ВТ_Номенклатура.Номенклатура
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТ_Даты.Номенклатура КАК Номенклатура,
    РеализацияТоваровУслугТовары.Ссылка КАК Ссылка
    ИЗ
    ВТ_Даты КАК ВТ_Даты
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ПО ВТ_Даты.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура
    И ВТ_Даты.Дата = РеализацияТоваровУслугТовары.Ссылка.Дата
    И (РеализацияТоваровУслугТовары.Ссылка <> &Ссылка)

    УПОРЯДОЧИТЬ ПО
    Ссылка,
    Номенклатура
    АВТОУПОРЯДОЧИВАНИЕ
```

Только есть один нюанс. Если будут документы с одинаковой датой (вплоть до секунды) с нужным товаром, то может не правильно показывать именно последний предыдущий документ.
Если это будет постоянно использоваться, то использовать регистр будет предпочтительно.
---
Использовать историю или версионирование.
---
еще варианты?
Я бы хотел при проводки документа сравнить текущее состоянии и предыдущее. Ну и сделать какой то результат на основании этих данных
---
Для сравнения необходимо с чем сравнивать. Кроме версионирования (типового из БСП или самописного) вариантов нет.
---
Нет подожди. Ты наверное не понял.
Есть текущий документ 1 реквизит и табличная часть в которой продукты есть.
Сравнить текущий документ с предыдущим по условию что эти же самые продукты есть и в текущем и предыдущем
Причем тут версионность не понял
---
```1c
    Запрос.Текст =
    "ВЫБРАТЬ
    | РегистрСрезПослед.Период КАК АктуальноеЗначениеПериода,
    | РегистрСрезПослед.Продукт,
    | РегистрСрезПослед.Грязь КАК ГрязьАктуальная,
    | МАКСИМУМ(НаливПродуктаНов.Период) КАК Период,
    | РегистрСрезПослед.Регистратор КАК АктуальныйДокумент
    |ПОМЕСТИТЬ втПоследние
    |ИЗ
    | РегистрСрезПослед.СрезПоследних(, Продукт = &Продукт) КАК РегистрСрезПослед
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСрезПослед КАК РегистрСведений
    | ПО РегистрСрезПослед.Продукт = РегистрСведений.Продукт
    | И РегистрСрезПослед.Период <> РегистрСведений.Период
    |
    |СГРУППИРОВАТЬ ПО
    | РегистрСрезПослед.Период,
    | РегистрСрезПослед.Продукт,
    | РегистрСрезПослед.Регистратор,
    | РегистрСрезПослед.Грязь
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | втПоследние.Продукт,
    | НаливПродуктаНов.Период КАК ПрепоследнийПериод,
    | втПоследние.АктуальноеЗначениеПериода,
    | НаливПродуктаНов.Грязь КАК ПредпоследняяГрязь,
    | втПоследние.ГрязьАктуальная,
    | НаливПродуктаНов.ВидТоплива КАК ПредПоследнийВидТоплива,
    | втПоследние.Продукт.Код,
    | втПоследние.АктуальныйДокумент,
    | НаливПродуктаНов.Регистратор КАК ПредпоследнийДокумент
    |ИЗ
    | втПоследние КАК втПоследние
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСрезПослед.РегистрСведений КАК РегистрСведенийСрезПослед
    | ПО втПоследние.Продукт = НаливПродуктаНов.Продукт
    | И втПоследние.Период = НаливПродуктаНов.Период";

    Запрос.УстановитьПараметр("Продукт", ТекДанныеСтроки);
```

получаю предпоследнее значение и текущие. Это не БСП и не версионность
---
это периодический регистр сведений. Документы периодическими быть не могут.
Как раз версионирование и подразумевает хранение данных в периодических регистрах сведений.
---
А через не периодический регистр можно сделать? Или делать периодический?
---
для версионирования только периодический
---
ПередЗаписью можно получить данные по ссылке этого документа
---
Тот больше надо получить все состояния предыдущих продуктов в табличной части

Перед записью Мы знаем текущее состояние, а нам надо предыдущее
---
Перед записью Мы знаем текущее состояние, а нам надо предыдущее
и запросом по ссылке на документ получаем записанные ранее данные
---
В предыдущем документе могут не быть все продукты, они могут быть в документе еще раньше
---
для "еще раньше" только версионирование, как и предлагали.
---
Может стоит подробнее расписать задачу?
А то в заголовке "Получить предыдущее значение документа", а в процессе обсуждения всплывает "Сравнить текущий документ с предыдущим по условию".
Какая в итоге задача?
1. Документ один, у него меняется состав табличный части, и нужно сравнить старый состав табличной части с новым?
2. Документов несколько и нужно сравнить состав табличной части одного документа с составом табличной части другого?

Для первого варианта проще всего включить платформенное версионирование, тогда всё будет, так сказать, из коробки, разве что нужно будет заморочиться с красивым отчетом, ибо для штатного просмотра нужные ПолныеПрава, если я правильно помню.
Для второго варианта нужно сначала определиться, что считать совпадением строк двух табличных частей и в соответствии с этим сделать это либо запросом, либо чисто кодом (перебрать одну ТЧ, искать совпадения во второй ТЧ, всё что осталось в обеих не обработанное - различие).
Если при этом нужно собирать данные из нескольких "версий" (реальных версий или разных документов) в одну, то опять же, сначала бы надо определиться с тем, как объединять "версии" в одну.
---
Да вы верно заметили на счет подробности задачи.
Конфигурация полностью не базовая.

Есть куча документов. В нем табличная часть табличная часть содержит продукты. При проводки документа нужно получить предпоследнее состояние всех продуктов

Документов 500 проводим документ 500 получаем все последние состояния продуктов по документа 498. Проводим 489 получаем предпоследнее состояние по документ 440 потому что они проводились там и так далее
---
как именно определяется предыдущий документ? в нем точно такой же набор продуктов в ТЧ и измениться не может?
---
еще больше запутали.
---
Тогда по шагам.
Проводим документ номер 500. В нем есть табличная часть с продуктами. В ТЧ могут быт еще какие нибудь данные.
1)Картошка
2)Мыло
3)Полотенца

Нам надо получить предпоследнее состояние. В каком документе были данные продукты. Считая что документ 500 уже последний

в документе 499 в ТЧ были
1)Картошка
2)Полотенце
Х)что то еще

В документе 490 в тч были
1) Мыло
Х)Что то еще
Х)Что то еще

При проводке 500 Мы получим Что предпоследнее состояние каждого продукта было из документа 499 и 490.

Что Я думаю, создать периодический регистр и брать с него. Механизм не сложный, или можно сделать как то иначе?
---
Документ какие проводки делает? По каким регистрам? Может из них инфу выудить?
---
Да база полностью самописная, тут Я могу что угодно делать и как хочу организовывать.
Документ создает движения по 1 регистру непериодическому с одним измерением "Продукты" остальное ресурс
---
если правильно понял задачу, то нужно что-то в этом роде:

```1c
    ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
    ПОМЕСТИТЬ ВТ_Номенклатура
    ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ГДЕ
    РеализацияТоваровУслугТовары.Ссылка = &Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_Номенклатура.Номенклатура КАК Номенклатура,
    МАКСИМУМ(РеализацияТоваровУслугТовары.Ссылка.Дата) КАК Дата
    ПОМЕСТИТЬ ВТ_Даты
    ИЗ
    ВТ_Номенклатура КАК ВТ_Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ПО ВТ_Номенклатура.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура
    И (РеализацияТоваровУслугТовары.Ссылка.МоментВремени < ВЫРАЗИТЬ(&Ссылка КАК Документ.РеализацияТоваровУслуг).МоментВремени)

    СГРУППИРОВАТЬ ПО
    ВТ_Номенклатура.Номенклатура
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТ_Даты.Номенклатура КАК Номенклатура,
    РеализацияТоваровУслугТовары.Ссылка КАК Ссылка
    ИЗ
    ВТ_Даты КАК ВТ_Даты
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ПО ВТ_Даты.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура
    И ВТ_Даты.Дата = РеализацияТоваровУслугТовары.Ссылка.Дата
    И (РеализацияТоваровУслугТовары.Ссылка <> &Ссылка)

    УПОРЯДОЧИТЬ ПО
    Ссылка,
    Номенклатура
    АВТОУПОРЯДОЧИВАНИЕ
```

Только есть один нюанс. Если будут документы с одинаковой датой (вплоть до секунды) с нужным товаром, то может не правильно показывать именно последний предыдущий документ.
Если это будет постоянно использоваться, то использовать регистр будет предпочтительно.
---
Полностью сек в сек не будут, вообще никогда.
Ну Я вот сам думаю создать регистр. Переодический, в нем измерение продукт ну ресурсы по надобности. И уже от этого получать предпоследнее состояние. Если это правильнее конечно.