Ошибка в запросе 1с неоднозначное поле в запросе

Содержание:

1.       Причина ошибки Неоднозначное поле

2.       Как устранить ошибку в запросе Неоднозначное поле  

1.      Причина ошибки Неоднозначное поле

«Неоднозначное поле» – это ошибка программы 1С, возникающая в результате формирования некорректного текста запроса. А именно, когда имя таблицы и поле – идентичны. Неопределенность возникает из-за одинаковых имен полей и имен таблиц в запросе.

Ниже приведен скрин-пример с простым текстом без ошибки в запросе «Неоднозначное поле» и умышленное ее допущение:

Причина возникновения ошибки неоднозначного поля в 1С

Причина возникновения ошибки неоднозначного поля в 1С

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

Также ошибка «Неоднозначное поле» в 1С может появиться в менее примитивном примере, в результате связи двух таблиц, где имя одной таблицы совпадет с именем поля другой таблицы:

Ошибка в результате связи двух таблиц

Ошибка в результате связи двух таблиц

Об этом пользователя оповестит окно конструктора запроса (ошибка Неоднозначное поле) и высветит предупреждение с вопросом игнорировать его или нет.

Окно конструктора запросов с оповещением об ошибке

Окно конструктора запросов с оповещением об ошибке

В случае подтверждения будьте готовы к тому, что конструктор запроса Вы не сможете открыть повторно, пока не устраните ошибку неоднозначности поля непосредственно в самом тексте без использования конструктора запросов:

Тут “зарыта собака” ошибки Неоднозначное поле

Тут “зарыта собака” ошибки Неоднозначное поле в тексте запроса

При попытке открытия конструктора запроса система выдаст оповещение об ошибке неоднозначности поля с указаниям места текста «конфликта».

Система сама указывает на место ошибки

Система сама указывает на место ошибки Неоднозначное поле 

2. Как устранить ошибку в запросе Неоднозначное поле

Для устранения ошибки в запросе в 1С «Неоднозначное поле» достаточно переименовать таблицу, назначив имя, отличное от имени поля:

Устранение ошибки Неоднозначное поле

Устранение ошибки Неоднозначное поле

Проговорим еще раз:


1. Имя справочника не должно совпадать с именем ресурса регистра сведений.


Пример:


Псевдоним Справочник.Номенклатура КАК Номенклатура
совпадает с именем поля ЦеныНоменклатуры.Номенклатура

Достаточно исправить:

Справочник.Номенклатура КАК спрНоменклатура

2. Используем переименование таблиц в случае возможного совпадения с полями ссылочного характера.

Переименование таблиц

Переименование таблиц

3. При создании временных таблиц не допускайте повторения имен таблиц в запросе и их совпадения, т.к. это вызовет большую вероятность возникновения ошибки в случае связи или объединения этих таблиц.

Пример:

Объединение таблиц с ошибкой Неоднозначное поле

Объединение таблиц с ошибкой Неоднозначное поле

Частая ошибка начинающих программистов – обращение к данным и запрос к табличным частям документа с их незамысловатым переименованием, например, как ЗаказПокупателя.

Типичная ошибка начинающих программистов

Типичная ошибка начинающих программистов, приводящая к ошибке Неоднозначное поле

На выходе получаем все ту же ошибку неоднозначного поля «ЗаказПокупателя.Ссылка». Где в запросе ошибка? Правильно – в совпадение имен таблиц.

Достаточно переименовать ТоварыЗаказКлиента и УслугиЗаказКлиента (или ЗаказКлиента и ЗаказКлиента1) – ошибка запроса неоднозначное поле исчезнет.

Специалист компании «Кодерлайн»

Юлия Антонова

Неоднозначное поле

Причина ошибки в совпадении названия (псевдонима) таблицы и имени поля таблицы или реквизита, либо реквизитов соединяемых таблиц. Причем совпадение псевдонимов полей в разных источниках допускается.

Данная ошибка может возникнуть:

  • в момент сохранения конструктора запрос,
  • при начале редактирования через конструктор,
  • при исполнении ошибочного запроса.

Текст запроса, который может вызвать ошибку

ВЫБРАТЬ
    Ссылка.Ссылка КАК Ключи
ИЗ
    Справочник.Ключи КАК Ссылка

Ошибка при соединении

Чаще всего ошибка возникает не в простых запросах (как выше), а при соединении похожих или одинаковых  таблиц.

Например, справочников по полям  ссылка, наименование, код (присутствующих у всех)

