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

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

Я
   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

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

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

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

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

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

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

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

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

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

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

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

neodnoznachnoe-pole-pri-soedinenii

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

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

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

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

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

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

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

neodnoznachnoe-pole-ssylka

Вся реклама — это хорошие новости.

Нет, в документе нет реквизита Ссылка.

Добавлено через 39 минут и 35 секунд:
1С:Предприятие 8.1 Конф. Бухгалтерия.
ОбщаяФорма «НастройкаПараметровУчета».

// Процедура проверяет возможность редактирования валюты
// регламентированного учета
//
Процедура ПроверкаДоступностиВалютыУчета();

Запрос = Новый Запрос();
Запрос.Текст = «»;

Для каждого Док из Метаданные.Документы Цикл

Запрос.Текст = Запрос.Текст +
«ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| Документ.» + Док.Имя + «.Ссылка
|
|»;

КонецЦикла;

// Уберем первое «ОБЪЕДИНИТЬ ВСЕ»
Запрос.Текст  = Сред(Запрос.Текст, Найти(Запрос.Текст, «ВЫБРАТЬ») + СтрДлина(«ВЫБРАТЬ ПЕРВЫЕ») + 1);
Запрос.Текст  = «ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ » + Запрос.Текст;

ЕстьДокументы = (Не Запрос.Выполнить().Пустой());

ЭлементыФормы.ВалютаРегУчета.ТолькоПросмотр = ЕстьДокументы;

Если ЕстьДокументы Тогда
ЭлементыФормы.ТекстВажнойНадписи.Заголовок = «После ввода документов валюту регламентирвоанного учета изменять нельзя.»;

Иначе
ЭлементыФормы.ТекстВажнойНадписи.Заголовок = «Валюту регламентированного учета можно изменять пока не введены документы.»;

КонецЕсли;

КонецПроцедуры // ПроверкаДоступностиВалютыУчета()

Добавлено через 41 минуту и 55 секунд:
Ранее немного не там ошибку вытянула. Вот правильная:

{ОбщаяФорма.НастройкаПараметровУчета(136)}: Ошибка при вызове метода контекста (Выполнить): {(1097, 2)}: Неоднозначное поле «Документ.ТИ_ДвиженияПоЗабалансовымСчетам.Ссылка»
<<?>>Документ.ТИ_ДвиженияПоЗабалансовымСчетам.Ссылка
   ЕстьДокументы = (Не Запрос.Выполнить().Пустой());

