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

Содержание:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


Пример:


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

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

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

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

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

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

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

Пример:

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

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

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

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

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

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

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

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

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

Неоднозначное поле в запросе 1С 8.3

Ошибка Неоднозначное поле в запросе 1С 8.3 связана с наличием одинаковых имен в запросе 1С. В этом случае возникает неопределенность обработки запроса при обращении к данным и появляется соответствующее сообщение:

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

Неоднозначное поле в запросе 1С 8.3

Ошибка 1С Неоднозначное поле может возникать как в Конфигураторе при написании запроса, так и в пользовательском режиме при выполнении некорректного программного кода.

Рассмотрим причины возникновения ошибки и порядок ее исправления на примере.

Одинаковые имена объектов в таблице запроса

Для поиска и устранения ошибки выполните следующие действия:

  1. Войдите в Конфигуратор.
  2. Откройте внешний отчет Цены номенклатуры.
  3. Найдите строчку ТипЦен.Номенклатура КАК Номенклатура в функции ERRORНаСервере. Программа в окне сообщения об ошибке в фигурных скобках дает подсказку, что это 2 строчка в запросе.

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

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

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

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

Программа понимает, что параметр Номенклатура относится именно к таблице запроса ЦеныНоменклатурыСрезПоследних.

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

Сохранение процедур с корректным кодом WORK и некорректным кодом ERROR выполняется отдельно для удобства демонстрации работы запросов в 1С.

Пример ошибки

Протестируем работу внешнего отчета с корректным и некорректным запросом на примере:

  1. Откройте внешний отчет Цены номенклатуры в 1С: кнопка Главное меню — Файл — Открыть.
  2. Нажмите кнопку WORK для выполнения правильного запроса.

Запрос отработал правильно!

Нажмите кнопку ERROR для выполнения запроса с ошибкой.

Вот так можно получить ошибку 1С запрос Неоднозначное поле. Будьте внимательны при создании запросов!

Обслуживание

Заказать консультацию

По этой или иной ошибке Вы можете обратиться к нашим специалистам, мы Вам поможем решить Вашу проблему.

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

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

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

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

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

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

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

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

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

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

neodnoznachnoe-pole-pri-soedinenii

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

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

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

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

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

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

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

neodnoznachnoe-pole-ssylka

Реклама магазина самообслуживания: треска, стоящая в очереди за cобственной печенью.

Неоднозначное поле «СписаниеТоваров.Ссылка»

Я
   Er2003

03.02.17 — 16:21

Здравствуйте.

Недавно обнаружилась ошибка у бухгалтера при печати отчета:

{Документ.СписаниеТоваров.МодульОбъекта(928)}: Ошибка при вызове метода контекста (Выполнить)

    Док = Запрос.Выполнить().Выбрать();

по причине:

{(17, 2)}: Неоднозначное поле «СписаниеТоваров.Ссылка»

<<?>>СписаниеТоваров.Ссылка = &ТекДокумент

Пример кода:

Запрос = Новый Запрос;

Запрос.УстановитьПараметр(«ТекДокумент», ЭтотОбъект.Ссылка);

Запрос.УстановитьПараметр(«Дата»       , Дата);

Запрос.Текст =

«ВЫБРАТЬ РАЗРЕШЕННЫЕ

|    СписаниеТоваров.Номер,

|    СписаниеТоваров.Дата КАК ДатаДокумента,

|    СписаниеТоваров.Организация,

|   СписаниеТоваров.СтруктурноеПодразделение,

|    СписаниеТоваров.Склад.Представление КАК СкладПредставление,

|    СписаниеТоваров.ИнвентаризационнаяКомиссия.(

|        ФизЛицо КАК ФизЛицо,

|        Председатель КАК Председатель

|    ),

|    ОтветственныеЛицаСрезПоследних.ФизическоеЛицо КАК ОтветственноеЛицо

|ИЗ

|    Документ.СписаниеТоваров КАК СписаниеТоваров

|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица.СрезПоследних(&Дата, ) КАК ОтветственныеЛицаСрезПоследних

|        ПО СписаниеТоваров.Склад = ОтветственныеЛицаСрезПоследних.СтруктурнаяЕдиница

|ГДЕ

|    СписаниеТоваров.Ссылка = &ТекДокумент»;

                  
Док = Запрос.Выполнить().Выбрать();

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

