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

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

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #38090
      Фото аватараOdineski
      Участник

        ПОМЕСТИТЬ пишем после ВЫБРАТЬ. Ты меня пугаешь. Переделай правильно

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

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

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

          Пояснения:

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

          Параметры:

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С