Неоднозначное поле «СписаниеТоваров.Ссылка» |
Я |
03.02.17 — 16:21
Здравствуйте.
Недавно обнаружилась ошибка у бухгалтера при печати отчета:
{Документ.СписаниеТоваров.МодульОбъекта(928)}: Ошибка при вызове метода контекста (Выполнить)
Док = Запрос.Выполнить().Выбрать();
по причине:
{(17, 2)}: Неоднозначное поле «СписаниеТоваров.Ссылка»
<<?>>СписаниеТоваров.Ссылка = &ТекДокумент
Пример кода:
Запрос = Новый Запрос;
Запрос.УстановитьПараметр(«ТекДокумент», ЭтотОбъект.Ссылка);
Запрос.УстановитьПараметр(«Дата» , Дата);
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СписаниеТоваров.Номер,
| СписаниеТоваров.Дата КАК ДатаДокумента,
| СписаниеТоваров.Организация,
| СписаниеТоваров.СтруктурноеПодразделение,
| СписаниеТоваров.Склад.Представление КАК СкладПредставление,
| СписаниеТоваров.ИнвентаризационнаяКомиссия.(
| ФизЛицо КАК ФизЛицо,
| Председатель КАК Председатель
| ),
| ОтветственныеЛицаСрезПоследних.ФизическоеЛицо КАК ОтветственноеЛицо
|ИЗ
| Документ.СписаниеТоваров КАК СписаниеТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица.СрезПоследних(&Дата, ) КАК ОтветственныеЛицаСрезПоследних
| ПО СписаниеТоваров.Склад = ОтветственныеЛицаСрезПоследних.СтруктурнаяЕдиница
|ГДЕ
| СписаниеТоваров.Ссылка = &ТекДокумент»;
Док = Запрос.Выполнить().Выбрать();
Посмотрел печатный отчет внутренний и находится в Общих макетах.
Вроде бы как при нажатии на кнопку вызывается нужная функция, но при этом возникает такая ошибка.
Целый день пытаюсь понять в чем ошибка. Если кто знает, пожалуйста подскажите в каком направлении «копать».
1 — 03.02.17 — 16:23
2 — 03.02.17 — 16:28
Да, все ссылки красные)).
Я даже создал новую базу, а там данный отчет работает без ошибок. Код один в один.
3 — 03.02.17 — 16:30
(0) Целый день?
LOL
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СписаниеТоваров2.Номер,
| СписаниеТоваров2.Дата КАК ДатаДокумента,
| СписаниеТоваров2.Организация,
| СписаниеТоваров2.СтруктурноеПодразделение,
| СписаниеТоваров2.Склад.Представление КАК СкладПредставление,
| СписаниеТоваров2.ИнвентаризационнаяКомиссия.(
| ФизЛицо КАК ФизЛицо,
| Председатель КАК Председатель
| ),
| ОтветственныеЛицаСрезПоследних.ФизическоеЛицо КАК ОтветственноеЛицо
|ИЗ
| Документ.СписаниеТоваров КАК СписаниеТоваров2
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица.СрезПоследних(&Дата, ) КАК ОтветственныеЛицаСрезПоследних
| ПО СписаниеТоваров2.Склад = ОтветственныеЛицаСрезПоследних.СтруктурнаяЕдиница
|ГДЕ
| СписаниеТоваров2.Ссылка = &ТекДокумент»;
4 — 03.02.17 — 16:39
Спасибо большое.
Признаюсь стыдно ((((.
Здоровья Вам и всех благ ))).
5 — 03.02.17 — 16:40
(4) Не стыдно не знать, стыдно не найти в инете за пять минут
6 — 03.02.17 — 16:42
+(5) Логика очень простая, СписаниеТоваров — это не только назначенный альяс документа, но и имя какого-то еще реквизита или табличной части, поэтому 1С не знает, что брать, документ или реквизит/ТЧ
7 — 03.02.17 — 16:47
Я не 1С программист. Меня лишь попросили помочь. До этого 1С видел пару раз.
Ответ про то, что имя какого-то еще реквизита или табличной части может быть таким же мне не попадалось в такой формулировки.
8 — 03.02.17 — 16:48
(7) Слушай, мне там вокруг дома подмести нужно, поможешь?
9 — 03.02.17 — 16:50
))))) Ты мне помог, вполне могу. Не вижу в этом ничего плохого.
10 — 03.02.17 — 16:53
можешь сопли на кулак мотать, можешь маму звать, в штаны ссать, а поставленную задачу должен выполнить. Умри, но сделай, Он сделал.
Цитата из фильма 9 рота.
Задачу сделал — молодец, не сделал, сиди и делай.
11 — 03.02.17 — 16:55
(9) Плохого в этом то, что ты работаешь тыжпрограммистом.
Либо делай это своей профессией либо не суйся.
Не задумывался, почему тебя никто не просит помочь сделать операцию на сердце или самолет перегнать в другой город?
12 — 03.02.17 — 16:58
(11) никто еще с клавиатурой не родился. и никто на С++ говорить не начал, все приходит с опытом.
13 — 03.02.17 — 17:00
(12) Я и не говорю, уйди накуй с поля, где взрослые в футбол играют.
Я говорю либо делай это своей профессией либо не суйся, не будь тыжпрограммистом.
14 — 03.02.17 — 17:23
Я и не думал, что придется в коде копаться. На вид казалось раз все до этого работало, то значит где-то настройках что-то поменяли. И я начал не с кода. Читал на просторах интернета как работают эти печатные формы. На Вашем форуме много тем пересмотрел.
15 — 03.02.17 — 17:25
(14) А, ну понятно. Значит, операцию на сердце ты делать не возьмешься, а вот скальпелем махнуть пару раз нет проблем, че там сложного, да?
Er2003
16 — 03.02.17 — 18:08
Это можно примерно сравнить: терапевт явно не умеет делать операцию на сердце, но если в экстренной ситуации под руководством может постараться спасти жизнь.))
Неоднозначное поле
Причина ошибки в совпадении названия (псевдонима) таблицы и имени поля таблицы или реквизита, либо реквизитов соединяемых таблиц. Причем совпадение псевдонимов полей в разных источниках допускается.
Данная ошибка может возникнуть:
- в момент сохранения конструктора запрос,
- при начале редактирования через конструктор,
- при исполнении ошибочного запроса.
Текст запроса, который может вызвать ошибку
ВЫБРАТЬ
Ссылка.Ссылка КАК Ключи
ИЗ
Справочник.Ключи КАК Ссылка
Ошибка при соединении
Чаще всего ошибка возникает не в простых запросах (как выше), а при соединении похожих или одинаковых таблиц.
Например, справочников по полям ссылка, наименование, код (присутствующих у всех)
ВЫБРАТЬ
ключи.Ссылка КАК ключи
ИЗ
Справочник.Ключи КАК ключи
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Ключи КАК Ключи2
ПО Наименование = Наименование
Исправление ошибки
- При соединениях следует указывать названия таблиц: Ключи.Ссылка = Ключи2.Ссылка.
- Названия таблиц выбирать не совпадающими с полем «Имя» реквизита.
- Если объект добавлен вами и вы создали, например, реквизит Договоры в Справочник.Договоры, лучше переименовать его, т.к. подобные ошибки будут возникать регулярно.
- Если используются временные таблицы, обратите внимание на их имена на предмет аналогичного совпадения.
Пример кода с временными таблицами — «Наименование» не вызывает ошибку в отличии от ссылка (Поле не используется при соединении, но есть в полях выборки):
ВЫБРАТЬ
"ключ" КАК Ссылка
ПОМЕСТИТЬ Ключи
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Наименование,
Ссылка
ИЗ
Справочник.Ключи КАК Ключи
ЛЕВОЕ СОЕДИНЕНИЕ Ключи как Ключи2 ПО (ИСТИНА)
Безошибочный код
ВЫБРАТЬ
ключи.Ссылка КАК ключи
ИЗ
Справочник.Ключи КАК ключи
Вся реклама — это хорошие новости.
Нет, в документе нет реквизита Ссылка.
Добавлено через 39 минут и 35 секунд:
1С:Предприятие 8.1 Конф. Бухгалтерия.
ОбщаяФорма «НастройкаПараметровУчета».
// Процедура проверяет возможность редактирования валюты
// регламентированного учета
//
Процедура ПроверкаДоступностиВалютыУчета();
Запрос = Новый Запрос();
Запрос.Текст = «»;
Для каждого Док из Метаданные.Документы Цикл
Запрос.Текст = Запрос.Текст +
«ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| Документ.» + Док.Имя + «.Ссылка
|
|»;
КонецЦикла;
// Уберем первое «ОБЪЕДИНИТЬ ВСЕ»
Запрос.Текст = Сред(Запрос.Текст, Найти(Запрос.Текст, «ВЫБРАТЬ») + СтрДлина(«ВЫБРАТЬ ПЕРВЫЕ») + 1);
Запрос.Текст = «ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ » + Запрос.Текст;
ЕстьДокументы = (Не Запрос.Выполнить().Пустой());
ЭлементыФормы.ВалютаРегУчета.ТолькоПросмотр = ЕстьДокументы;
Если ЕстьДокументы Тогда
ЭлементыФормы.ТекстВажнойНадписи.Заголовок = «После ввода документов валюту регламентирвоанного учета изменять нельзя.»;
Иначе
ЭлементыФормы.ТекстВажнойНадписи.Заголовок = «Валюту регламентированного учета можно изменять пока не введены документы.»;
КонецЕсли;
КонецПроцедуры // ПроверкаДоступностиВалютыУчета()
Добавлено через 41 минуту и 55 секунд:
Ранее немного не там ошибку вытянула. Вот правильная:
{ОбщаяФорма.НастройкаПараметровУчета(136)}: Ошибка при вызове метода контекста (Выполнить): {(1097, 2)}: Неоднозначное поле «Документ.ТИ_ДвиженияПоЗабалансовымСчетам.Ссылка»
<<?>>Документ.ТИ_ДвиженияПоЗабалансовымСчетам.Ссылка
ЕстьДокументы = (Не Запрос.Выполнить().Пустой());
Добавлено через 1 час, 42 минуты и 4 секунды:
Спасибо всем, кто заинтересовался. Нашла ошибку.
-
Добрый день.
Изменяю стандартную конфигурацию УТ11 Версия 11.1.7.49
В основном изменения касаются добавления новых реквизитов в номенклатуру, старые реквизиты не изменяются.При попытке провести документ поступления товаров и услуг или документ ввода начальных остатков, выдвет ошибку
Ошибка при выполнении обработчика — ‘ПередЗаписью’
по причине:
{РегистрСведений.АналитикаУчетаНоменклатуры.МодульМенеджера(123)}: Ошибка при вызове метода контекста (Выполнить)
Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(60, 33)}: Неоднозначное поле «Коллекция.АналитикаУчетаНоменклатуры»
ИЛИ Аналитика.КлючАналитики <> <<?>>Коллекция.АналитикаУчетаНоменклатуры
Нашел в коде где формируется запрос, это менеджер объекта РегистрСведений.АналитикаУчетаНоменклатуры
Функция ТекстЗначенияКлючейАналитикиВКоллекции(ИменаПолей)
В не измененной конфигурации запрос отрабатывает нормально. Как в конструкторе запросов так и в самом приложении.
Текст запроса:ВЫБРАТЬ Коллекция.НомерСтроки - 1 КАК Индекс, Коллекция.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры, Коллекция.Номенклатура КАК Номенклатура, Коллекция.Характеристика КАК Характеристика, ВЫБОР КОГДА Коллекция.СтатусУказанияСерий = 14 ТОГДА Коллекция.Серия ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка) КОНЕЦ КАК Серия, ВЫБОР КОГДА НЕОПРЕДЕЛЕНО В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка), НЕОПРЕДЕЛЕНО) ТОГДА &МестаУчетаТовар ИНАЧЕ НЕОПРЕДЕЛЕНО КОНЕЦ КАК СкладТовар, ВЫБОР КОГДА НЕОПРЕДЕЛЕНО В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка), НЕОПРЕДЕЛЕНО) ТОГДА &МестаУчетаМногооборотнаяТара ИНАЧЕ НЕОПРЕДЕЛЕНО КОНЕЦ КАК СкладМногооборотнаяТара, ВЫБОР КОГДА НЕОПРЕДЕЛЕНО В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка), НЕОПРЕДЕЛЕНО) ТОГДА &МестаУчетаУслуга ИНАЧЕ НЕОПРЕДЕЛЕНО КОНЕЦ КАК СкладУслуга, ВЫБОР КОГДА НЕОПРЕДЕЛЕНО В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка), НЕОПРЕДЕЛЕНО) ТОГДА &МестаУчетаРабота ИНАЧЕ НЕОПРЕДЕЛЕНО КОНЕЦ КАК СкладРабота ПОМЕСТИТЬ Коллекция ИЗ &Коллекция КАК Коллекция ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Коллекция.Индекс, Аналитика.КлючАналитики КАК АналитикаУчетаНоменклатуры, Коллекция.Номенклатура, Коллекция.Характеристика, Коллекция.Серия, ВЫБОР СН.ТипНоменклатуры КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар) ТОГДА Коллекция.СкладТовар КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара) ТОГДА Коллекция.СкладМногооборотнаяТара КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга) ТОГДА Коллекция.СкладУслуга КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа) ТОГДА Коллекция.СкладРабота КОНЕЦ КАК Склад ИЗ Коллекция КАК Коллекция ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СН ПО (СН.Ссылка = Коллекция.Номенклатура) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК Аналитика ПО (Аналитика.Номенклатура = Коллекция.Номенклатура) И (Аналитика.Характеристика = Коллекция.Характеристика) И (Аналитика.Серия = Коллекция.Серия) И (Аналитика.Склад = ВЫБОР СН.ТипНоменклатуры КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар) ТОГДА Коллекция.СкладТовар КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара) ТОГДА Коллекция.СкладМногооборотнаяТара КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга) ТОГДА Коллекция.СкладУслуга КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа) ТОГДА Коллекция.СкладРабота КОНЕЦ) ГДЕ (Аналитика.КлючАналитики ЕСТЬ NULL ИЛИ Аналитика.КлючАналитики <> Коллекция.АналитикаУчетаНоменклатуры ИЛИ Аналитика.КлючАналитики = ЗНАЧЕНИЕ(Справочник.КлючиАналитикиУчетаНоменклатуры.ПустаяСсылка))
Объекты Справочник.КлючиАналитикиУчетаНоменклатуры, Перечисление.ТипыНоменклатуры, РегистрСведений.АналитикаУчетаНоменклатуры, Справочник.Склады, Справочник.СтруктураПредприятия, Справочник.Партнеры не изменялись.
Изменения вносились только в Справочник.Номенклатура , новые реквизиты и табличные части
Совпадений названий новых реквизитов и табличных частей с полями участвующим в запросе нет.Подскажите пожалуйста в чем может быть проблема или хотя бы в каком направлении копать?!
пользуйтесь тегами для оформления кода
Последнее редактирование модератором: 6 мар 2015 -
Разобрался! В Справочнике Номенклатура был добавлен Реквизит «Коллекция» на это и ругалось. Реквизит переименовал и все заработало
Всем спасибо за «Активное» участвие
Неоднозначное поле в запросе 1С 8.3
Ошибка Неоднозначное поле в запросе 1С 8.3 связана с наличием одинаковых имен в запросе 1С. В этом случае возникает неопределенность обработки запроса при обращении к данным и появляется соответствующее сообщение:
Ошибка, как правило, возникает у начинающих программистов. А исправляется она простым переименованием одинаковых имен в запросе.
Неоднозначное поле в запросе 1С 8.3
Ошибка 1С Неоднозначное поле может возникать как в Конфигураторе при написании запроса, так и в пользовательском режиме при выполнении некорректного программного кода.
Рассмотрим причины возникновения ошибки и порядок ее исправления на примере.
Одинаковые имена объектов в таблице запроса
Для поиска и устранения ошибки выполните следующие действия:
- Войдите в Конфигуратор.
- Откройте внешний отчет Цены номенклатуры.
- Найдите строчку ТипЦен.Номенклатура КАК Номенклатура в функции ERRORНаСервере. Программа в окне сообщения об ошибке в фигурных скобках дает подсказку, что это 2 строчка в запросе.
Обратите внимание: таблица запроса названа ТипЦен, и реквизит таблицы регистра сведений имеет то же название:
В результате возникает двойственность чтения данных, и программа не может однозначно определить, что в этом случае нужно использовать. Команда ТипЦен.Номенклатура может относиться как к самой таблице, так и к реквизиту таблицы.
Исправление ошибки неоднозначное поле
Исправление ошибки 1С Неоднозначное поле предполагает переименование имени таблицы запроса на новое, например, ЦеныНоменклатурыСрезПоследних. Теперь одинаковых имен в таблице запроса нет. Данные по номенклатуре и цене будут браться из таблицы записей периодического регистра сведений ЦеныноменклатурыСрезПоследних.
Программа понимает, что параметр Номенклатура относится именно к таблице запроса ЦеныНоменклатурыСрезПоследних.
Правильный запрос на чтение актуальных цен номенклатуры описан в процедуре WORKНаСервере.
Сохранение процедур с корректным кодом WORK и некорректным кодом ERROR выполняется отдельно для удобства демонстрации работы запросов в 1С.
Пример ошибки
Протестируем работу внешнего отчета с корректным и некорректным запросом на примере:
- Откройте внешний отчет Цены номенклатуры в 1С: кнопка Главное меню — Файл — Открыть.
- Нажмите кнопку WORK для выполнения правильного запроса.
Запрос отработал правильно!
Нажмите кнопку ERROR для выполнения запроса с ошибкой.
Вот так можно получить ошибку 1С запрос Неоднозначное поле. Будьте внимательны при создании запросов!
Заказать консультацию
По этой или иной ошибке Вы можете обратиться к нашим специалистам, мы Вам поможем решить Вашу проблему.