ВЫБРАТЬ
   ключи.Ссылка КАК ключи
ИЗ
   Справочник.Ключи КАК ключи
   ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Ключи КАК Ключи2
      ПО Наименование = Наименование

neodnoznachnoe-pole-pri-soedinenii

Исправление ошибки

  • При соединениях следует указывать названия таблиц: Ключи.Ссылка = Ключи2.Ссылка.
  • Названия таблиц выбирать не совпадающими с полем «Имя» реквизита.
  • Если объект добавлен вами и вы создали, например, реквизит Договоры в Справочник.Договоры, лучше переименовать его, т.к. подобные ошибки будут возникать регулярно.
  • Если используются временные таблицы, обратите внимание на их имена на предмет аналогичного совпадения.

Пример кода с временными таблицами —  «Наименование» не вызывает ошибку в отличии от ссылка (Поле не используется при соединении, но есть в полях выборки):

ВЫБРАТЬ
   "ключ" КАК Ссылка
ПОМЕСТИТЬ Ключи
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Наименование,
   Ссылка
ИЗ
   Справочник.Ключи КАК Ключи
   ЛЕВОЕ СОЕДИНЕНИЕ Ключи как Ключи2 ПО  (ИСТИНА)

Безошибочный код

ВЫБРАТЬ
    ключи.Ссылка КАК ключи
ИЗ
    Справочник.Ключи КАК ключи

neodnoznachnoe-pole-ssylka

Женщина побеждает как реклама: повторяя одно и то же.

  • Главная
  • О сайте
  • Главная
  • Содержание

Рукопашный бой Карташ

Категории

—>

рубрики: Конструктор запросов | Дата: 9 февраля, 2017

Иногда при составлении запросов с помощью конструктора запросов 1С выдается сообщение про неоднозначное поле. В этой статье воспроизведем ситуацию в которой возникает эта ошибка и разберемся как действовать в таких случаях.

Воспроизводим ошибку

Создадим в конфигураторе любой справочник (в моем случае это будет справочник Товары). Добавим в справочник реквизит с таким же именем – Товары.


А теперь откроем конструктор запросов, выберем таблицу со справочником Товары и из этой таблицы поле Товары


Нажимаем на кнопку OK и видим следующее сообщение об ошибке


В принципе из этого сообщения можно понять в чем причина ошибки
А теперь вместо поля товары выберем любое другое. Например Ссылка. Но даже в этом случае программа не даст нам сохранить запрос


А вот из этого сообщения уже мало что можно понять. О каком таком неоднозначном поле идет речь. Когда впервые сталкиваешься с этим, приходится потратить немало времени, чтобы разобраться в чем причина. Особенно если учесть, что реквизитов у объекта по которому строим запрос может быть пара десятков. И навскидку не всегда можно увидеть, что есть реквизит с тем же наименованием, что и таблица.

Исправляем ошибку

Как всегда после обнаружения причины ошибки встает вопрос: «Что делать?».
Во-первых конечно же надо строить правильную архитектуру конфигурации, чтобы потом не приходилось ничего исправлять. Но если уж сложилась ситуация, которую мы рассмотрели, то и ее можно исправить. Вспоминаем, что у таблицы есть псевдоним, т.е. наименование таблицы можно задать самому. Щелкаем по таблице правой кнопкой и выбираем пункт меню Переименовать таблицу


В открывшемся окне зададим имя для нашей таблицы – ТаблицаТоваров.
После чего спокойно сохраняем запрос и получаем вот такой текст запроса


ВЫБРАТЬ
	ТаблицаТоваров.Товары КАК Товары
ИЗ
	Справочник.Товары КАК ТаблицаТоваров

При выполнении запроса, если, например, название временной таблицы совпадет с названием реквизита, и возникает двойственность чтения данных, будет получено сообщение в 1С Неоднозначное поле в запросе.

Содержание

  • 1 Причина ошибки
  • 2 Исправление ошибки
    • 2.1 Вам будет интересно

Причина ошибки

В 1С Неоднозначное поле в запросе может возникнуть:

  • в момент сохранения конструктора запроса;
  • при исполнении ошибочного запроса.

Рассмотрим на примере: создадим временную таблицу из справочника контрагентов с неким условием и назовем ее Контрагент.

image002

image004

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

image006

Такое же предупреждение можно получить, если попытаться связать две таблицы, где имя одной таблицы совпадет с именем поля другой таблицы:

image008

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

image010

Исправление ошибки

Чтобы открыть запрос, в котором было предупреждение о неоднозначности, который проигнорировали, необходимо внести изменения в текст запроса. Действия могут быть различные: удалить соединение таблиц, заменить название и др., поняв причину ошибки.

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

image012

Чтобы подобное не происходило, необходимо при назначении имени временной таблицы указывать такое название, которое вряд ли будет далее совпадать с названием реквизита или наименованием табличной части объекта метаданных. При создании нового объекта или реквизита конфигурации постарайтесь задавать уникальное имя, чтобы в дальнейшем не сталкиваться с проблемами при соединении в запросах.

Откройте конфигуратор и посмотрите названия временных таблиц в запросах, которые задают разработчики 1С. Они добавляют в названия таблиц приставки ВТ, ВТ_ и т. д., тем самым избегая неоднозначности в чтении данных.

image013

См. также:

  • Поле объекта недоступно для записи в 1С 8.3
  • Переменная не определена в 1С 8.3
  • Метод объекта не обнаружен в 1С 8.3
  • Поле объекта не обнаружено в 1С 8.3
  • Нарушение прав доступа 1С 8.3: внешняя обработка

Поставьте вашу оценку этой статье:

Загрузка…

Дата публикации: Апр 3, 2021

Поставьте вашу оценку этой статье:

Загрузка…

Причина ошибки в совпадении названия (псевдонима) таблицы и имени поля таблицы или реквизита, либо реквизитов соединяемых таблиц. Причем совпадение псевдонимов полей в разных источниках допускается.

Данная ошибка может возникнуть:

  • в момент сохранения конструктора запрос,
  • при начале редактирования через конструктор,
  • при исполнении ошибочного запроса.

Текст запроса, который может вызвать ошибку

ВЫБРАТЬ
Ссылка.Ссылка КАК Ключи
ИЗ
Справочник.Ключи КАК Ссылка

Ошибка при соединении

Чаще всего ошибка возникает не в простых запросах (как выше), а при соединении похожих или одинаковых таблиц.

Например, справочников по полям ссылка, наименование, код (присутствующих у всех)

ВЫБРАТЬ
ключи.Ссылка КАК ключи
ИЗ
Справочник.Ключи КАК ключи
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Ключи КАК Ключи2
ПО Наименование = Наименование

Исправление ошибки

  • При соединениях следует указывать названия таблиц: Ключи.Ссылка = Ключи2.Ссылка.
  • Названия таблиц выбирать не совпадающими с полем «Имя» реквизита.
  • Если объект добавлен вами и вы создали, например, реквизит Договоры в Справочник.Договоры, лучше переименовать его, т.к. подобные ошибки будут возникать регулярно.
  • Если используются временные таблицы, обратите внимание на их имена на предмет аналогичного совпадения.

Пример кода с временными таблицами — «Наименование» не вызывает ошибку в отличии от ссылка (Поле не используется при соединении, но есть в полях выборки):

ВЫБРАТЬ
«ключ» КАК Ссылка
ПОМЕСТИТЬ Ключи
;

Безошибочный код

ВЫБРАТЬ
ключи.Ссылка КАК ключи
ИЗ
Справочник.Ключи КАК ключи

Скриншот «искусственной» ошибки в 1С

Половина денег, которые идут на рекламу, выбрасываются впустую; но как узнать, какая именно половина?

Часто системные администраторы сталкиваются с такой неприятной ошибкой как «Неоднозначное поле в запросе 1с». Это означает, что ожидаемый запрос со стороны системы противоречит полученному результату.

Причины возникновения ошибки

В большинстве случаев ошибка возникает при совпадении псевдонима таблицы регистра сведений с именем ресурса. В отличие от некоторых других ошибок, например связанных с нарушением структуры данных таблиц, когда речь идет о записывании новых файлов поверх старых, тем не менее одноименных, в случае с неоднозначным полем в запросе система требует исправить это поле на знакомое ей имя.

Пути решения проблемы

При возникновении подобной системной ошибки запрос необходимо скорректировать, присвоив знакомое системе имя, в соответствии с поставленной задачей.

Например, если ошибка гласит «Неоднозначное поле «Местонахождение.ОсновноеСредство.ссылка», необходимо скорректировать запрос в соответствии с известными для системы параметрами, как то «МестонахождениеОСББухгалтерскийУчет».

Это позволит системе трактовать запрос в однозначном порядке, и задача будет решена молниеносно. Следуя по этому пути, программист должен помнить о корректности формирования системного запроса, чтобы такие ошибки не повторялись в будущем, хотя они и не настолько серьезны. Система иногда может давать сбой также вследствие выполнения ею нескольких процессов в режиме многозадачности, когда те конфликтуют между собой в структуре или способах наполнения данными.

В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для кого-то могут быть полезны.

Итак, начнем. Запрос — это специальный объект в 1С 8.2, который используется для формирования и выполнения запросов к таблицам базы данных в системе. Для выполнения запроса необходимо составить текст запроса, в котором описывается какие таблицы будут использоваться в качестве источников данных запроса, какие нужно выбрать поля, какие применить сортировки и группировки и т.д. Подробнее о запросах можно прочитать в книге «1С 8.2 Руководстве разработчика». Язык запросов 1С 8.2 очень похож синтаксисом на другие SQL языки запросов баз данных, но есть и отличия. Из основных преимуществ встроенного языка запросов стоит отметить разыменование полей, наличие виртуальных таблиц, удобная работа с итогами и нетипизированные поля в запросах. Из недостатков – в качестве выходного поля нельзя использовать запрос, нельзя использовать хранимые процедуры, нельзя преобразовать строку в число.

Приведу сведения и рекомендации по языку запросов по пунктам:
1.Для повышения читабельности запроса и уменьшения количества параметров запроса можно в запросе применять обращение к предопределенным данным конфигурации с помощью литерала ЗНАЧЕНИЕ (ПРЕДСТАВЛЕНИЕЗНАЧЕНИЯ). В качестве представления значений могут использоваться значение перечислений, предопределенные данные справочников, планов видов расчета, планов видов характеристик, планов счетов, пустые ссылки, значения точек маршрута, значения системных перечислений (например, ВидДвиженияНакопления, ВидСчета).
Примеры:

ГДЕ Город = ЗНАЧЕНИЕ(Справочник.Города.Москва)
ГДЕ Город = ЗНАЧЕНИЕ(Справочник.Города.ПустаяСсылка)
ГДЕ ТипТовара = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Услуга)
ГДЕ ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ГДЕ ТочкаМаршрута =
ЗНАЧЕНИЕ(БизнесПроцесс.Согласование.ТочкаМаршрута.Согласие)

Выражение в скобках всегда начинается со слова в единственном числе (Справочник, Перечисление и т.д.), которое соответствует типу предопределенного значения.

2.Автоупорядочивание в запросе может сильно тормозить процесс. Если сортировка не нужна, лучше вообще ее не использовать. Во многих случаях эффективнее записать сортировку через ключевое слово УПОРЯДОЧИТЬ ПО.

3.Нужно следить, чтобы при использовании псевдонимов не появилось неоднозначное поле. Иначе система не поймет к какому объекту надо обращаться.
Пример запроса с неоднозначным полем:
ВЫБРАТЬ
Номенклатура.Ссылка,
ОстаткиТоваровОстатки.КоличествоОстаток
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
ПО ОстаткиТоваровОстатки.Номенклатура = Номенклатура.Ссылка
Нужно исправить псевдоним таблицы, например, так: «Справочник.Номенклатура КАК Номенклатура1», а «Номенклатура.Ссылка» соответственно исправить на «Номенклатура1.Ссылка».

4.Иногда полезно получать представление ссылочных полей с помощью ключевого слова ПРЕДСТАВЛЕНИЕ наряду со ссылкой для того, чтобы не было повторного обращения к базе данных. Это бывает полезно при выводе результата запроса в таблицу.
Пример:
ВЫБРАТЬ
ПРЕДСТАВЛЕНИЕ(Документ.Контрагент) КАК Получатель,
ПРЕДСТАВЛЕНИЕ(Документ.Основание)
ИЗ
Документ.РасходнаяНакладная КАК Документ

5.Использование в запросе ВЫРАЗИТЬ(Поле КАК Тип) позволяет убрать лишние таблицы из соединения с полем составного типа данных. Тем самым ускорить выполнение запроса.
Пример (регистратор — поле с составным типом для физической таблицы регистранакопления ОстаткиТоваров, в запросе выбираются Дата и Номер документов ПоступлениеТоваров, при этом при обращении к реквизитам документа Дата и Номер через Регистратор не происходит множественного соединения таблицы регистра с таблицами документов, являющихся регистраторами для регистра ОстаткиТоваров):
ВЫБРАТЬ РАЗЛИЧНЫЕ [b] ВЫРАЗИТЬ(ОстаткиТоваров.Регистратор КАК Документ.ПоступлениеТоваров).Номер КАК НОМЕРПОСТУПЛЕНИЯ,[/b]
[b]ВЫРАЗИТЬ(ОстаткиТоваров.Регистратор КАК Документ.ПоступлениеТоваров).Дата КАК ДАТАПОСТУПЛЕНИЯ[/b]
[b]ИЗ РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров ГДЕ (ВЫРАЗИТЬ(ОстаткиТоваров.Регистратор КАК Документ.ПоступлениеТоваров) ЕСТЬ НЕ NULL)[/b]

6.Когда в конфигурации 1С есть пользователи, у которых права ограничены на определенные объекты конфигурации, в запросе к таким объектам необходимо использовать ключевое слово РАЗРЕШЕННЫЕ, чтобы запрос выполнился без ошибки (Выбрать Разрешенные . )

7.При объединении таблиц, содержащих вложенные таблицы (например, Документ с табличной частью) бывает полезно ключевое слово ПУСТАЯТАБЛИЦА, когда, например, в одном из документов нет табличной части.
Пример:
ВЫБРАТЬ Ссылка.Номер, ПУСТАЯТАБЛИЦА.(Ном, Тов, Кол) КАК Состав
ИЗ Документ.РасходнаяНакладная
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Ссылка.Номер, Состав.(НомерСтроки, Номенклатура, Количество)
ИЗ Документ.РасходнаяНакладная

8.При работе с соединениями таблиц, содержащих по одной строке, бывает нужно склеить строки таблиц (при этом в обеих таблицах нет такого поля, по которому их можно было соединить). Этого можно добиться, применив конструкцию «ПОЛНОЕ СОЕДИНЕНИЕ Таблица По ИСТИНА». Если в таблицах больше, чем одна строка, то в результате будет количество строк, равное произведению количества строк обеих таблиц. Если в одной таблице О строк, то в результирующей таблице количество строк будет равно количеству строк второй таблицы. Также для соединения таких таблиц можно применять декартово произведение таблиц , при котором в результирующей таблице будут встречаться все комбинации строк из обеих таблиц. Надо помнить, что если в одной из таблиц 0 строк, тогда и декартово произведение будет 0, поэтому полное соединение будет лучше. Вообще вместо полного соединения ПО ИСТИНА можно использовать и любой другой тип соединения, но в таком случае тоже возможна ситуация, когда в результирующей таблице будет 0 строк, даже если в одной из таблиц будет ненулевое количество строк. В случае полного соединения такая ситуация будет только в одном случае, если количество строк в обеих таблицах равно 0. Если знать, что в таблице есть точно хотя бы одна строка, тогда можно использовать и ЛЕВОЕ СОЕДИНЕНИЕ с другой таблицей с условием ПО ИСТИНА.
Пример (правда надуманный, для Полного соединения):
ВЫБРАТЬ
Первые 1
Пол.Ссылка,
К.Контрагент
ИЗ
Перечисление.Пол КАК Пол
ПОЛНОЕ СОЕДИНЕНИЕ (Выбрать Первые 1 Д.Контрагент ИЗ Документ.РеализацияТоваров КАК Д Упорядочить По Д.МоментВремени ) КАК К
ПО (ИСТИНА)

9. Для того чтобы получить уникальные записи по какому-то полю, правильней вместо группировки пользоваться ключевым словом РАЗЛИЧНЫЕ в запросе, потому что такая конструкция намного наглядней и ключевое слово СГРУППИРОВАТЬ ПО имеет более широкое применение и часто используется, если дополнительно надо рассчитать агрегатные функции по группировкам. В некоторых случаях необходимо вывести ограниченное количество строк. Для этого в описании запроса в описании запроса следует указать ключевое слово ПЕРВЫЕ и после него – требуемое количество строк.
Пример для ПЕРВЫЕ:
Выбрать Первые 5
Справочник.Номенклатура.Наименование,
Справочник.Номенклатура.ЗакупочнаяЦена
Упорядочить По
Справочник.Номенклатура.ЗакупочнаяЦена Убыв
Пример для РАЗЛИЧНЫЕ:
Выбрать Различные
Документ.Расходная.Контрагент

10.Агрегатные функции в запросе можно использовать без ключевого слова СГРУППИРОВАТЬ. В таком случае все результаты будут сгруппированы в одну строку.
Пример:
Выбрать
Сумма(Накладная.Сумма) Как Сумма
Из
Документ.РасходнаяНакладная.Состав Как Накладная

11.В запросах в полях выборки можно свободно обращаться к реквизитам полей выборки. Эта возможность называется разыменованием полей выборки. Если источник данных — вложенная таблица (табличная часть документа), то в полях выборки можно обращаться также к полям основной таблицы (например, через поле Ссылка обратиться к полю основной таблицы Контрагент)
Пример:
ВЫБРАТЬ [b] ПоступлениеТоваровИУслугТовары.Номенклатура, ПоступлениеТоваровИУслугТовары.Номенклатура.Код, ПоступлениеТоваровИУслугТовары.Количество КАК Количество, ПоступлениеТоваровИУслугТовары.Ссылка.Контрагент ИЗ Документ.ПоступлениеТоваровИУслуг.Товары КАК ПоступлениеТоваровИУслугТовары ГДЕ ПоступлениеТоваровИУслугТовары.Ссылка = &Ссылка[/b]
Есть одна особенность использования разыменования полей, если в запросе есть группировки. В любых запросах с группировками в списках полей запроса можно свободно обращаться к реквизитам группировочных полей.
Пример:
ВЫБРАТЬ
ПоступлениеТоваровИУслугТовары.Номенклатура,
ПоступлениеТоваровИУслугТовары.Номенклатура.Код,
СУММА(ПоступлениеТоваровИУслугТовары.Количество) КАК Количество,
ПоступлениеТоваровИУслугТовары.Ссылка.Контрагент,
ПоступлениеТоваровИУслугТовары.Ссылка.Дата
ИЗ
Документ.ПоступлениеТоваровИУслуг.Товары КАК ПоступлениеТоваровИУслугТовары
ГДЕ
ПоступлениеТоваровИУслугТовары.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
ПоступлениеТоваровИУслугТовары.Номенклатура,
ПоступлениеТоваровИУслугТовары.Ссылка
В справке 1С написано, что при наличии группировки, в полях выборки запроса могут участвовать только группировочные поля и агрегатные функции по полям выборки. Есть один исключительный случай, когда агрегатные функции применены к полям вложенной таблицы. В этом случае в списке полей выборки возможны обращения к полям таблицы верхнего уровня, без группировки результатов по этим полям.
Пример:
ВЫБРАТЬ
ПоступлениеТоваровИУслуг.Товары.(СУММА(Количество),Номенклатура),
ПоступлениеТоваровИУслуг.Ссылка,
ПоступлениеТоваровИУслуг.Контрагент
ИЗ
Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг
СГРУППИРОВАТЬ ПО
ПоступлениеТоваровИУслуг.Товары.(Номенклатура)

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

13. В универсальных запросах параметры можно использовать в описании источников данных запроса, в условиях ГДЕ, в условиях соединения таблиц и параметрах виртуальных таблиц. Существует два приема для создания универсальных запросов:
А) с помощью механизма конкатенации строк, добавляя в текст запроса переменные;
Пример1:

ТипУпорядочивания = ?(НЕКАЯПЕРЕМЕННАЯ,»»,»УБЫВ»);
Запрос.Текст= «Выбрать . Упорядочить ПО Поле1 » + ТипУпорядочивания + «. «;
Пример2:
Запрос.Текст = «Выбрать Поле1. «;

Если НЕКАЯПЕРЕМЕННАЯ = 1 Тогда
Запрос.Текст = Запрос.Текст + «,Поле2 . «;
КонецЕсли;
Б)использовать параметры в различных частях запроса (например, в секции источников данных запроса), а затем метод встроенного языка — СТРЗАМЕНИТЬ(). При проектировании универсальных запросов полезно обращение к свойству объектов МЕТАДАННЫЕ(), с помощью которого можно определить название таблицы для какой-то ссылки (например, для документа будет примерно так — Ссылка.МЕТАДАННЫЕ().ИМЯ), переданной через параметр в некую универсальную процедуру.
Пример:
Выбрать
ДокТЧ.Номенклатура,
.
ИЗ
&НекийДокТЧ КАК ДокТЧ
А затем установить параметр в тексте запроса
Запрос.Текст = СтрЗаменить(Запрос.Текст, «&НекийДокТЧ», «Документ.»+Ссылка.Метаданные().Имя+».Товары»);

Понравилась статья? Поделить с друзьями:
  • Ошибка в запрете уголовное право
  • Ошибка в заполнении формы ростелеком
  • Ошибка в заполнении формы wink
  • Ошибка в заполнении трудовой книжки в дате приказа
  • Ошибка в заполнении трудовой книжки в дате заполнения