Как устранить ошибку использования &ВТ_Врем в запросах 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как устранить ошибку использования &ВТ_Врем в запросах 1С?

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

        Запрос = Новый Запрос;
        Запрос.Текст = «ВЫБРАТЬ
        | ТЗ.Спецификация КАК Спецификация,
        | ТЗ.Номенклатура КАК Номенклатура,
        | ТЗ.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
        | ТЗ.Количество КАК Количество,
        | ТЗ.МаркаСтали КАК МаркаСтали,
        | ТЗ.НомерГОСТа КАК НомерГОСТа,
        | ТЗ.Характеристика КАК Характеристика,
        | ТЗ.СтатьяКалькуляции КАК СтатьяКалькуляции,
        | ТЗ.ПрименениеМатериалаРедактирование КАК ПрименениеМатериалаРедактирование
        |ПОМЕСТИТЬ ВТ_Врем
        |ИЗ
        | &ТЗ КАК ТЗ
        |;
        |ВЫБРАТЬ
        | ВТ_Врем.Спецификация КАК Спецификация,
        | ВТ_Врем.Номенклатура КАК Номенклатура,
        | СпрНоменклатура.нсиКодНСИ КАК КодЕСНСИ,
        | ВТ_Врем.Номенклатура КАК НаименованиеМатериала,
        | ВТ_Врем.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
        | ВТ_Врем.Количество КАК Количество,
        | ВТ_Врем.МаркаСтали КАК МаркаСтали,
        | ВТ_Врем.НомерГОСТа КАК НомерГОСТа,
        | ВТ_Врем.Характеристика КАК Характеристика,
        | ВТ_Врем.СтатьяКалькуляции КАК СтатьяКалькуляции,
        | ВТ_Врем.ПрименениеМатериалаРедактирование КАК Примечание
        |ИЗ
        | &ВТ_Врем КАК ВТ_Врем
        | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
        | ПО ВТ_Врем.Номенклатура = СпрНоменклатура.Ссылка
        |ИТОГИ ПО
        | ВТ_Врем.СтатьяКалькуляции»;

        Запрос.УстановитьПараметр(«ТЗ», ТЗСпецификации);
        Запрос.УстановитьПараметр(«ВТ_Врем», ТЗСпецификации);

        Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

        Ошибка при вызове метода контекста (Выполнить)
        {ВнешняяОбработка.ПФ_MXL_ЗаявкаНаПотребныйМатериал_.МодульОбъекта(249)}:Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        {ВнешняяОбработка.ПФ_MXL_ЗаявкаНаПотребныйМатериал_.Форма.Форма.Форма(15)}: Возврат РеквизитФормыВЗначение(«Объект»).СформироватьПечатнуюФорму(СтруктураТипов, МассивДокументов, Новый СписокЗначений);
        {ВнешняяОбработка.ПФ_MXL_ЗаявкаНаПотребныйМатериал_.Форма.Форма.Форма(4)}: ТабДок = КомандаСформироватьНаСервере();
        по причине:
        Содержимое объекта данных может быть выбрано только во временную таблицу

        по причине:
        Содержимое объекта данных может быть выбрано только во временную таблицу

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

          Ошибка «Содержимое объекта данных может быть выбрано только во временную таблицу» возникает из-за того, что вы пытаетесь использовать параметр &ВТ_Врем как таблицу значений, но при этом в запросе он указан как &ВТ_Врем, а не как временная таблица, созданная в самом запросе.

          В 1С нельзя одновременно использовать и ПОМЕСТИТЬ и параметр с таким же именем.

          В вашем запросе:

          |ПОМЕСТИТЬ ВТ_Врем
          |ИЗ
          | &ТЗ КАК ТЗ
          |;
          |
          |ВЫБРАТЬ
          | …
          |ИЗ
          | &ВТ_Врем КАК ВТ_Врем
          | ЛЕВОЕ СОЕДИНЕНИЕ …

          Вы сначала создаёте временную таблицу ВТ_Врем из параметра &ТЗ, а потом пытаетесь использовать параметр &ВТ_Врем, которого в параметрах нет (или он у вас тоже ТЗСпецификации).

          Так делать нельзя.

          Как исправить:

          1. Уберите параметр &ВТ_Врем из запроса, используйте временную таблицу ВТ_Врем, созданную в запросе.

          2. В запросе во второй части обращайтесь просто к ВТ_Врем, а не к &ВТ_Врем.

          3. В коде 1С установите только параметр «ТЗ».

          Правильный запрос:

          |ВЫБРАТЬ
          | ТЗ.Спецификация КАК Спецификация,
          | ТЗ.Номенклатура КАК Номенклатура,
          | ТЗ.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
          | ТЗ.Количество КАК Количество,
          | ТЗ.МаркаСтали КАК МаркаСтали,
          | ТЗ.НомерГОСТа КАК НомерГОСТа,
          | ТЗ.Характеристика КАК Характеристика,
          | ТЗ.СтатьяКалькуляции КАК СтатьяКалькуляции,
          | ТЗ.ПрименениеМатериалаРедактирование КАК ПрименениеМатериалаРедактирование
          |ПОМЕСТИТЬ ВТ_Врем
          |ИЗ
          | &ТЗ КАК ТЗ
          |;
          |
          |ВЫБРАТЬ
          | ВТ_Врем.Спецификация КАК Спецификация,
          | ВТ_Врем.Номенклатура КАК Номенклатура,
          | СпрНоменклатура.нсиКодНСИ КАК КодЕСНСИ,
          | ВТ_Врем.Номенклатура КАК НаименованиеМатериала,
          | ВТ_Врем.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
          | ВТ_Врем.Количество КАК Количество,
          | ВТ_Врем.МаркаСтали КАК МаркаСтали,
          | ВТ_Врем.НомерГОСТа КАК НомерГОСТа,
          | ВТ_Врем.Характеристика КАК Характеристика,
          | ВТ_Врем.СтатьяКалькуляции КАК СтатьяКалькуляции,
          | ВТ_Врем.ПрименениеМатериалаРедактирование КАК Примечание
          |ИЗ
          | ВТ_Врем КАК ВТ_Врем
          | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
          | ПО ВТ_Врем.Номенклатура = СпрНоменклатура.Ссылка
          |ИТОГИ ПО
          | ВТ_Врем.СтатьяКалькуляции

          В коде 1С:

          Объяснение:

          — ВТ_Врем — временная таблица, созданная в запросе через ПОМЕСТИТЬ.

          — Вы не можете передавать &ВТ_Врем как параметр, если она создаётся в запросе.

          — Используйте только &ТЗ как параметр.

          Если хотите, могу помочь с полным примером.

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