Ошибка неоднозначное поле в запросе 1с
Рассмотрим назначение и использование условного оператора ПОДОБНО(eng. LIKE) в языке запроса 1С в примерах.
Предназначение
Проверить на соответствие строкового значения в запросе указанному шаблону — возвращает значение Булево-типа (ИСТИНА или ЛОЖЬ).
- Проверка регистро — независима.
- При запросе используются индексы таблиц — не связано с индексами полнотекстового поиска.
- Может долго выполнятся при больших таблицах.
- Строки неограниченной длины следует привести функцией ПОДСТРОКА
Места использования
- В условиях оператора ГДЕ
- В условиях конструкции ВЫБОР КОГДА <> ТОГДА «» ИНАЧЕ «» КОНЕЦ
- В полях выборки (например: Наименование ПОДОБНО &ПараметрПодобно как СтрокаПодходит)
Описание синтаксиса оператора ПОДОБНО
Параметр оператора должен быть строкой: может задаться константой, либо передан как параметр запроса.
Литералы(маски), указанные ниже, допускается использовать совместно и по отдельности.
Точное указание строки
ВЫБРАТЬ первые 10
Ключи.Наименование
ИЗ
Справочник.Ключи КАК Ключи
ГДЕ
Ключи.Наименование ПОДОБНО "1"//Равносильно Ключи.Наименование ="1"
Результат:
% — литерал, означающий произвольное количество любых символов
ВЫБРАТЬ первые 10
Ключи.Наименование
ИЗ
Справочник.Ключи КАК Ключи
ГДЕ
Ключи.Наименование ПОДОБНО "%"
Результат: любые 10 наименований
_ (подчеркивание): литерал, соответствующий одному любому символу
Пример №1:
ВЫБРАТЬ первые 10
Ключи.Наименование
ИЗ
Справочник.Ключи КАК Ключи
ГДЕ
Ключи.Наименование ПОДОБНО "_"
Пример №2: начинающиеся на любой символ, затем следует «1», а дальше любые символы
ВЫБРАТЬ первые 10
Ключи.Наименование
ИЗ
Справочник.Ключи КАК Ключи
ГДЕ
Ключи.Наименование ПОДОБНО "_1%"
Результат:
[] (в квадратных скобках один или несколько символов)
- Каждый литерал, соответствующий одному любому символу — используется как ИЛИ.
Допустимо указание диапазона, например a-z,0-5, означающее произвольный символ из заданного диапазона
Пример
ВЫБРАТЬ первые 10
Ключи.Наименование
ИЗ
Справочник.Ключи КАК Ключи
ГДЕ
Ключи.Наименование ПОДОБНО "[лз]%"
Результат: 10 начинающихся на «л» или «з»
Пример: начинающиеся на 5,6,7
ВЫБРАТЬ первые 10
Ключи.Наименование
ИЗ
Справочник.Ключи КАК Ключи
ГДЕ
Ключи.Наименование ПОДОБНО "6%"
Результат:
[^] (в квадратных скобках значок исключения ^, за которым следует один или несколько символов)
Равносильно любому символу (_) кроме указанных ([])
Пример
ВЫБРАТЬ первые 10
Ключи.Наименование
ИЗ
Справочник.Ключи КАК Ключи
ГДЕ
Ключи.Наименование ПОДОБНО "8.[^012]%"//не включаем 8.0,8.1,8.2
Результат: все начинающиеся на «8.» исключая указанные
Пример:
Результат:
Применимость в платформах
Неверные параметры ПОДОБНО >
- Передается параметр не строкового типа: например число 1 вместо строки «1»
- Сравнивается поле не строкового типа с верной маской (например ссылка) или при соединении значение не проверяется на ЕстьNUL
Обратите внимание на текст ошибки, где выводится вопрос:
>Ключи.Ссылка ПОДОБНО "1"
Ключи.Наименование ПОДОБНО >&L
Об идеалах нации можно судить по ее рекламе.
— Норман Дуглас
(1) 181024, текст запроса нужен (первая старница). НО скорее всего название таблицы (или ее псевдоним) совпал с названием колоннки.
Да, переименуйте таблицу Номенклатура во что-нибудь типа "СправочникНоменклатуры" и все должно стать хорошо.
спустя 968 дней, для тех, кто сегодня и завтра столкнется с проблемой.
Пример текста запроса:
Запрос составлялся в Комплексной автоматизации 1.1
Соответственно, проблема была в следующем:
1. СКД (или вы) создавали: Справочник.Номенклатура КАК Номенклатура
2. Соответственно было не правильное обращение по синониму "Номенклатура" в ЦеныНоменклатурыСрезПоследних. Номенклатура
Бился вчера над этим часа 2, и в гугле искал - без толку. Сегодня по другому сформулировал поиск и сразу нашел. Всё заработало.
аналогично сегодня столкнулся - пришлось как тут сказано алиас поменять на таблицу номенклатура, сразу то и не догадаешься.
Пол часа билась с этим запросом не могла понять в чем дело .
"Неоднозначное поле "Номенклатура.наименование"
ПО ЦеныНоменклатуры.Номенклатура = >Номенклатура.наименование"
А оказывается все очень просто.
Спасибо ответам в этой ветке
Подскажите пожалуйста где ошибка
Ошибка при вызове метода контекста (Выполнить)
по причине:
<(37, 109)>: Неоднозначное поле "Субконто1"
РегистрБухгалтерии.ПланСчетовОсновной2014.Остатки ( &ПозицияДокумента, Счет В (&СписокСчетовОрганизация), >Субконто1 В (&СписокТМЦОрганизация) ) КАК ПланСчетовОсновнойОстаткиОрганизация
(18) Пока вижу, что перед Субконто1 пропущена запятая (должно быть, как в первых остатках, две запятых после счета).
Спасибо за помощь,
в тоне текста уже мозги плавятся, элементарные вещи не замечаю, очень нужен был взгляд со стороны.
И огромное спасибо за помощь в воскресение ночью
Смотрю, не только я вкалываю по выходным ))
Спасибо , помогло - сам сразу не разобрался, проще было поискать
Пометил жирными где были изменения.
Ругается на то, когда название реквизита регистра сведений совпадает с названием объекта справочника(именно в наименовании таблицы в запросе).
Ошибка возникает, когда компилятор не может однозначно определить, что в данном случае нужно использовать.
Получается двойственность чтения данных: название таблицы (или ее псевдоним) совпал с названием колонки, т.е. может относиться как к самой таблице, так и к реквизиту входящей таблицы.
Это значит, что поле (или реквизит) с таким названием может уже быть в предыдущей временной таблице (ВрТ), в справочнике или регистре, используемых в результирующем запросе (где и произошла ошибка).
Т.о., прийти в результирующий запрос поле с "аналогичным" именем может со входящей таблицей, спорное поле исходной таблицы - явно не использоваться в результирующем запросе, а сама исходная таблица - формироваться задолго до места возникновения ошибки.
И этот вариант - далеко не "ошибка новичков", когда спорные поля стоят рядом в запросе, и легко проверяются.
НЕОБХОДИМО:
Переименовать либо поле в результирующем запросе (где и произошла ошибка), либо переименовать в предыдущей используемой таблице (откуда пришел спорный реквизит)), либо - вообще не использовать исходные таблицы (либо справочник, регистр), где уже есть реквизит с таким именем.
Комментирование и явное неиспользование спорного поля в запросе не поможет - компилятор все равно читает исходную таблицу, и находит двойственное использование имени.
Ошибка будет:
"Неоднозначное поле "Номенклатура"
втТипЦен КАК >Номенклатура"
т.к. поле с названием "Номенклатура" уже есть в исходной ВрТ 'втТипЦен', хоть и не используется явно в результирующем запросе.
Причина ошибки в совпадении названия (псевдонима) таблицы и имени поля таблицы или реквизита, либо реквизитов соединяемых таблиц. Причем совпадение псевдонимов полей в разных источниках допускается.
Данная ошибка может возникнуть:
- в момент сохранения конструктора запрос,
- при начале редактирования через конструктор,
- при исполнении ошибочного запроса.
Текст запроса, который может вызвать ошибку
ВЫБРАТЬ
Ссылка.Ссылка КАК Ключи
ИЗ
Справочник.Ключи КАК Ссылка
Ошибка при соединении
Чаще всего ошибка возникает не в простых запросах (как выше), а при соединении похожих или одинаковых таблиц.
Например, справочников по полям ссылка, наименование, код (присутствующих у всех)
ВЫБРАТЬ
ключи.Ссылка КАК ключи
ИЗ
Справочник.Ключи КАК ключи
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Ключи КАК Ключи2
ПО Наименование = Наименование
Исправление ошибки
- При соединениях следует указывать названия таблиц: Ключи.Ссылка = Ключи2.Ссылка.
- Названия таблиц выбирать не совпадающими с полем «Имя» реквизита.
- Если объект добавлен вами и вы создали, например, реквизит Договоры в Справочник.Договоры, лучше переименовать его, т.к. подобные ошибки будут возникать регулярно.
- Если используются временные таблицы, обратите внимание на их имена на предмет аналогичного совпадения.
Пример кода с временными таблицами — «Наименование» не вызывает ошибку в отличии от ссылка (Поле не используется при соединении, но есть в полях выборки):
ВЫБРАТЬ
"ключ" КАК Ссылка
ПОМЕСТИТЬ Ключи
;
Безошибочный код
ВЫБРАТЬ
ключи.Ссылка КАК ключи
ИЗ
Справочник.Ключи КАК ключи
Скриншот «искусственной» ошибки в 1С
Самые глубокие проблемы, связанные с рекламой, проистекают не столько из стремления рекламодателей соблазнять, сколько из нашего желания быть соблазняемыми.
— Дэниэл Бурстин
Ошибка, как правило, возникает у начинающих программистов. А исправляется она простым переименованием одинаковых имен в запросе.
Изучив статью, вы:
- ознакомитесь с порядком исправления ошибки в запросе 1С;
- получите внешний отчет, демонстрирующий ошибочный и правильный коды.
Неоднозначное поле в запросе 1С 8.3
Ошибка 1С Неоднозначное поле может возникать как в Конфигураторе при написании запроса, так и в пользовательском режиме при выполнении некорректного программного кода.
Рассмотрим причины возникновения ошибки и порядок ее исправления на примере.
Одинаковые имена объектов в таблице запроса
При чтении цен номенклатуры по регистру сведений Цены номенклатуры из внешнего отчета, появляется ошибка Неоднозначное поле «ТипЦен.Номенклатура».
Для поиска и устранения ошибки выполните следующие действия:
Обратите внимание: таблица запроса названа ТипЦен , и реквизит таблицы регистра сведений имеет то же название:
В результате возникает двойственность чтения данных, и программа не может однозначно определить, что в этом случае нужно использовать. Команда ТипЦен.Номенклатура может относиться как к самой таблице, так и к реквизиту таблицы.
Исправление ошибки Неодназначное поле
Исправление ошибки 1С Неоднозначное поле предполагает переименование имени таблицы запроса на новое, например, ЦеныНоменклатурыСрезПоследних . Теперь одинаковых имен в таблице запроса нет. Данные по номенклатуре и цене будут браться из таблицы записей периодического регистра сведений ЦеныноменклатурыСрезПоследних .
Программа понимает, что параметр Номенклатура относится именно к таблице запроса ЦеныНоменклатурыСрезПоследних .
Правильный запрос на чтение актуальных цен номенклатуры описан в процедуре WORKНаСервере .
Сохранение процедур с корректным кодом WORK и некорректным кодом ERROR выполняется отдельно для удобства демонстрации работы запросов в 1С.
Пример ошибки
Протестируем работу внешнего отчета с корректным и некорректным запросом на примере:
Вот так можно получить ошибку 1С запрос Неоднозначное поле . Будьте внимательны при создании запросов!
См. также:
Помогла статья?
Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно
Ошибка, как правило, возникает у начинающих программистов. А исправляется она простым переименованием одинаковых имен в запросе.
Изучив статью, вы:
- ознакомитесь с порядком исправления ошибки в запросе 1С;
- получите внешний отчет, демонстрирующий ошибочный и правильный коды.
Неоднозначное поле в запросе 1С 8.3
Ошибка 1С Неоднозначное поле может возникать как в Конфигураторе при написании запроса, так и в пользовательском режиме при выполнении некорректного программного кода.
Рассмотрим причины возникновения ошибки и порядок ее исправления на примере.
Одинаковые имена объектов в таблице запроса
При чтении цен номенклатуры по регистру сведений Цены номенклатуры из внешнего отчета, появляется ошибка Неоднозначное поле «ТипЦен.Номенклатура».
Для поиска и устранения ошибки выполните следующие действия:
Обратите внимание: таблица запроса названа ТипЦен , и реквизит таблицы регистра сведений имеет то же название:
В результате возникает двойственность чтения данных, и программа не может однозначно определить, что в этом случае нужно использовать. Команда ТипЦен.Номенклатура может относиться как к самой таблице, так и к реквизиту таблицы.
Исправление ошибки Неодназначное поле
Исправление ошибки 1С Неоднозначное поле предполагает переименование имени таблицы запроса на новое, например, ЦеныНоменклатурыСрезПоследних . Теперь одинаковых имен в таблице запроса нет. Данные по номенклатуре и цене будут браться из таблицы записей периодического регистра сведений ЦеныноменклатурыСрезПоследних .
Программа понимает, что параметр Номенклатура относится именно к таблице запроса ЦеныНоменклатурыСрезПоследних .
Правильный запрос на чтение актуальных цен номенклатуры описан в процедуре WORKНаСервере .
Сохранение процедур с корректным кодом WORK и некорректным кодом ERROR выполняется отдельно для удобства демонстрации работы запросов в 1С.
Пример ошибки
Протестируем работу внешнего отчета с корректным и некорректным запросом на примере:
Вот так можно получить ошибку 1С запрос Неоднозначное поле . Будьте внимательны при создании запросов!
См. также:
Помогла статья?
Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно
Читайте также: