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

1-Й ВАРИАНТ

```1c
    ВЫБРАТЬ
    ЧекККМВозврат.ЧекККМ КАК ЧекККМ
    ПОМЕСТИТЬ втЧекиВозврат
    ИЗ
    Документ.ЧекККМВозврат КАК ЧекККМВозврат
    ГДЕ
    ЧекККМВозврат.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ЧекККМВозврат.Проведен
    ;

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

    СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Номенклатура,
    ЧекККМТовары.Продавец,
    ЧекККМТовары.Характеристика,
    ЧекККМТовары.Ссылка.КассоваяСмена,
    НАЧАЛОПЕРИОДА(ЧекККМТовары.Ссылка.Дата, ДЕНЬ),
    ЧекККМТовары.Ссылка.Склад
```

2-Й ВАРИАНТ

```1c
    ВЫБРАТЬ
    ЧекККМТовары.Номенклатура КАК Номенклатура,
    СУММА(ЧекККМТовары.Количество) КАК Количество,
    СУММА(ЧекККМТовары.Сумма) КАК Сумма,
    ЧекККМТовары.Характеристика,
    ЧекККМТовары.Продавец,
    ЧекККМТовары.Ссылка.КассоваяСмена КАК КассоваяСмена,
    НАЧАЛОПЕРИОДА(ЧекККМТовары.Ссылка.Дата, ДЕНЬ) КАК ПериодДень,
    ЧекККМТовары.Ссылка.Склад КАК Склад
    ИЗ
    Документ.ЧекККМ.Товары КАК ЧекККМТовары
    ГДЕ
    ЧекККМТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ЧекККМТовары.Ссылка.Проведен
    И НЕ ЧекККМТовары.Ссылка В
    (ВЫБРАТЬ
    ЧекККМВозврат.ЧекККМ
    ИЗ
    Документ.ЧекККМВозврат КАК ЧекККМВозврат
    ГДЕ
    ЧекККМВозврат.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ЧекККМВозврат.Проведен)

    СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Номенклатура,
    ЧекККМТовары.Продавец,
    ЧекККМТовары.Характеристика,
    ЧекККМТовары.Ссылка.КассоваяСмена,
    НАЧАЛОПЕРИОДА(ЧекККМТовары.Ссылка.Дата, ДЕНЬ),
    ЧекККМТовары.Ссылка.Склад
```

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

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

    СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Номенклатура,
    ЧекККМТовары.Продавец,
    ЧекККМТовары.Характеристика,
    втЧекиНеВозврат.КассоваяСмена,
    втЧекиНеВозврат.День,
    втЧекиНеВозврат.Склад
