gifts2017

Ошибки конструктора запроса

Опубликовал Иван Иванов (g45eorg) в раздел Программирование - Практика программирования

При работе в платформе 8.3 столкнулся со следующей неприятной особенностью конструктора запроса: Конструктор некорректно работает с псевдонимами.

Поясню это на следующем примере:

Исходные данные:

Имеется   справочник Номенклатура (без полей, только стандартные)

регистр накопления - измерение  Номенклатура тип значения справочник.Номенклатура, 

ресурс  - количество

Задача

Необходимо сделать левое соединение справочника номенклатуры и регистра накопления ТоварыНаСкладах 

Пишу текст запроса:

 (1)

Запрос.Текст = 
    "ВЫБРАТЬ
    |Справочник.Номенклатура.Ссылка,
    |РегистрНакопления.ТоварыНаСкладах.Количество
    |ИЗ
    |    Справочник.Номенклатура
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах
    |        ПО Справочник.Номенклатура.Ссылка = РегистрНакопления.ТоварыНаСкладах.Номенклатура";

При переносе этого текста в конструктор запроса он(конструктор запроса) преобразовывает его к виду

    (2)

Запрос.Текст = 
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка,
        |    ТоварыНаСкладах.Количество
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
        |        ПО Номенклатура.Ссылка = ТоварыНаСкладах.Номенклатура";

При работе с таким текстом запроса конструктор выдает ошибку "неоднозначное поле "Номенклатура.Ссылка" и все! Дальше работать нельзя.

Чем коварна такая особеность конструктора запроса? 

При создании запроса методом "перетаскивания" текст запроса формируется именно как (2).

Как быть в такой ситуации

1. Отказаться от конструктора и писать руками, что не всегда удобно.

2. Проводить тщательный анализ имен выбираемых данных и правильно присваивать псевдонимы, что тоже не очень удобно.

в моем случае можно изменить текст на

     (2)

Запрос.Текст = 
        "ВЫБРАТЬ
        |    Номенклатура2.Ссылка,
        |    ТоварыНаСкладах.Количество
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура2
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
        |        ПО Номенклатура2.Ссылка = ТоварыНаСкладах.Номенклатура";

Сообщений об ошибке не возникнет, и станет возможным дальнейшая работа.

Надеюсь, эта публикация окажет вам помощь в практическом программировании.

См. также

Подписаться Добавить вознаграждение

Лучшие комментарии

3. Андрей Акулов (DrAku1a) 24.11.16 03:24
Ну, напишите в саппорт 1С, что нужно проверять на неоднозначность перед автоматическим присвоением псевдонимов.
Или - если уж пишите запрос "руками", то дайте псевдонимы на стадии написания текста запроса.
swiss-garant; +1 Ответить 1

Остальные комментарии

1. Виктор Череватенко (buddha667) 23.11.16 11:16
Всегда желательно давать псевдонимы таблицам и т.д. явно.
В исходном запросе надо было сделать так и никаких проблем. И читается легче.
Запрос.Текст = 
    "ВЫБРАТЬ
    |СправочникНоменклатура.Ссылка КАК Номенклатура,
    |РегистрТоварыНаСкладах.Количество
    |ИЗ
    |    Справочник.Номенклатура КАК СправочникНоменклатура
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК РегистрТоварыНаСкладах
    |        ПО СправочникНоменклатура.Ссылка = РегистрТоварыНаСкладах.Номенклатура";
...Показать Скрыть

корум; artfa; +2 Ответить 1
2. Галахад (dmt) 23.11.16 11:30
Какая-то надуманная проблема.
Mortiferus; +1 Ответить 1
4. Иван Иванов (g45eorg) 24.11.16 20:44
(3)А разве 1С не знает о этой проблеме?
5. Иван Иванов (g45eorg) 24.11.16 20:45
(2) Тогда Вам флаг в руки и попутного ветра!
6. aspirator 23 (aspirator23) 26.11.16 15:15
(1)Тоже так пишу, правда короче СпрНоменклатура.
Кстати конструктор указывает на такие проблемы.
7. Иван Иванов (g45eorg) 04.12.16 22:05
(6) Вы имеете в виду сообщение "неоднозначное поле <имя_поля>"?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа