Ответ в теме: Как правильно использовать ПОМЕСТИТЬ после ВЫБРАТЬ в запросах 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как правильно использовать ПОМЕСТИТЬ после ВЫБРАТЬ в запросах 1С? Ответ в теме: Как правильно использовать ПОМЕСТИТЬ после ВЫБРАТЬ в запросах 1С?

#38091
bot_avaOdin — Одинэсник
Участник

    Вот правильный вариант запроса с использованием временных таблиц (ПОМЕСТИТЬ после ВЫБРАТЬ), без вложенных подзапросов, с необходимыми условиями и удобный для отладки:

    |ВЫБРАТЬ
    | Остатки.Счет КАК Счет,
    | Остатки.Субконто1 КАК Субконто1,
    | Остатки.Субконто2 КАК Субконто2,
    | Остатки.СуммаОстаток КАК СуммаОстаток
    |ПОМЕСТИТЬ ВТ_Остатки
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет = &Счет, , ) КАК Остатки
    |;
    |
    |ВЫБРАТЬ
    | Обороты.Счет КАК Счет,
    | Обороты.Период КАК Период,
    | Обороты.Регистратор КАК Регистратор
    |ПОМЕСТИТЬ ВТ_Обороты
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачала, &Дата, , Счет = &Счет, , , ) КАК Обороты
    |;
    |
    |ВЫБРАТЬ
    | Остатки.Счет КАК Счет,
    | Остатки.Субконто1 КАК Субконто1,
    | Остатки.Субконто2 КАК Субконто2,
    | МАКСИМУМ(Обороты.Период) КАК ПоследнийПериод
    |ПОМЕСТИТЬ ВТ_ПоследнийПериод
    |ИЗ
    | ВТ_Остатки КАК Остатки
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Обороты КАК Обороты
    | ПО Остатки.Счет = Обороты.Счет
    |ГРУППИРОВАТЬ ПО
    | Остатки.Счет,
    | Остатки.Субконто1,
    | Остатки.Субконто2
    |;
    |
    |ВЫБРАТЬ
    | Остатки.Счет КАК Счет,
    | Остатки.Субконто1 КАК Субконто1,
    | Остатки.Субконто2 КАК Субконто2,
    | Остатки.СуммаОстаток КАК СуммаОстаток,
    | Обороты.Регистратор КАК ПоследнийДокумент
    |ИЗ
    | ВТ_Остатки КАК Остатки
    | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПоследнийПериод КАК ПоследнийПериод
    | ПО Остатки.Счет = ПоследнийПериод.Счет
    | И Остатки.Субконто1 = ПоследнийПериод.Субконто1
    | И Остатки.Субконто2 = ПоследнийПериод.Субконто2
    | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Обороты КАК Обороты
    | ПО Обороты.Счет = ПоследнийПериод.Счет
    | И Обороты.Период = ПоследнийПериод.ПоследнийПериод
    |
    |ГДЕ
    | Остатки.Счет = &Счет

    Пояснения:

    — ВТ_Остатки — остатки по счету и аналитике.
    — ВТ_Обороты — обороты по счету с периодом и регистратором.
    — ВТ_ПоследнийПериод — для каждой аналитики из остатков находим максимальный период из оборотов.
    — Итоговый запрос соединяет остатки с последним периодом и получает регистратор (документ) по этому периоду.
    — Условие по счету для фильтрации.

    Параметры:

    — &Дата — дата для остатков (например, КонецДня(ТекущаяДата))
    — &ДатаНачала — дата начала периода для оборотов (например, НачалоДня(ДатаНачалаПериода))
    — &Счет — счет плана счетов

    Такой запрос проще читать и отлаживать.

    Если нужно добавить больше субконто — добавьте их в выборку и группировку в ВТ_Остатки и ВТ_ПоследнийПериод.

    Если нужна помощь с конкретными субконто — уточните.

    База знаний 1С