```
---
Немного переделал запрос. Возник случай когда вернули только одну позицию из чека. В этом случае исключать полностью чек было бы неправильно.
Вот запрос:

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЧекККМВозврат.Ссылка,
    ЧекККМВозврат.КассоваяСмена,
    ЧекККМВозврат.Склад,
    ЧекККМВозврат.Организация
    ПОМЕСТИТЬ втЧекККМВозврат
    ИЗ
    Документ.ЧекККМВозврат КАК ЧекККМВозврат
    ГДЕ
    ЧекККМВозврат.Проведен
    И ЧекККМВозврат.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    ;

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

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ЧекККМВозвратТовары.Номенклатура,
    ЧекККМВозвратТовары.Характеристика,
    -ЧекККМВозвратТовары.Количество,
    -ЧекККМВозвратТовары.Сумма,
    ЧекККМВозвратТовары.Продавец,
    втЧекККМВозврат.КассоваяСмена,
    втЧекККМВозврат.Склад,
    втЧекККМВозврат.Организация
    ИЗ
    Документ.ЧекККМВозврат.Товары КАК ЧекККМВозвратТовары
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ втЧекККМВозврат КАК втЧекККМВозврат
    ПО ЧекККМВозвратТовары.Ссылка = втЧекККМВозврат.Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втЧекиВсе.Номенклатура,
    втЧекиВсе.Характеристика,
    СУММА(втЧекиВсе.Количество) КАК Количество,
    СУММА(втЧекиВсе.Сумма) КАК Сумма,
    втЧекиВсе.Продавец,
    втЧекиВсе.КассоваяСмена,
    втЧекиВсе.Склад,
    втЧекиВсе.Организация
    ПОМЕСТИТЬ втЧеки
    ИЗ
    втЧекиВсе КАК втЧекиВсе

    СГРУППИРОВАТЬ ПО
    втЧекиВсе.Номенклатура,
    втЧекиВсе.Характеристика,
    втЧекиВсе.Продавец,
    втЧекиВсе.КассоваяСмена,
    втЧекиВсе.Склад,
    втЧекиВсе.Организация

    ИМЕЮЩИЕ
    СУММА(втЧекиВсе.Сумма) <> 0
    ;

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ОтчетОРозничныхПродажахТовары.Номенклатура,
    ОтчетОРозничныхПродажахТовары.Характеристика,
    ОтчетОРозничныхПродажахТовары.Количество,
    ОтчетОРозничныхПродажахТовары.Сумма,
    ОтчетОРозничныхПродажахТовары.Продавец,
    втОРПбезТоваров.Ссылка КАК Документ,
    втОРПбезТоваров.КассоваяСмена,
    втОРПбезТоваров.Склад,
    втОРПбезТоваров.Организация
    ПОМЕСТИТЬ втОРП
    ИЗ
    Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ втОРПбезТоваров КАК втОРПбезТоваров
    ПО ОтчетОРозничныхПродажахТовары.Ссылка = втОРПбезТоваров.Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЕСТЬNULL(втЧеки.Номенклатура, ЛОЖЬ) КАК НоменклатураПоЧеку,
    ЕСТЬNULL(втЧеки.Характеристика, ЛОЖЬ) КАК ХарактеристикаПоЧеку,
    ЕСТЬNULL(втЧеки.Количество, ЛОЖЬ) КАК КоличествоПоЧеку,
    ЕСТЬNULL(втЧеки.Сумма, ЛОЖЬ) КАК СуммаПоЧеку,
    ЕСТЬNULL(втЧеки.Продавец, ЛОЖЬ) КАК ПродавецПоЧеку,
    ЕСТЬNULL(втЧеки.КассоваяСмена, ЛОЖЬ) КАК КассоваяСменаПоЧеку,
    ЕСТЬNULL(втЧеки.Склад, ЛОЖЬ) КАК СкладПоЧеку,
    ЕСТЬNULL(втЧеки.Организация, ЛОЖЬ) КАК ОрганизацияПоЧеку,
    ЕСТЬNULL(втОРП.Номенклатура, ЛОЖЬ) КАК НоменклатураПоОтчету,
    ЕСТЬNULL(втОРП.Характеристика, ЛОЖЬ) КАК ХарактеристикаПоОтчету,
    ЕСТЬNULL(втОРП.Количество, ЛОЖЬ) КАК КоличествоПоОтчету,
    ЕСТЬNULL(втОРП.Сумма, ЛОЖЬ) КАК СуммаПоОтчету,
    ЕСТЬNULL(втОРП.Продавец, ЛОЖЬ) КАК ПродавецПоОтчету,
    ЕСТЬNULL(втОРП.КассоваяСмена, ЛОЖЬ) КАК КассоваяСменаПоОтчету,
    ЕСТЬNULL(втОРП.Склад, ЛОЖЬ) КАК СкладПоОтчету,
    ЕСТЬNULL(втОРП.Организация, ЛОЖЬ) КАК ОрганизацияПоОтчету,
    ЕСТЬNULL(втОРП.Документ, ЛОЖЬ) КАК ДокументПоОтчету
    ИЗ
    втЧеки КАК втЧеки
    ПОЛНОЕ СОЕДИНЕНИЕ втОРП КАК втОРП
    ПО втЧеки.Номенклатура = втОРП.Номенклатура
    И втЧеки.Характеристика = втОРП.Характеристика
    И втЧеки.Продавец = втОРП.Продавец
    И втЧеки.Сумма = втОРП.Сумма
    И втЧеки.КассоваяСмена = втОРП.КассоваяСмена
```

Прикрепляю внешний отчет "Сверка документов кассовых чеков и отчетов о розничных продажах".
---
В запросе есть соединение

```1c
    ПО ЧекККМТовары.Ссылка = втЧекиВозврат.ЧекККМ
```

, а в условии

```1c
    И ВЫБОР
    КОГДА ЧекККМТовары.Ссылка = втЧекиВозврат.ЧекККМ
    ТОГДА ЛОЖЬ
    ИНАЧЕ ИСТИНА
    КОНЕЦ
```

ИМХО, это ересь какая-то. Странно, что вообще запрос что-то возвращает в плане чеков на возврат. Или я тут ошибся?

О, я так понял, что таким образом фильтруются чеки без возвратов? Тогда проще написать в условии "ГДЕ" строку "И втЧекиВозврат.ЧекККМ IS NULL".

Тут, получается, и временная таблица не нужна - просто соединение чеков на продажу с чеками на возврат с фильтрацией по отсутствию элементов второй таблицы.

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

А ересь, потому что см. пост (4) "первоначально"
Прикрепляю внешний отчет.
---
С другой стороны, я бы сначала отобрал все чеки, которые не были возвращены по таблице "Документ.Чеки", а не по табличной части. А потом бы уже эту ВТ соединил с товарами чеков и агрегировал. Так должно быть быстрее.

А как их отобрать? Связи у ЧекККМ нет с ЧекККМВозврат, а вот у ЧекККМВозврат есть ссылка на ЧекККМ.
---
Возможно Вы это имели ввиду. Мне как-то когда говорят кодом, гораздо понятнее.

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

Что то мозгов не хватает... :)
---
А собрать данные по регистрам в которых чеки делают движения?
---
А из регистров нечего взять те же самые ссылки на чеки. Нужных измерений нет.

(3) Вижу свой код. Поясните Вашу цитату?
Первоначально я хотел сделать так

```1c
    ГДЕ
    ...
    НЕ ( ЧекККМТовары.Ссылка = втЧекиВозврат.ЧекККМ)
```

Но так 1С не воспринимает, убирает скобки и возможно не правильно выдает результат.
---
Однако данные из регистров собирать быстрее, в общем случае, чем из ТЧ документа. А судя по условию на "проведенность" документа, движения есть. Если нужны реквизиты чека, то соединяемся с таблицей чеков "Продажи.Регистратор = Чеки.Ссылка" и оттуда берем нужные данные. Скорее всего, в обращении через "СтрокаТЧ.Ссылка.Реквизит" происходит основное замедление. В типовой УТ 11 сначала в виртуальную таблицу помещают нужные реквизиты всех, например, чеков, потом из РН получают нужные обороты, и соединяют с ранееполученной ВТ для получения реквизитов.
---
А из регистров нечего взять те же самые ссылки на чеки. Нужных измерений нет.

В регистре нет сведений по продажам?

ЧекККМТовары.Номенклатура КАК Номенклатура,
    СУММА(ЧекККМТовары.Количество) КАК Количество,
    СУММА(ЧекККМТовары.Сумма) КАК Сумма,
    ЧекККМТовары.Характеристика,
---
У нас чеки после закрытия кассовой смены архивируются. Скорее всего после архивации чеки удаляются из регистров накопления. И после закрытия смены создаются отчеты о розничных продажах по складам (ОРП). У меня как раз это выборка используется для выявления изменений в ОРП.

Вот полный код запроса отчета "Сверка Чеков ККМ с ОРП"

```1c
    ВЫБРАТЬ
    ЧекККМТовары.Номенклатура КАК Номенклатура,
    СУММА(ЧекККМТовары.Количество) КАК Количество,
    СУММА(ЧекККМТовары.Сумма) КАК Сумма,
    ЧекККМТовары.Характеристика,
    ЧекККМТовары.Продавец,
    ЧекККМТовары.Ссылка.КассоваяСмена КАК КассоваяСмена,
    НАЧАЛОПЕРИОДА(ЧекККМТовары.Ссылка.Дата, ДЕНЬ) КАК ПериодДень,
    ЧекККМТовары.Ссылка.Склад КАК Склад
    ПОМЕСТИТЬ втЧеки
    ИЗ
    Документ.ЧекККМ.Товары КАК ЧекККМТовары
    ГДЕ
    ЧекККМТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ЧекККМТовары.Ссылка.Проведен
    И НЕ ЧекККМТовары.Ссылка В
    (ВЫБРАТЬ
    ЧекККМВозврат.ЧекККМ
    ИЗ
    Документ.ЧекККМВозврат КАК ЧекККМВозврат
    ГДЕ
    ЧекККМВозврат.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ЧекККМВозврат.Проведен)

    СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Номенклатура,
    ЧекККМТовары.Продавец,
    ЧекККМТовары.Характеристика,
    ЧекККМТовары.Ссылка.КассоваяСмена,
    НАЧАЛОПЕРИОДА(ЧекККМТовары.Ссылка.Дата, ДЕНЬ),
    ЧекККМТовары.Ссылка.Склад
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
    ОтчетОРозничныхПродажахТовары.Сумма,
    ОтчетОРозничныхПродажахТовары.Ссылка КАК Документ,
    ОтчетОРозничныхПродажахТовары.Характеристика,
    ОтчетОРозничныхПродажахТовары.Количество,
    ОтчетОРозничныхПродажахТовары.Продавец
    ПОМЕСТИТЬ втОРП
    ИЗ
    Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
    ГДЕ
    ОтчетОРозничныхПродажахТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ОтчетОРозничныхПродажахТовары.Ссылка.Проведен
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЕСТЬNULL(втЧеки.Номенклатура, "Отсутствует") КАК НоменклатураПоЧеку,
    ЕСТЬNULL(втЧеки.Сумма, "Отсутствует") КАК СуммаПоЧеку,
    ЕСТЬNULL(втОРП.Документ, "Отсутствует") КАК ДокументПоОтчету,
    ЕСТЬNULL(втОРП.Сумма, "Отсутствует") КАК СуммаПоОтчету,
    ЕСТЬNULL(втОРП.Документ.Склад, "Отсутствует") КАК СкладПоОтчету,
    ЕСТЬNULL(втОРП.Номенклатура, "Отсутствует") КАК НоменклатураПоОтчету,
    ЕСТЬNULL(втОРП.Характеристика, "Отсутствует") КАК ХарактеристикаПоОтчету,
    ЕСТЬNULL(втЧеки.Характеристика, "Отсутствует") КАК ХарактеристикаПоЧеку,
    ЕСТЬNULL(втОРП.Количество, "Отсутствует") КАК КоличествоПоОтчету,
    ЕСТЬNULL(втЧеки.Количество, "Отсутствует") КАК КоличествоПоЧеку,
    ЕСТЬNULL(втЧеки.Продавец, "Отсутствует") КАК ПродавецПоЧеку,
    ЕСТЬNULL(втОРП.Продавец, "Отсутствует") КАК ПродавецПоОтчету,
    ЕСТЬNULL(втЧеки.ПериодДень, "Отсутствует") КАК ПериодДеньПоЧеку,
    ЕСТЬNULL(втЧеки.КассоваяСмена, "Отсутствует") КАК КассоваяСменаПоЧеку,
    ЕСТЬNULL(втЧеки.Склад, "Отсутствует") КАК СкладПоЧеку
    ИЗ
    втЧеки КАК втЧеки
    ПОЛНОЕ СОЕДИНЕНИЕ втОРП КАК втОРП
    ПО втЧеки.Сумма = втОРП.Сумма
    И втЧеки.Номенклатура = втОРП.Номенклатура
    И втЧеки.Характеристика = втОРП.Характеристика
    И втЧеки.Продавец = втОРП.Продавец
    И втЧеки.КассоваяСмена = втОРП.Документ.КассоваяСмена
```

В типовой УТ 11 сначала в виртуальную таблицу помещают нужные реквизиты всех, например, чеков, потом из РН получают нужные обороты, и соединяют с ранееполученной ВТ для получения реквизитов.
Трудно уловить... чтобы понять надо посмотреть в отладчике...
Короче, надо будет взгянуть код, как это делает 1С. С Виртуальными таблицами я еще плохо знаком, т.к. недавно начал осваивать 1С.

(7) Чеки ККМ регистрируются в
ДвижениеСерийТоваров
ДенежныеСредстваВКассахККМ
РасчетыПоЭкварингу
СвободныеОстатки +
ТоварыНаСкладах +
Где + там есть Номенклатура, Количество, Характеристика
Суммы нет, также нету продавец, кассовая смена.
И выше я писал что после архивации в регистрах нету чеков.
---
Подвожу итог.
Было по запросу (8)
Результат запроса (количество строк = 2699, время выполнения 12.15 сек.)

Стало:
По запросу (18)
Результат запроса (количество строк = 2699, время выполнения 0.125 сек.)
По запросу (19) с индексами
Результат запроса (количество строк = 2699, время выполнения 0.141 сек.)

В данном случае с индексами чуть хуже, но это видимо из-за небольшого количества обрабатываемых данных.

Но по сравнению с чем было, разница огромна.

Всем большое спасибо.

Особенно:
Павлу (6) и (16)
Сергею (9) и (17)
---
```1c
    ЛЕВОЕ СОЕДИНЕНИЕ втЧекиВозврат КАК втЧекиВозврат
    ПО ЧекККМТовары.Ссылка = втЧекиВозврат.ЧекККМ
    ГДЕ
    ...
    ВЫБОР
    КОГДА ЧекККМТовары.Ссылка = втЧекиВозврат.ЧекККМ
    ТОГДА ЛОЖЬ
    ИНАЧЕ ИСТИНА
    КОНЕЦ
```
---
```1c
    ВЫБРАТЬ
    докЧекККМ.Ссылка КАК ЧекККМ,
    докЧекККМ.КассоваяСмена,
    НАЧАЛОПЕРИОДА(докЧекККМ.Дата, ДЕНЬ) КАК День,
    докЧекККМ.Склад
    ПОМЕСТИТЬ втЧекиНеВозврат
    ИЗ
    Документ.ЧекККМ КАК докЧекККМ
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМВозврат КАК ЧекККМВозврат
    ПО (ЧекККМВозврат.ЧекККМ = докЧекККМ.Ссылка)
    И (ЧекККМВозврат.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания)
    И (ЧекККМВозврат.Проведен)
    ГДЕ
    докЧекККМ.Проведен
    И докЧекККМ.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ЧекККМВозврат.Ссылка ЕСТЬ NULL
    ;

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

    СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Номенклатура,
    ЧекККМТовары.Продавец,
    ЧекККМТовары.Характеристика,
    втЧекиНеВозврат.КассоваяСмена,
    втЧекиНеВозврат.День,
    втЧекиНеВозврат.Склад
```
---
Не заметил сообщения Павла (6)
Павел, спасибо большое.
Видимо Сергей это и имел ввиду.

С другой стороны, я бы сначала отобрал все чеки, которые не были возвращены по таблице "Документ.Чеки", а не по табличной части. А потом бы уже эту ВТ соединил с товарами чеков и агрегировал. Так должно быть быстрее.
---
В итоге получил следующий запрос:

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

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

    СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Номенклатура,
    ЧекККМТовары.Продавец,
    ЧекККМТовары.Характеристика,
    втЧекиНеВозврат.КассоваяСмена,
    втЧекиНеВозврат.День,
    втЧекиНеВозврат.Склад

    ;
    ВЫБРАТЬ
    ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
    ОтчетОРозничныхПродажахТовары.Сумма,
    ОтчетОРозничныхПродажахТовары.Ссылка КАК Документ,
    ОтчетОРозничныхПродажахТовары.Характеристика,
    ОтчетОРозничныхПродажахТовары.Количество,
    ОтчетОРозничныхПродажахТовары.Продавец
    ПОМЕСТИТЬ втОРП
    ИЗ
    Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
    ГДЕ
    ОтчетОРозничныхПродажахТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ОтчетОРозничныхПродажахТовары.Ссылка.Проведен
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЕСТЬNULL(втЧеки.Номенклатура, "Отсутствует") КАК НоменклатураПоЧеку,
    ЕСТЬNULL(втЧеки.Сумма, "Отсутствует") КАК СуммаПоЧеку,
    ЕСТЬNULL(втОРП.Документ, "Отсутствует") КАК ДокументПоОтчету,
    ЕСТЬNULL(втОРП.Сумма, "Отсутствует") КАК СуммаПоОтчету,
    ЕСТЬNULL(втОРП.Документ.Склад, "Отсутствует") КАК СкладПоОтчету,
    ЕСТЬNULL(втОРП.Номенклатура, "Отсутствует") КАК НоменклатураПоОтчету,
    ЕСТЬNULL(втОРП.Характеристика, "Отсутствует") КАК ХарактеристикаПоОтчету,
    ЕСТЬNULL(втЧеки.Характеристика, "Отсутствует") КАК ХарактеристикаПоЧеку,
    ЕСТЬNULL(втОРП.Количество, "Отсутствует") КАК КоличествоПоОтчету,
    ЕСТЬNULL(втЧеки.Количество, "Отсутствует") КАК КоличествоПоЧеку,
    ЕСТЬNULL(втЧеки.Продавец, "Отсутствует") КАК ПродавецПоЧеку,
    ЕСТЬNULL(втОРП.Продавец, "Отсутствует") КАК ПродавецПоОтчету,
    ЕСТЬNULL(втЧеки.ПериодДень, "Отсутствует") КАК ПериодДеньПоЧеку,
    ЕСТЬNULL(втЧеки.КассоваяСмена, "Отсутствует") КАК КассоваяСменаПоЧеку,
    ЕСТЬNULL(втЧеки.Склад, "Отсутствует") КАК СкладПоЧеку
    ИЗ
    втЧеки КАК втЧеки
    ПОЛНОЕ СОЕДИНЕНИЕ втОРП КАК втОРП
    ПО втЧеки.Сумма = втОРП.Сумма
    И втЧеки.Номенклатура = втОРП.Номенклатура
    И втЧеки.Характеристика = втОРП.Характеристика
    И втЧеки.Продавец = втОРП.Продавец
    И втЧеки.КассоваяСмена = втОРП.Документ.КассоваяСмена
```

Следует ли табличную часть ОтчетОРозничныхПродажах.Товары тоже делить на две таблицы?

Стало побыстрее, консоль запросов показывает 0.967 сек. но это она врет фактически где-то 7-8 сек.
Мой запрос делал это примерно за 11 сек.
---
Следует ли табличную часть ОтчетОРозничныхПродажах.Товары тоже делить на две таблицы?
Стоит. Конструкция "ТабЧасть.Ссылка.Условие" - плохая конструкция.
---
10 секунд - это время отображения результата при использовании управляемых форм (сервер передает на клиент контекст формы), ко времени выполнения запроса оно отношения имеет мало.

Помнится, в обычных консолях запросов как-то так время меряется:

```1c
    ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
    Результат = Запрос.Выполнить();
    времяВыполненияЗапроса = ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала;
    Таблица = Результат.Выгрузить();
```

Т.е. время выгрузки таблицы, время создания колонок и прочее не учитывается. Вот оно все и занимает 8 сек, в то время как сам запрос выполняется за секунду. Это можно посмотреть в конфигураторе через замер производительности.

Помимо прочего, можно рекомендовать проиндексировтаь большую временную таблицу, которая участвует в последующем в соединении по полям соединения. Но нужно иметь ввиду, что у операции вставки в такую таблицу цена выше.
---
Большое спасибо Сергей. Как говориться век живи век учись.

В итоге получился следующий , наверное и окончательный запрос:

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

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

    СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Номенклатура,
    ЧекККМТовары.Продавец,
    ЧекККМТовары.Характеристика,
    втЧекиНеВозврат.КассоваяСмена,
    втЧекиНеВозврат.День,
    втЧекиНеВозврат.Склад
    ;

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ОтчетОРозничныхПродажахТовары.Номенклатура,
    ОтчетОРозничныхПродажахТовары.Сумма,
    ОтчетОРозничныхПродажахТовары.Характеристика,
    ОтчетОРозничныхПродажахТовары.Количество,
    ОтчетОРозничныхПродажахТовары.Продавец,
    втОРПбезТоваров.Ссылка КАК Документ,
    втОРПбезТоваров.Склад КАК Склад,
    втОРПбезТоваров.КассоваяСмена КАК КассоваяСмена
    ПОМЕСТИТЬ втОРП
    ИЗ
    Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ втОРПбезТоваров КАК втОРПбезТоваров
    ПО ОтчетОРозничныхПродажахТовары.Ссылка = втОРПбезТоваров.Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЕСТЬNULL(втЧеки.Номенклатура, "Отсутствует") КАК НоменклатураПоЧеку,
    ЕСТЬNULL(втЧеки.Сумма, "Отсутствует") КАК СуммаПоЧеку,
    ЕСТЬNULL(втОРП.Документ, "Отсутствует") КАК ДокументПоОтчету,
    ЕСТЬNULL(втОРП.Сумма, "Отсутствует") КАК СуммаПоОтчету,
    ЕСТЬNULL(втОРП.Склад, "Отсутствует") КАК СкладПоОтчету,
    ЕСТЬNULL(втОРП.Номенклатура, "Отсутствует") КАК НоменклатураПоОтчету,
    ЕСТЬNULL(втОРП.Характеристика, "Отсутствует") КАК ХарактеристикаПоОтчету,
    ЕСТЬNULL(втЧеки.Характеристика, "Отсутствует") КАК ХарактеристикаПоЧеку,
    ЕСТЬNULL(втОРП.Количество, "Отсутствует") КАК КоличествоПоОтчету,
    ЕСТЬNULL(втЧеки.Количество, "Отсутствует") КАК КоличествоПоЧеку,
    ЕСТЬNULL(втЧеки.Продавец, "Отсутствует") КАК ПродавецПоЧеку,
    ЕСТЬNULL(втОРП.Продавец, "Отсутствует") КАК ПродавецПоОтчету,
    ЕСТЬNULL(втЧеки.ПериодДень, "Отсутствует") КАК ПериодДеньПоЧеку,
    ЕСТЬNULL(втЧеки.КассоваяСмена, "Отсутствует") КАК КассоваяСменаПоЧеку,
    ЕСТЬNULL(втЧеки.Склад, "Отсутствует") КАК СкладПоЧеку
    ИЗ
    втЧеки КАК втЧеки
    ПОЛНОЕ СОЕДИНЕНИЕ втОРП КАК втОРП
    ПО втЧеки.Сумма = втОРП.Сумма
    И втЧеки.Номенклатура = втОРП.Номенклатура
    И втЧеки.Характеристика = втОРП.Характеристика
    И втЧеки.Продавец = втОРП.Продавец
    И втЧеки.КассоваяСмена = втОРП.КассоваяСмена
```
---
Помимо прочего, можно рекомендовать проиндексировтаь большую временную таблицу, которая участвует в последующем в соединении по полям соединения. Но нужно иметь ввиду, что у операции вставки в такую таблицу цена выше.

Добавил индексы.
Сергей, проверьте пожалуйста

Запрос:

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

    ИНДЕКСИРОВАТЬ ПО
    ЧекККМ
    ;

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

    СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Номенклатура,
    ЧекККМТовары.Продавец,
    ЧекККМТовары.Характеристика,
    втЧекиНеВозврат.КассоваяСмена,
    втЧекиНеВозврат.День,
    втЧекиНеВозврат.Склад

    ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Характеристика,
    Продавец,
    Сумма,
    КассоваяСмена
    ;

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

    ИНДЕКСИРОВАТЬ ПО
    Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
    ОтчетОРозничныхПродажахТовары.Сумма КАК Сумма,
    ОтчетОРозничныхПродажахТовары.Характеристика КАК Характеристика,
    ОтчетОРозничныхПродажахТовары.Количество,
    ОтчетОРозничныхПродажахТовары.Продавец КАК Продавец,
    втОРПбезТоваров.Ссылка КАК Документ,
    втОРПбезТоваров.Склад КАК Склад,
    втОРПбезТоваров.КассоваяСмена КАК КассоваяСмена
    ПОМЕСТИТЬ втОРП
    ИЗ
    Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ втОРПбезТоваров КАК втОРПбезТоваров
    ПО ОтчетОРозничныхПродажахТовары.Ссылка = втОРПбезТоваров.Ссылка

    ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Характеристика,
    Продавец,
    Сумма,
    КассоваяСмена
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЕСТЬNULL(втЧеки.Номенклатура, "Отсутствует") КАК НоменклатураПоЧеку,
    ЕСТЬNULL(втЧеки.Сумма, "Отсутствует") КАК СуммаПоЧеку,
    ЕСТЬNULL(втОРП.Документ, "Отсутствует") КАК ДокументПоОтчету,
    ЕСТЬNULL(втОРП.Сумма, "Отсутствует") КАК СуммаПоОтчету,
    ЕСТЬNULL(втОРП.Склад, "Отсутствует") КАК СкладПоОтчету,
    ЕСТЬNULL(втОРП.Номенклатура, "Отсутствует") КАК НоменклатураПоОтчету,
    ЕСТЬNULL(втОРП.Характеристика, "Отсутствует") КАК ХарактеристикаПоОтчету,
    ЕСТЬNULL(втЧеки.Характеристика, "Отсутствует") КАК ХарактеристикаПоЧеку,
    ЕСТЬNULL(втОРП.Количество, "Отсутствует") КАК КоличествоПоОтчету,
    ЕСТЬNULL(втЧеки.Количество, "Отсутствует") КАК КоличествоПоЧеку,
    ЕСТЬNULL(втЧеки.Продавец, "Отсутствует") КАК ПродавецПоЧеку,
    ЕСТЬNULL(втОРП.Продавец, "Отсутствует") КАК ПродавецПоОтчету,
    ЕСТЬNULL(втЧеки.ПериодДень, "Отсутствует") КАК ПериодДеньПоЧеку,
    ЕСТЬNULL(втЧеки.КассоваяСмена, "Отсутствует") КАК КассоваяСменаПоЧеку,
    ЕСТЬNULL(втЧеки.Склад, "Отсутствует") КАК СкладПоЧеку
    ИЗ
    втЧеки КАК втЧеки
    ПОЛНОЕ СОЕДИНЕНИЕ втОРП КАК втОРП
    ПО втЧеки.Номенклатура = втОРП.Номенклатура
    И втЧеки.Характеристика = втОРП.Характеристика
    И втЧеки.Продавец = втОРП.Продавец
    И втЧеки.Сумма = втОРП.Сумма
    И втЧеки.КассоваяСмена = втОРП.КассоваяСмена
