Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка при создании Левого Соединения
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
rpodgornyy
Делаю небольшой отчёт для выборки остатков по регистру накоплений "ТоварыНаКонсигнации". Хочу добавить для каждой позиции, где есть остаток, документы - регистраторы. При добавлении ЛЕВОЕ СОЕДИНЕНИЕ и ВЫБРАТЬ - выдаётся ошибка -"Ожидается имя таблицы ВЫБРАТЬ", хотя вроде всё прописано... Вот текст запроса:

ВЫБРАТЬ РАЗЛИЧНЫЕ
    ТоварыНаКонсигнацииОстатки.Организация,
    ТоварыНаКонсигнацииОстатки.Консигнатор,
    ТоварыНаКонсигнацииОстатки.Номенклатура,
    ТоварыНаКонсигнацииОстатки.ХарактеристикаНоменклатуры,
    ТоварыНаКонсигнацииОстатки.СерияНоменклатуры,
    ТоварыНаКонсигнацииОстатки.Качество,
    ТоварыНаКонсигнацииОстатки.Склад,
    ТоварыНаКонсигнацииОстатки.КоличествоОстаток,
    ТоварыПереданныеОстатки.СуммаВзаиморасчетовОстаток
    ИЗ
    РегистрНакопления.ТоварыНаКонсигнации.Остатки КАК ТоварыНаКонсигнацииОстатки,
    РегистрНакопления.ТоварыПереданные.Остатки КАК ТоварыПереданныеОстатки,

    ЛЕВОЕ СОЕДИНЕНИЕ
     ВЫБРАТЬ
        ТоварыНаКонсигнации.Номенклатура КАК Номенклатура1,
        ТоварыНаКонсигнации.Регистратор
        ИЗ
        РегистрНакопления.ТоварыНаКонсигнации КАК ТоварыНаКонсигнации
        ПО ТоварыНаКонсигнации.Номенклатура = ТоварыНаКонсигнацииОстатки.Номенклатура
ГДЕ
    ТоварыПереданныеОстатки.Номенклатура = ТоварыНаКонсигнацииОстатки.Номенклатура
    И ТоварыНаКонсигнации.Номенклатура = ТоварыНаКонсигнацииОстатки.Номенклатура
Ardi
Мышкой нужно программировать.
logist
второе ВЫБРАТЬ в скобки, а вообще запрос какой-то не понятный, в плане соединений и ГДЕ
yuritch
Сразу говорю - этот способ добавления регистраторов неправильный, таблица остатков при соединении с ними будет для каждой позиции повторена столько раз, сколько различных документов-регистраторов там было. Применять можно только для случая, когда регистратор всегда только один!
Правильно будет использовать таблицу РегистрНакопления.ТоварыНаКонсигнации.ОстаткиИОбороты.

И все же, если править именно этот запрос, получим примерно такое (добавлены скобки для правильного вложенного запроса, убрано лишнее условие из ГДЕ, которое и так в ЛЕВОМ СОЕДИНЕНИИ стоит):

ВЫБРАТЬ РАЗЛИЧНЫЕ
    ТоварыНаКонсигнацииОстатки.Организация,
    ТоварыНаКонсигнацииОстатки.Консигнатор,
    ТоварыНаКонсигнации.Регистратор,
    ТоварыНаКонсигнацииОстатки.Номенклатура,
    ТоварыНаКонсигнацииОстатки.ХарактеристикаНоменклатуры,
    ТоварыНаКонсигнацииОстатки.СерияНоменклатуры,
    ТоварыНаКонсигнацииОстатки.Качество,
    ТоварыНаКонсигнацииОстатки.Склад,
    ТоварыНаКонсигнацииОстатки.КоличествоОстаток,
    ТоварыПереданныеОстатки.СуммаВзаиморасчетовОстаток
    ИЗ
    РегистрНакопления.ТоварыНаКонсигнации.Остатки КАК ТоварыНаКонсигнацииОстатки,
    РегистрНакопления.ТоварыПереданные.Остатки КАК ТоварыПереданныеОстатки

    ЛЕВОЕ СОЕДИНЕНИЕ
    (
     ВЫБРАТЬ
        ТоварыНаКонсигнации.Номенклатура КАК Номенклатура1,
        ТоварыНаКонсигнации.Регистратор
        ИЗ
        РегистрНакопления.ТоварыНаКонсигнации
    ) КАК ТоварыНаКонсигнации
    ПО ТоварыНаКонсигнации.Номенклатура = ТоварыНаКонсигнацииОстатки.Номенклатура
ГДЕ
    ТоварыПереданныеОстатки.Номенклатура = ТоварыНаКонсигнацииОстатки.Номенклатура


Заодно я поле Регистратор добавил в итоговый список полей (а иначе зачем было его получать?).
По поводу странного соединения - вот такой способ (две таблицы через запятую, условия в ГДЕ) дает результат, аналогичный внутреннему соединению.
sava1
БРЕД....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.