Добавлено через 1 час, 42 минуты и 4 секунды:
Спасибо всем, кто заинтересовался. Нашла ошибку.

  1. Добрый день.

    Изменяю стандартную конфигурацию УТ11 Версия 11.1.7.49
    В основном изменения касаются добавления новых реквизитов в номенклатуру, старые реквизиты не изменяются.

    При попытке провести документ поступления товаров и услуг или документ ввода начальных остатков, выдвет ошибку

    Ошибка при выполнении обработчика — ‘ПередЗаписью’
    по причине:
    {РегистрСведений.АналитикаУчетаНоменклатуры.МодульМенеджера(123)}: Ошибка при вызове метода контекста (Выполнить)
    Выборка = Запрос.Выполнить().Выбрать();
    по причине:
    {(60, 33)}: Неоднозначное поле «Коллекция.АналитикаУчетаНоменклатуры»
    ИЛИ Аналитика.КлючАналитики <> <<?>>Коллекция.АналитикаУчетаНоменклатуры

    Нашел в коде где формируется запрос, это менеджер объекта РегистрСведений.АналитикаУчетаНоменклатуры
    Функция ТекстЗначенияКлючейАналитикиВКоллекции(ИменаПолей)

    В не измененной конфигурации запрос отрабатывает нормально. Как в конструкторе запросов так и в самом приложении.
    Текст запроса:

    ВЫБРАТЬ
        Коллекция.НомерСтроки - 1 КАК Индекс,
        Коллекция.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
        Коллекция.Номенклатура КАК Номенклатура,
        Коллекция.Характеристика КАК Характеристика,
        ВЫБОР
            КОГДА Коллекция.СтатусУказанияСерий = 14
                ТОГДА Коллекция.Серия
            ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
        КОНЕЦ КАК Серия,
        ВЫБОР
            КОГДА НЕОПРЕДЕЛЕНО В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка), НЕОПРЕДЕЛЕНО)
                ТОГДА &МестаУчетаТовар
            ИНАЧЕ НЕОПРЕДЕЛЕНО
        КОНЕЦ КАК СкладТовар,
        ВЫБОР
            КОГДА НЕОПРЕДЕЛЕНО В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка), НЕОПРЕДЕЛЕНО)
                ТОГДА &МестаУчетаМногооборотнаяТара
            ИНАЧЕ НЕОПРЕДЕЛЕНО
        КОНЕЦ КАК СкладМногооборотнаяТара,
        ВЫБОР
            КОГДА НЕОПРЕДЕЛЕНО В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка), НЕОПРЕДЕЛЕНО)
                ТОГДА &МестаУчетаУслуга
            ИНАЧЕ НЕОПРЕДЕЛЕНО
        КОНЕЦ КАК СкладУслуга,
        ВЫБОР
            КОГДА НЕОПРЕДЕЛЕНО В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка), НЕОПРЕДЕЛЕНО)
                ТОГДА &МестаУчетаРабота
            ИНАЧЕ НЕОПРЕДЕЛЕНО
        КОНЕЦ КАК СкладРабота
    ПОМЕСТИТЬ Коллекция
    ИЗ
        &Коллекция КАК Коллекция
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        Коллекция.Индекс,
        Аналитика.КлючАналитики КАК АналитикаУчетаНоменклатуры,
        Коллекция.Номенклатура,
        Коллекция.Характеристика,
        Коллекция.Серия,
        ВЫБОР СН.ТипНоменклатуры
            КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
                ТОГДА Коллекция.СкладТовар
            КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
                ТОГДА Коллекция.СкладМногооборотнаяТара
            КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
                ТОГДА Коллекция.СкладУслуга
            КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
                ТОГДА Коллекция.СкладРабота
        КОНЕЦ КАК Склад
    ИЗ
        Коллекция КАК Коллекция
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СН
            ПО (СН.Ссылка = Коллекция.Номенклатура)
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК Аналитика
            ПО (Аналитика.Номенклатура = Коллекция.Номенклатура)
                И (Аналитика.Характеристика = Коллекция.Характеристика)
                И (Аналитика.Серия = Коллекция.Серия)
                И (Аналитика.Склад = ВЫБОР СН.ТипНоменклатуры
                    КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
                        ТОГДА Коллекция.СкладТовар
                    КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
                        ТОГДА Коллекция.СкладМногооборотнаяТара
                    КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
                        ТОГДА Коллекция.СкладУслуга
                    КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
                        ТОГДА Коллекция.СкладРабота
                КОНЕЦ)
    ГДЕ
        (Аналитика.КлючАналитики ЕСТЬ NULL
                ИЛИ Аналитика.КлючАналитики <> Коллекция.АналитикаУчетаНоменклатуры
                ИЛИ Аналитика.КлючАналитики = ЗНАЧЕНИЕ(Справочник.КлючиАналитикиУчетаНоменклатуры.ПустаяСсылка))
    

    Объекты Справочник.КлючиАналитикиУчетаНоменклатуры, Перечисление.ТипыНоменклатуры, РегистрСведений.АналитикаУчетаНоменклатуры, Справочник.Склады, Справочник.СтруктураПредприятия, Справочник.Партнеры не изменялись.

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

    Подскажите пожалуйста в чем может быть проблема или хотя бы в каком направлении копать?!

    пользуйтесь тегами для оформления кода

    Последнее редактирование модератором: 6 мар 2015
  2. Разобрался! В Справочнике Номенклатура был добавлен Реквизит «Коллекция» на это и ругалось. Реквизит переименовал и все заработало
    Всем спасибо за «Активное» участвие


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Неоднозначное поле в запросе 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С запрос Неоднозначное поле. Будьте внимательны при создании запросов!

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

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

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста внешнеесоединение
  • Ошибка при вызове метода контекста выполнить недостаточно прав
  • Ошибка при вызове метода контекста внешнее соединение
  • Ошибка при вызове метода контекста выполнить неверные параметры
  • Ошибка при вызове метода контекста в 1с при печати