```
---
По индексам есть возражение - их надо использовать только после магического числа "4000" записей в ВТ - до этого числа даже при наличии индекса при соединениях его наличие игнорируется
---
Спасибо за информацию, буду знать.
---
Немного переделал запрос. Возник случай когда вернули только одну позицию из чека. В этом случае исключать полностью чек было бы неправильно.
Вот запрос:

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЧекККМВозврат.Ссылка,
    ЧекККМВозврат.КассоваяСмена,
    ЧекККМВозврат.Склад,
    ЧекККМВозврат.Организация
    ПОМЕСТИТЬ втЧекККМВозврат
    ИЗ
    Документ.ЧекККМВозврат КАК ЧекККМВозврат
    ГДЕ
    ЧекККМВозврат.Проведен
    И ЧекККМВозврат.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    ;

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

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ЧекККМВозвратТовары.Номенклатура,
    ЧекККМВозвратТовары.Характеристика,
    -ЧекККМВозвратТовары.Количество,
    -ЧекККМВозвратТовары.Сумма,
    ЧекККМВозвратТовары.Продавец,
    втЧекККМВозврат.КассоваяСмена,
    втЧекККМВозврат.Склад,
    втЧекККМВозврат.Организация
    ИЗ
    Документ.ЧекККМВозврат.Товары КАК ЧекККМВозвратТовары
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ втЧекККМВозврат КАК втЧекККМВозврат
    ПО ЧекККМВозвратТовары.Ссылка = втЧекККМВозврат.Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втЧекиВсе.Номенклатура,
    втЧекиВсе.Характеристика,
    СУММА(втЧекиВсе.Количество) КАК Количество,
    СУММА(втЧекиВсе.Сумма) КАК Сумма,
    втЧекиВсе.Продавец,
    втЧекиВсе.КассоваяСмена,
    втЧекиВсе.Склад,
    втЧекиВсе.Организация
    ПОМЕСТИТЬ втЧеки
    ИЗ
    втЧекиВсе КАК втЧекиВсе

    СГРУППИРОВАТЬ ПО
    втЧекиВсе.Номенклатура,
    втЧекиВсе.Характеристика,
    втЧекиВсе.Продавец,
    втЧекиВсе.КассоваяСмена,
    втЧекиВсе.Склад,
    втЧекиВсе.Организация

    ИМЕЮЩИЕ
    СУММА(втЧекиВсе.Сумма) <> 0
    ;

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ОтчетОРозничныхПродажахТовары.Номенклатура,
    ОтчетОРозничныхПродажахТовары.Характеристика,
    ОтчетОРозничныхПродажахТовары.Количество,
    ОтчетОРозничныхПродажахТовары.Сумма,
    ОтчетОРозничныхПродажахТовары.Продавец,
    втОРПбезТоваров.Ссылка КАК Документ,
    втОРПбезТоваров.КассоваяСмена,
    втОРПбезТоваров.Склад,
    втОРПбезТоваров.Организация
    ПОМЕСТИТЬ втОРП
    ИЗ
    Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ втОРПбезТоваров КАК втОРПбезТоваров
    ПО ОтчетОРозничныхПродажахТовары.Ссылка = втОРПбезТоваров.Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЕСТЬNULL(втЧеки.Номенклатура, ЛОЖЬ) КАК НоменклатураПоЧеку,
    ЕСТЬNULL(втЧеки.Характеристика, ЛОЖЬ) КАК ХарактеристикаПоЧеку,
    ЕСТЬNULL(втЧеки.Количество, ЛОЖЬ) КАК КоличествоПоЧеку,
    ЕСТЬNULL(втЧеки.Сумма, ЛОЖЬ) КАК СуммаПоЧеку,
    ЕСТЬNULL(втЧеки.Продавец, ЛОЖЬ) КАК ПродавецПоЧеку,
    ЕСТЬNULL(втЧеки.КассоваяСмена, ЛОЖЬ) КАК КассоваяСменаПоЧеку,
    ЕСТЬNULL(втЧеки.Склад, ЛОЖЬ) КАК СкладПоЧеку,
    ЕСТЬNULL(втЧеки.Организация, ЛОЖЬ) КАК ОрганизацияПоЧеку,
    ЕСТЬNULL(втОРП.Номенклатура, ЛОЖЬ) КАК НоменклатураПоОтчету,
    ЕСТЬNULL(втОРП.Характеристика, ЛОЖЬ) КАК ХарактеристикаПоОтчету,
    ЕСТЬNULL(втОРП.Количество, ЛОЖЬ) КАК КоличествоПоОтчету,
    ЕСТЬNULL(втОРП.Сумма, ЛОЖЬ) КАК СуммаПоОтчету,
    ЕСТЬNULL(втОРП.Продавец, ЛОЖЬ) КАК ПродавецПоОтчету,
    ЕСТЬNULL(втОРП.КассоваяСмена, ЛОЖЬ) КАК КассоваяСменаПоОтчету,
    ЕСТЬNULL(втОРП.Склад, ЛОЖЬ) КАК СкладПоОтчету,
    ЕСТЬNULL(втОРП.Организация, ЛОЖЬ) КАК ОрганизацияПоОтчету,
    ЕСТЬNULL(втОРП.Документ, ЛОЖЬ) КАК ДокументПоОтчету
    ИЗ
    втЧеки КАК втЧеки
    ПОЛНОЕ СОЕДИНЕНИЕ втОРП КАК втОРП
    ПО втЧеки.Номенклатура = втОРП.Номенклатура
    И втЧеки.Характеристика = втОРП.Характеристика
    И втЧеки.Продавец = втОРП.Продавец
    И втЧеки.Сумма = втОРП.Сумма
    И втЧеки.КассоваяСмена = втОРП.КассоваяСмена
```

Прикрепляю внешний отчет "Сверка документов кассовых чеков и отчетов о розничных продажах".