Мы сами не местные, брат Митька помирает ухи хочет, но никак не идёт мысль здравая в голову без кофе :(

Надо подобрать документы оприходования к документам списания, но когда их генерили связи не заложили. Как по набору записей в табличной части найти соответствующий док с таким же наполнением табличной части.
Типа Док1 подобрать Док2
тчНоменклатура
Стул Красный 1 Стол Синий 10
Стол Синий 10 Стул Красный 1

Док3
Стул Красный 1
Стол Синий 10
Диван Серый 2
надо проигнорить

Что-то не варит у меня
Т.е. мне надо получить пару Док1 - Док2
---
Мож кому пригодится

```1c
    ВЫБРАТЬ
    СписаниеНедостачТоваровТовары.Ссылка КАК Ссылка,
    СписаниеНедостачТоваровТовары.Номенклатура КАК Номенклатура,
    СписаниеНедостачТоваровТовары.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
    СписаниеНедостачТоваровТовары.Количество КАК КоличествоСписано,
    НР_ПереносОстатков.Новый КАК Новый,
    СебестоимостьТоваровОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
    СебестоимостьТоваровОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьНачальныйОстаток КАК СтоимостьНачальныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьПриход КАК СтоимостьПриход,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьРасход КАК СтоимостьРасход,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыНачальныйОстаток КАК ДопРасходыНачальныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыПриход КАК ДопРасходыПриход,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыРасход КАК ДопРасходыРасход,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьРеглНачальныйОстаток КАК СтоимостьРеглНачальныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьРеглПриход КАК СтоимостьРеглПриход,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьРеглРасход КАК СтоимостьРеглРасход,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьРеглКонечныйОстаток КАК СтоимостьРеглКонечныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыРеглНачальныйОстаток КАК ДопРасходыРеглНачальныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыРеглПриход КАК ДопРасходыРеглПриход,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыРеглРасход КАК ДопРасходыРеглРасход,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыРеглКонечныйОстаток КАК ДопРасходыРеглКонечныйОстаток
    ПОМЕСТИТЬ втСписано
    ИЗ
    Документ.СписаниеНедостачТоваров.Товары КАК СписаниеНедостачТоваровТовары
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СебестоимостьТоваров.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Регистратор, Движения, ) КАК СебестоимостьТоваровОстаткиИОбороты
    ПО СписаниеНедостачТоваровТовары.АналитикаУчетаНоменклатуры.Номенклатура = СебестоимостьТоваровОстаткиИОбороты.АналитикаУчетаНоменклатуры.Номенклатура
    И СписаниеНедостачТоваровТовары.Ссылка = СебестоимостьТоваровОстаткиИОбороты.Регистратор
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НР_ПереносОстатков КАК НР_ПереносОстатков
    ПО (НР_ПереносОстатков.Старый = СписаниеНедостачТоваровТовары.Ссылка.Склад)
    ГДЕ
    СписаниеНедостачТоваровТовары.Ссылка.Проведен
    И СписаниеНедостачТоваровТовары.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаОкончания, ДЕНЬ)
    И (СписаниеНедостачТоваровТовары.Ссылка = &Ссылка
    ИЛИ &Ссылка = ЗНАЧЕНИЕ(Документ.СписаниеНедостачТоваров.ПустаяСсылка))
    ;

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

    СГРУППИРОВАТЬ ПО
    ВводОстатковТовары.Ссылка,
    ВводОстатковТовары.Номенклатура,
    СебестоимостьТоваровОбороты.КоличествоОборот,
    СебестоимостьТоваровОбороты.СтоимостьОборот,
    СебестоимостьТоваровОбороты.ДопРасходыОборот,
    СебестоимостьТоваровОбороты.СтоимостьРеглОборот,
    СебестоимостьТоваровОбороты.ДопРасходыРеглОборот
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втСписано.Ссылка КАК Списание,
    втСписано.Номенклатура КАК Номенклатура,
    втСписано.КоличествоСписано КАК КоличествоСписаноДокСписания,
    втВводОстатков.Количество КАК КоличествоДокПриходования,
    втВводОстатков.КоличествоОборот КАК КоличествоОборотОприходовано,
    втСписано.КоличествоСписано - втВводОстатков.Количество КАК РазницаОприходованиеКоличество,
    втВводОстатков.ВводОстатков КАК ВводОстатков,
    втВводОстатков.Сумма КАК СуммаДокВводОстатков,
    втВводОстатков.СтоимостьРеглОборот КАК СтоимостьРеглОборотДокОприходованияПоРегистру,
    втВводОстатков.СтоимостьРеглОборот * 0.2 КАК СуммаНДС,
    втВводОстатков.СтоимостьРеглОборот + втВводОстатков.СуммаНДС КАК СуммаСНДС,
    ВЫРАЗИТЬ(втВводОстатков.СуммаСНДС / втВводОстатков.Количество КАК ЧИСЛО(15, 2)) КАК Цена,
    втВводОстатков.СтоимостьОборот КАК СтоимостьОборотДокОприходованияПоРегистру,
    втСписано.СтоимостьРасход КАК СтоимостьПоСписанию,
    втСписано.ДопРасходыРасход КАК ДопРасходыПоСписанию,
    втСписано.СтоимостьРеглРасход КАК СтоимостьРеглПоСписанию,
    втСписано.ДопРасходыРеглРасход КАК ДопРасходыРеглПоСписанию,
    втВводОстатков.СтоимостьОборот - втСписано.СтоимостьРасход - втСписано.ДопРасходыРасход КАК РазницаСумма,
    втВводОстатков.СтоимостьРеглОборот - втСписано.СтоимостьРеглРасход - втСписано.ДопРасходыРеглРасход КАК РазницаРегСумма
    ИЗ
    втСписано КАК втСписано
    ЛЕВОЕ СОЕДИНЕНИЕ втВводОстатков КАК втВводОстатков
    ПО втСписано.Номенклатура = втВводОстатков.Номенклатура
    И втСписано.Новый = втВводОстатков.ВводОстатков.Склад

    УПОРЯДОЧИТЬ ПО
    Списание,
    Номенклатура
```
---
Если там все идентично, и не сбиты сортировки.. Можно через левое соединение ТЧ... включая номер строки Ну это так, навскидку.. Там, где 100 совпадение - то и наш документ =)
---
Сортировка сбита :(, чё выловишь не понятно, это делалось систематически на протяжении лет многажды. Если не ограничивать сроки связи, то можно получить совпадающие доки 2016 и 2021 года :(
Это самое простое решение и было сделано, и получены не совсем ожидаемые результаты :(
---
Ну тогда сначала отсортировать.. А вот по срокам - это печально... Можно пробовать ограничивать периоды, но на практике - обычно там будет разрыв (иногда даже месяц, если провтыкали)
---
ну или рисовать обработку, которая предложит варианты... а там уже в полуручном режиме выбрать связи..
Док1 может быть равно Док2 или Док3 или Док4... а там уже дать возможность выбора.

Нужно пробовать. А цена есть в ТЧ?
---
По датам договорённость: если больше 5 дней, то нафиг.
Цен нет :(
---
Ну тогда еще по датам отбор. Где Док2.Дата Между (Док1Дата - 5 дней) И (Док1Дата + 5 дней)
---
Ну а если запросом выбрать по документам прихода Итог(Количество), Итог(Количество строк), сгруппировать это и посмотреть а много ли документов с такими же цифрами. И если получится что у большинства документов для пары цифр Итог(Количество), Итог(Количество строк) двойника нет, то искать по этим критериям списание. Можно попробовать придумать еще какой-то уточняющий критерий, например (количество различных единиц измерения). Запросом проверяется все это за несколько минут.
---
Буду посмотреть, спасибо
---
Где Док2.Дата Между (Док1Дата - 5 дней) И (Док1Дата + 5 дней) увижу в коде, лично утоплю
РАЗНОСТЬДАТ(Ссылка1.Дата, Ссылка2.Дата, ДЕНЬ) < 5
---
Принято решение:
1 автоматом обрабатывать только проведенные документы разницей не более 5 рабочих дней
2 остальное в руки
3 при возникновении неоднозначности в автоматической обработке, доки отмечаются, и потом опиливаются руками

Всем спасибо
---
Мож кому пригодится

```1c
    ВЫБРАТЬ
    СписаниеНедостачТоваровТовары.Ссылка КАК Ссылка,
    СписаниеНедостачТоваровТовары.Номенклатура КАК Номенклатура,
    СписаниеНедостачТоваровТовары.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
    СписаниеНедостачТоваровТовары.Количество КАК КоличествоСписано,
    НР_ПереносОстатков.Новый КАК Новый,
    СебестоимостьТоваровОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
    СебестоимостьТоваровОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьНачальныйОстаток КАК СтоимостьНачальныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьПриход КАК СтоимостьПриход,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьРасход КАК СтоимостьРасход,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыНачальныйОстаток КАК ДопРасходыНачальныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыПриход КАК ДопРасходыПриход,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыРасход КАК ДопРасходыРасход,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьРеглНачальныйОстаток КАК СтоимостьРеглНачальныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьРеглПриход КАК СтоимостьРеглПриход,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьРеглРасход КАК СтоимостьРеглРасход,
    СебестоимостьТоваровОстаткиИОбороты.СтоимостьРеглКонечныйОстаток КАК СтоимостьРеглКонечныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыРеглНачальныйОстаток КАК ДопРасходыРеглНачальныйОстаток,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыРеглПриход КАК ДопРасходыРеглПриход,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыРеглРасход КАК ДопРасходыРеглРасход,
    СебестоимостьТоваровОстаткиИОбороты.ДопРасходыРеглКонечныйОстаток КАК ДопРасходыРеглКонечныйОстаток
    ПОМЕСТИТЬ втСписано
    ИЗ
    Документ.СписаниеНедостачТоваров.Товары КАК СписаниеНедостачТоваровТовары
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СебестоимостьТоваров.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Регистратор, Движения, ) КАК СебестоимостьТоваровОстаткиИОбороты
    ПО СписаниеНедостачТоваровТовары.АналитикаУчетаНоменклатуры.Номенклатура = СебестоимостьТоваровОстаткиИОбороты.АналитикаУчетаНоменклатуры.Номенклатура
    И СписаниеНедостачТоваровТовары.Ссылка = СебестоимостьТоваровОстаткиИОбороты.Регистратор
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НР_ПереносОстатков КАК НР_ПереносОстатков
    ПО (НР_ПереносОстатков.Старый = СписаниеНедостачТоваровТовары.Ссылка.Склад)
    ГДЕ
    СписаниеНедостачТоваровТовары.Ссылка.Проведен
    И СписаниеНедостачТоваровТовары.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаОкончания, ДЕНЬ)
    И (СписаниеНедостачТоваровТовары.Ссылка = &Ссылка
    ИЛИ &Ссылка = ЗНАЧЕНИЕ(Документ.СписаниеНедостачТоваров.ПустаяСсылка))
    ;

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

    СГРУППИРОВАТЬ ПО
    ВводОстатковТовары.Ссылка,
    ВводОстатковТовары.Номенклатура,
    СебестоимостьТоваровОбороты.КоличествоОборот,
    СебестоимостьТоваровОбороты.СтоимостьОборот,
    СебестоимостьТоваровОбороты.ДопРасходыОборот,
    СебестоимостьТоваровОбороты.СтоимостьРеглОборот,
    СебестоимостьТоваровОбороты.ДопРасходыРеглОборот
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втСписано.Ссылка КАК Списание,
    втСписано.Номенклатура КАК Номенклатура,
    втСписано.КоличествоСписано КАК КоличествоСписаноДокСписания,
    втВводОстатков.Количество КАК КоличествоДокПриходования,
    втВводОстатков.КоличествоОборот КАК КоличествоОборотОприходовано,
    втСписано.КоличествоСписано - втВводОстатков.Количество КАК РазницаОприходованиеКоличество,
    втВводОстатков.ВводОстатков КАК ВводОстатков,
    втВводОстатков.Сумма КАК СуммаДокВводОстатков,
    втВводОстатков.СтоимостьРеглОборот КАК СтоимостьРеглОборотДокОприходованияПоРегистру,
    втВводОстатков.СтоимостьРеглОборот * 0.2 КАК СуммаНДС,
    втВводОстатков.СтоимостьРеглОборот + втВводОстатков.СуммаНДС КАК СуммаСНДС,
    ВЫРАЗИТЬ(втВводОстатков.СуммаСНДС / втВводОстатков.Количество КАК ЧИСЛО(15, 2)) КАК Цена,
    втВводОстатков.СтоимостьОборот КАК СтоимостьОборотДокОприходованияПоРегистру,
    втСписано.СтоимостьРасход КАК СтоимостьПоСписанию,
    втСписано.ДопРасходыРасход КАК ДопРасходыПоСписанию,
    втСписано.СтоимостьРеглРасход КАК СтоимостьРеглПоСписанию,
    втСписано.ДопРасходыРеглРасход КАК ДопРасходыРеглПоСписанию,
    втВводОстатков.СтоимостьОборот - втСписано.СтоимостьРасход - втСписано.ДопРасходыРасход КАК РазницаСумма,
    втВводОстатков.СтоимостьРеглОборот - втСписано.СтоимостьРеглРасход - втСписано.ДопРасходыРеглРасход КАК РазницаРегСумма
    ИЗ
    втСписано КАК втСписано
    ЛЕВОЕ СОЕДИНЕНИЕ втВводОстатков КАК втВводОстатков
    ПО втСписано.Номенклатура = втВводОстатков.Номенклатура
    И втСписано.Новый = втВводОстатков.ВводОстатков.Склад

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