Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 июн 2021, 22:39

"Таблица значений" в результате запроса - 1С

Автор mvk843, 09 июн 2017, 14:46

0 Пользователей и 1 гость просматривают эту тему.

mvk843

Здравствуйте!
Есть запрос к двум таблицам с использованием соединения. У одной из таблиц есть табличная часть. Из этой табличной части нужно вывести поля в результат запроса. Но у меня получается результат, представленный на картинке. То есть эта табличная часть выводится как "Таблица значений", а мне нужно отдельными полями. Как это сделать? В идеале выводить данные из табличной части только в том случае, если в ней одна строка (если больше одной - отбрасывать полностью строку в запросе).


ВЫБРАТЬ
    АдресаДоставкиКодыСинхронизации.Код,
    АдресаДоставкиКодыСинхронизации.Ссылка.Владелец,
    АдресаДоставкиКодыСинхронизации.Ссылка.Адрес,
    ВидыРасчетовПродажа.ТипЦен.Наименование,
    ВидыРасчетовПродажа.Код КАК Код1,
    ВидыРасчетовПродажа.Наименование,
    ВидыРасчетовПродажа.ЦеновыеНастройки.(
        КомиссияФСБН,
        КомиссияФСН,
        ЦеноваяНастройка,
        ФондоваяНаценка,
        ФинансоваяСкидкаБезналичная,
        ФинансоваяСкидкаНаличная
    )
ИЗ
    Справочник.ВидыРасчетовПродажа КАК ВидыРасчетовПродажа
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.АдресаДоставки.КодыСинхронизации КАК АдресаДоставкиКодыСинхронизации
        ПО (АдресаДоставкиКодыСинхронизации.Ссылка.Владелец = ВидыРасчетовПродажа.Владелец)
ГДЕ
    АдресаДоставкиКодыСинхронизации.ЭлектроннаяПлощадка.Наименование = &A
    И ВидыРасчетовПродажа.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)


ilyay

Соединить в запросе объект и его табличную часть:
Справочник.ВидыРасчетовПродажа КАК ВидыРасчетовПродажа
ЛЕВОЕ СОЕДИНЕНИЕ
Справочник.ВидыРасчетовПродажа.ЦеновыеНастройки КАК ЦеновыеНастройки
ПО  ВидыРасчетовПродажа.Ссылка = ЦеновыеНастройки.Ссылка

mvk843

А как в этом случае будет выглядеть запрос полностью? Если делаю так, ругается на повторяющийся псевдоним. Да и вообще, можно ли делать два соединения в блоке "ИЗ"?


ВЫБРАТЬ
АдресаДоставкиКодыСинхронизации.Код,
АдресаДоставкиКодыСинхронизации.Ссылка.Владелец,
АдресаДоставкиКодыСинхронизации.Ссылка.Адрес,
ВидыРасчетовПродажа.ТипЦен.Наименование,
ВидыРасчетовПродажа.Код КАК Код1,
ВидыРасчетовПродажа.Наименование,
ВидыРасчетовПродажа.ЦеновыеНастройки.(
КомиссияФСБН,
КомиссияФСН,
ЦеноваяНастройка,
ФондоваяНаценка,
ФинансоваяСкидкаБезналичная,
ФинансоваяСкидкаНаличная
)
ИЗ
Справочник.ВидыРасчетовПродажа КАК ВидыРасчетовПродажа
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.АдресаДоставки.КодыСинхронизации КАК АдресаДоставкиКодыСинхронизации
ПО (АдресаДоставкиКодыСинхронизации.Ссылка.Владелец = ВидыРасчетовПродажа.Владелец),
Справочник.ВидыРасчетовПродажа КАК ВидыРасчетовПродажа
ЛЕВОЕ СОЕДИНЕНИЕ
Справочник.ВидыРасчетовПродажа.ЦеновыеНастройки КАК ЦеновыеНастройки
ПО  ВидыРасчетовПродажа.Ссылка = ЦеновыеНастройки.Ссылка
ГДЕ
АдресаДоставкиКодыСинхронизации.ЭлектроннаяПлощадка.Наименование = &A
И ВидыРасчетовПродажа.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)



ilyay


ВЫБРАТЬ
    АдресаДоставкиКодыСинхронизации.Код,
    АдресаДоставкиКодыСинхронизации.Ссылка.Владелец,
    АдресаДоставкиКодыСинхронизации.Ссылка.Адрес,
    ВидыРасчетовПродажа.ТипЦен.Наименование,
    ВидыРасчетовПродажа.Код КАК Код1,
    ВидыРасчетовПродажа.Наименование,
    ЦеновыеНастройки.КомиссияФСБН,
    ЦеновыеНастройки.КомиссияФСН,
    ЦеновыеНастройки.ЦеноваяНастройка,
    ЦеновыеНастройки.ФондоваяНаценка,
    ЦеновыеНастройки.ФинансоваяСкидкаБезналичная,
    ЦеновыеНастройки.ФинансоваяСкидкаНаличная