Вроде бы как при нажатии на кнопку вызывается нужная функция, но при этом возникает такая ошибка.

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

   Heckfy

1 — 03.02.17 — 16:23

   Er2003

2 — 03.02.17 — 16:28

Да, все ссылки красные)).

Я даже создал новую базу, а там данный отчет работает без ошибок. Код один в один.

   PR

3 — 03.02.17 — 16:30

(0) Целый день?

LOL

Запрос.Текст =

«ВЫБРАТЬ РАЗРЕШЕННЫЕ

|    СписаниеТоваров2.Номер,

|    СписаниеТоваров2.Дата КАК ДатаДокумента,

|    СписаниеТоваров2.Организация,

|    СписаниеТоваров2.СтруктурноеПодразделение,

|    СписаниеТоваров2.Склад.Представление КАК СкладПредставление,

|    СписаниеТоваров2.ИнвентаризационнаяКомиссия.(

|        ФизЛицо КАК ФизЛицо,

|        Председатель КАК Председатель

|    ),

|    ОтветственныеЛицаСрезПоследних.ФизическоеЛицо КАК ОтветственноеЛицо

|ИЗ

|    Документ.СписаниеТоваров КАК СписаниеТоваров2

|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица.СрезПоследних(&Дата, ) КАК ОтветственныеЛицаСрезПоследних

|        ПО СписаниеТоваров2.Склад = ОтветственныеЛицаСрезПоследних.СтруктурнаяЕдиница

|ГДЕ

|    СписаниеТоваров2.Ссылка = &ТекДокумент»;

   Er2003

4 — 03.02.17 — 16:39

Спасибо большое.

Признаюсь стыдно ((((.

Здоровья Вам и всех благ ))).

   PR

5 — 03.02.17 — 16:40

(4) Не стыдно не знать, стыдно не найти в инете за пять минут

   PR

6 — 03.02.17 — 16:42

+(5) Логика очень простая, СписаниеТоваров — это не только назначенный альяс документа, но и имя какого-то еще реквизита или табличной части, поэтому 1С не знает, что брать, документ или реквизит/ТЧ

   Er2003

7 — 03.02.17 — 16:47

Я не 1С программист. Меня лишь попросили помочь. До этого 1С видел пару раз.

Ответ про то, что имя какого-то еще реквизита или табличной части может быть таким же мне не попадалось в такой формулировки.

   PR

8 — 03.02.17 — 16:48

(7) Слушай, мне там вокруг дома подмести нужно, поможешь?

   Er2003

9 — 03.02.17 — 16:50

))))) Ты мне помог, вполне могу. Не вижу в этом ничего плохого.

   Wirtuozzz

10 — 03.02.17 — 16:53

можешь сопли на кулак мотать, можешь маму звать, в штаны ссать, а поставленную задачу должен выполнить. Умри, но сделай, Он сделал.

Цитата из фильма 9 рота.

Задачу сделал — молодец, не сделал, сиди и делай.

   PR

11 — 03.02.17 — 16:55

(9) Плохого в этом то, что ты работаешь тыжпрограммистом.

Либо делай это своей профессией либо не суйся.

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

   Wirtuozzz

12 — 03.02.17 — 16:58

(11) никто еще с клавиатурой не родился. и никто на С++ говорить не начал, все приходит с опытом.

   PR

13 — 03.02.17 — 17:00

(12) Я и не говорю, уйди накуй с поля, где взрослые в футбол играют.

Я говорю либо делай это своей профессией либо не суйся, не будь тыжпрограммистом.

   Er2003

14 — 03.02.17 — 17:23

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

   PR

15 — 03.02.17 — 17:25

(14) А, ну понятно. Значит, операцию на сердце ты делать не возьмешься, а вот скальпелем махнуть пару раз нет проблем, че там сложного, да?

  

Er2003

16 — 03.02.17 — 18:08

Это можно примерно сравнить: терапевт явно не умеет делать операцию на сердце, но если в экстренной ситуации под руководством может постараться спасти жизнь.))

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

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

Категории

—>

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

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

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

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


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


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


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


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

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

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


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


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

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Ошибка выполнения запроса на удаление сессионного ключа
  • Ошибка выполнения запроса конфликт блокировок при выполнении транзакции
  • Ошибка выполнения запроса код состояния 302
  • Ошибка выполнения запроса к сервису стрелка

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии