Поясню это на следующем примере:
Исходные данные:
Имеется справочник Номенклатура (без полей, только стандартные)
регистр накопления - измерение Номенклатура тип значения справочник.Номенклатура,
ресурс - количество
Задача
Необходимо сделать левое соединение справочника номенклатуры и регистра накопления ТоварыНаСкладах
Пишу текст запроса:
(1)
Запрос.Текст =
"ВЫБРАТЬ
|Справочник.Номенклатура.Ссылка,
|РегистрНакопления.ТоварыНаСкладах.Количество
|ИЗ
| Справочник.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах
| ПО Справочник.Номенклатура.Ссылка = РегистрНакопления.ТоварыНаСкладах.Номенклатура";
При переносе этого текста в конструктор запроса он(конструктор запроса) преобразовывает его к виду
(2)
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка,
| ТоварыНаСкладах.Количество
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ПО Номенклатура.Ссылка = ТоварыНаСкладах.Номенклатура";
При работе с таким текстом запроса конструктор выдает ошибку "неоднозначное поле "Номенклатура.Ссылка" и все! Дальше работать нельзя.
Чем коварна такая особеность конструктора запроса?
При создании запроса методом "перетаскивания" текст запроса формируется именно как (2).
Как быть в такой ситуации
1. Отказаться от конструктора и писать руками, что не всегда удобно.
2. Проводить тщательный анализ имен выбираемых данных и правильно присваивать псевдонимы, что тоже не очень удобно.
в моем случае можно изменить текст на
(2)
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура2.Ссылка,
| ТоварыНаСкладах.Количество
|ИЗ
| Справочник.Номенклатура КАК Номенклатура2
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ПО Номенклатура2.Ссылка = ТоварыНаСкладах.Номенклатура";
Сообщений об ошибке не возникнет, и станет возможным дальнейшая работа.
Надеюсь, эта публикация окажет вам помощь в практическом программировании.