ИЗ
    Справочник.ВидыРасчетовПродажа КАК ВидыРасчетовПродажа
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.АдресаДоставки.КодыСинхронизации КАК АдресаДоставкиКодыСинхронизации
    ПО (АдресаДоставкиКодыСинхронизации.Ссылка.Владелец = ВидыРасчетовПродажа.Владелец)
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыРасчетовПродажа.ЦеновыеНастройки КАК ЦеновыеНастройки
    ПО  ВидыРасчетовПродажа.Ссылка = ЦеновыеНастройки.Ссылка
ГДЕ
    АдресаДоставкиКодыСинхронизации.ЭлектроннаяПлощадка.Наименование = &A
    И ВидыРасчетовПродажа.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

mvk843

Выдает ошибку (см. вложение). Если что, табличная часть "Ценовые настройки" выглядит вот так (см. следующее вложение). Также эта табличная часть может содержать более одной строки (то есть заходим в элемент справочника "Виды расчетов продажа" и можем видеть две строки в табличной части "Ценовые настройки"). Может быть дело в этом? В любом случае, я не имею достаточно опыта программирования 1С и написания запросов, поэтому я не знаю, что дальше делать.

alex0402

Цитата: ilyay от 09 июн 2017, 16:00ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыРасчетовПродажа.ЦеновыеНастройки КАК ЦеновыеНастройки
Используй другой псевдоним, соответственно изменить весь запрос.
Спасибо за Сказать спасибо

mvk843

Попробовал вот так:


ВЫБРАТЬ
    АдресаДоставкиКодыСинхронизации.Код,
    АдресаДоставкиКодыСинхронизации.Ссылка.Владелец,
    АдресаДоставкиКодыСинхронизации.Ссылка.Адрес,
    ВидыРасчетовПродажа.ТипЦен.Наименование,
    ВидыРасчетовПродажа.Код КАК Код1,
    ВидыРасчетовПродажа.Наименование,
    ЦеновыеНастройки.КомиссияФСБН,
    ЦеновыеНастройки.КомиссияФСН,
    ЦеновыеНастройки.ЦеноваяНастройка,
    ЦеновыеНастройки.ФондоваяНаценка,
    ЦеновыеНастройки.ФинансоваяСкидкаБезналичная,
    ЦеновыеНастройки.ФинансоваяСкидкаНаличная

ИЗ
    Справочник.ВидыРасчетовПродажа КАК ВидыРасчетовПродажа
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.АдресаДоставки.КодыСинхронизации КАК АдресаДоставкиКодыСинхронизации
        ПО (АдресаДоставкиКодыСинхронизации.Ссылка.Владелец = ВидыРасчетовПродажа.Владелец)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыРасчетовПродажа.ЦеновыеНастройки КАК ЦеновыеНастройки1
        ПО  ВидыРасчетовПродажа.Ссылка = ЦеновыеНастройки.Ссылка
ГДЕ
    АдресаДоставкиКодыСинхронизации.ЭлектроннаяПлощадка.Наименование = &A
    И ВидыРасчетовПродажа.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)


Выходит ошибка (см. скриншот). То есть получается сделать так как я хочу (вывести в результате запроса табличную часть) нельзя? Или ошибка в запросе?

alex0402

ВЫБРАТЬ
    АдресаДоставкиКодыСинхронизации.Код,
    АдресаДоставкиКодыСинхронизации.Ссылка.Владелец,
    АдресаДоставкиКодыСинхронизации.Ссылка.Адрес,
    ВидыРасчетовПродажа.ТипЦен.Наименование,
    ВидыРасчетовПродажа.Код КАК Код1,
    ВидыРасчетовПродажа.Наименование,
    ЦеновыеНастройки1.КомиссияФСБН,
    ЦеновыеНастройки1.КомиссияФСН,
    ЦеновыеНастройки1.ЦеноваяНастройка,
    ЦеновыеНастройки1.ФондоваяНаценка,
    ЦеновыеНастройки1.ФинансоваяСкидкаБезналичная,
    ЦеновыеНастройки1.ФинансоваяСкидкаНаличная

ИЗ
    Справочник.ВидыРасчетовПродажа КАК ВидыРасчетовПродажа
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.АдресаДоставки.КодыСинхронизации КАК АдресаДоставкиКодыСинхронизации
        ПО (АдресаДоставкиКодыСинхронизации.Ссылка.Владелец = ВидыРасчетовПродажа.Владелец)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыРасчетовПродажа.ЦеновыеНастройки КАК ЦеновыеНастройки1
        ПО  ВидыРасчетовПродажа.Ссылка = ЦеновыеНастройки1.Ссылка
ГДЕ
    АдресаДоставкиКодыСинхронизации.ЭлектроннаяПлощадка.Наименование = &A
    И ВидыРасчетовПродажа.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
Спасибо за Сказать спасибо

mvk843

Да, получается примерно то, что нужно. Но табличная часть "Ценовая настройка" может содержать более одного элемента, соответственно в результате выводятся одинаковые строки с отличием только в полях из Ценовой настройки. Как вывести только те результаты, у которых количество ценовых настроек = 1?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск