Обращение к табличной части в запросе

1. user618695_ka 10.01.17 12:56 Сейчас в теме
Код запроса:

Запрос1 = Новый Запрос();
		Запрос1.УстановитьПараметр("ТекущийДокумент", ТекущийДокумент);
		Запрос1.Текст = 
		"ВЫБРАТЬ
		|	ПриемИПередачаВРемонт.Контрагент.КонтактнаяИнформация.(
		|		Представление КАК Представление,
		|		АдресЭП КАК АдресЭП,
		|		НомерТелефона КАК НомерТелефона
		|	)КАК ЧтоТо
		|ИЗ
		|	Документ.ПриемИПередачаВРемонт КАК ПриемИПередачаВРемонт
		|ГДЕ
		|	ПриемИПередачаВРемонт.Ссылка = &ТекущийДокумент";
		
		Шапка1 = Запрос1.Выполнить().Выбрать();
		Шапка1.Следующий();
		ОбластьМакета.Параметры.Контрагент = Шапка1.ЧтоТо.Представление;
		ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.ЧтоТо.АдресЭП;
		ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.ЧтоТо.НомерТелефона;
Показать


Ошибка: поле объекта "Представление" не найдено.

Вопрос: как правильно обратиться к этим данным?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
35. user618695_ka 10.01.17 19:07 Сейчас в теме
(22) Максимумы помогли, спасибо)

	Запрос1 = Новый Запрос();
	Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент.КонтактноеЛицо);
	Запрос1.Текст = 
        "ВЫБРАТЬ
        |	МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.АдресЭП) КАК АдресЭП,
        |	МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.НомерТелефона) КАК НомерТелефона,
        |	КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление КАК Представление
        |ИЗ
        |	Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаКонтактнаяИнформация
        |ГДЕ
        |	КонтактныеЛицаКонтактнаяИнформация.Ссылка = &Ссылка
        |СГРУППИРОВАТЬ ПО
        |   КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление";
        
        Шапка1 = Запрос1.Выполнить().Выбрать();
        Шапка1.Следующий();
        ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
        ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.НомерТелефона;
        ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.АдресЭП;
Показать
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
5. vek 66 10.01.17 13:19 Сейчас в теме
(1) вы на выходе в поле "ЧтоТо" получаете таблицу значений, соответственно обращаться нужно ОбластьМакета.Параметры.Контрагент = Шапка1.ЧтоТо[0].Представление (или выгрузить ее и обойти циклом). В таком случае лучше сделать проверку что ТЗ не пуста.
А вообще проще "ВЫБРАТЬ Т.Контрагент.КонтактнаяИнформация.Представление, Т.Контрагент.КонтактнаяИнформация.Представление, Т.Контрагент.КонтактнаяИнформация.АдресЭП,Т.Контрагент.КонтактнаяИнформация.НомерТелефона ИЗ Документ.ПриемИПередачаВРемонт КАК Т ГДЕ Т.Ссылка = &ТекущийДокумент"
7. user618695_ka 10.01.17 13:44 Сейчас в теме
(5) Вариант 1: ошибка "Поле Контрагент не найдено".
		"ВЫБРАТЬ  
		|	Т.Контрагент.КонтактнаяИнформация.Представление, 
		|	Т.Контрагент.КонтактнаяИнформация.АдресЭП,
		|	Т.Контрагент.КонтактнаяИнформация.НомерТелефона 
		|ИЗ 
		|	Документ.ПриемИПередачаВРемонт КАК Т 
		|ГДЕ 
		|	Т.Ссылка = &ТекущийДокумент";
		
		Шапка1 = Запрос1.Выполнить().Выбрать();
		Шапка1.Следующий();
		ОбластьМакета.Параметры.Контрагент = Шапка1.Контрагент.КонтактнаяИнформация.Представление;
		ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.Контрагент.КонтактнаяИнформация.АдресЭП;
		ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.Контрагент.КонтактнаяИнформация.НомерТелефона;
Показать


Вариант 2: ошибок нет. результата тоже, но похоже это уже совсем другая история..
		"ВЫБРАТЬ  
		|	Т.Контрагент.КонтактнаяИнформация.Представление КАК Представление, 
		|	Т.Контрагент.КонтактнаяИнформация.АдресЭП КАК АдресЭП,
		|	Т.Контрагент.КонтактнаяИнформация.НомерТелефона КАК НомерТелефона 
		|ИЗ 
		|	Документ.ПриемИПередачаВРемонт КАК Т 
		|ГДЕ 
		|	Т.Ссылка = &ТекущийДокумент";
		
		Шапка1 = Запрос1.Выполнить().Выбрать();
		Шапка1.Следующий();
		ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
		ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.АдресЭП;
		ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.НомерТелефона;
Показать
Прикрепленные файлы:
6. DJDUH 17 10.01.17 13:43 Сейчас в теме
(1) через левое по контрачу к рс.контактнаяИнфа на дату дока
2. Ганс 10.01.17 13:03 Сейчас в теме
Не знаю как у вас в конфигурации, но возможно Контактная информация это РегистрСведений?

Если нет, то левым соединением, добавте таблицу из справочника Контрагентов!
3. Drak0n 187 10.01.17 13:04 Сейчас в теме
Лучше через левое соединение
4. tailer2 10.01.17 13:11 Сейчас в теме
пипец какой-то

выбрать бла, бла, бла из БлаБлаБла
где контрагент = &Контрагент

запрос установить ("Контратент",ТекущийДокумент.Контратент)
8. antz 10.01.17 13:58 Сейчас в теме
У меня кровь из глаз идет уже.

ВЫБРАТЬ
	КонтактнаяИнформация.Ссылка.Представление КАК Контрагент,
	КонтактнаяИнформация.АдресЭП,
	КонтактнаяИнформация.НомерТелефона
ИЗ
	Справочник.Контрагенты.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
	КонтактнаяИнформация.Ссылка = &Ссылка


Запрос.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент);


spacecraft; Denis_CFO; vovan_victory; +3 Ответить
12. user618695_ka 10.01.17 15:36 Сейчас в теме
(8) ТекущийДокумент.Контрагент - это ссылка на контрагента, а КонтактнаяИнформация.Ссылка - это ссылка на табличную часть, что ни одно и то же..
13. spacecraft 10.01.17 15:41 Сейчас в теме
(12) это где такому учат? У табличной части нет ссылки. Это ссылка на владельца табличной части. В данном случае на справочник Контрагент.
14. vovan_victory 63 10.01.17 15:41 Сейчас в теме
(12)Мда.. все и вправду очень плохо...

КонтактнаяИнформация.Ссылка - это ссылка на табличную часть


А владельцем этой табличной части кто является? Или табличную часть Вы рассматриваете как самостоятельную таблицу?
9. Daringer 20 10.01.17 14:03 Сейчас в теме
Может так?
ВЫБРАТЬ
			КонтрагентыКонтактнаяИнформация.Представление,
			КонтрагентыКонтактнаяИнформация.НомерТелефона,
			КонтрагентыКонтактнаяИнформация.АдресЭП
		ИЗ
			Документ.ПриемИПередачаВРемонт КАК ПриемИПередачаВРемонт
				ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
				ПО ПриемИПередачаВРемонт.Контрагент = КонтрагентыКонтактнаяИнформация.Ссылка
		ГДЕ
			ПриемИПередачаВРемонт.Ссылка = &ТекущийДокумент
Показать
10. vovan_victory 63 10.01.17 14:05 Сейчас в теме
ВЫБРАТЬ
        |    ПриемИПередачаВРемонт.Представление КАК Представление,
        |    ПриемИПередачаВРемонт.АдресЭП КАК АдресЭП,
        |    ПриемИПередачаВРемонт.НомерТелефона КАК НомерТелефона
        |ИЗ
        |    Документ.ПриемИПередачаВРемонт.КонтактнаяИнформация КАК ПриемИПередачаВРемонт
        |ГДЕ
        |    ПриемИПередачаВРемонт.Ссылка = &ТекущийДокумент"

Шапка1 = Запрос1.Выполнить().Выбрать();
        Шапка1.Следующий();
        ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
        ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.АдресЭП;
        ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.НомерТелефона;

Показать
11. vek 66 10.01.17 14:05 Сейчас в теме
Вариант 2: ошибок нет. результата тоже, но похоже это уже совсем другая история..
   "ВЫБРАТЬ  
        |    Т.Контрагент.КонтактнаяИнформация.Представление КАК Представление, 
        |    Т.Контрагент.КонтактнаяИнформация.АдресЭП КАК АдресЭП,
        |    Т.Контрагент.КонтактнаяИнформация.НомерТелефона КАК НомерТелефона 
        |ИЗ 
        |    Документ.ПриемИПередачаВРемонт КАК Т 
        |ГДЕ 
        |    Т.Ссылка = &ТекущийДокумент";
        
        Шапка1 = Запрос1.Выполнить().Выбрать();
        Шапка1.Следующий();
        ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
        ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.АдресЭП;
        ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.НомерТелефона;
Показать

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

И посмотрите в отладчике что лежит в этой таблице. А дальше будет видно что и откуда брать (если конечно таблица не пуста).

ЗЫ: по вашему "не рабочему" варианту, конечно он не рабочий, кто сказал, что в результате запроса должно быть поле "контрагент"? Ну и самому обозначать алиасы полей - не лишнее дело.
15. user618695_ka 10.01.17 16:05 Сейчас в теме
Так.. Спасибо всем огромное, всё пробую, но пока результат не достигнут..

Вот текущий код:
Запрос1 = Новый Запрос();
		Запрос1.УстановитьПараметр("ТекущийДокумент", ТекущийДокумент);
		Запрос1.Текст = 
        "ВЫБРАТЬ  
        |    Т.Контрагент.КонтактноеЛицо.Представление КАК Представление, 
        |    Т.Контрагент.КонтактноеЛицо.КонтактнаяИнформация.АдресЭП КАК АдресЭП,
        |    Т.Контрагент.КонтактноеЛицо.КонтактнаяИнформация.НомерТелефона КАК НомерТелефона 
        |ИЗ 
        |    Документ.ПриемИПередачаВРемонт КАК Т 
        |ГДЕ 
        |    Т.Ссылка = &ТекущийДокумент";
        
        Шапка1 = Запрос1.Выполнить().Выбрать();
        Шапка1.Следующий();
        ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
        ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.АдресЭП;
        ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.НомерТелефона;
Показать


Представление заполняется, а вот адрес и номер телефона из табличной части нет..
16. antz 10.01.17 16:08 Сейчас в теме
(15) почему вы так уверены, что в табличной части всего одна строка и она обязательно заполнена? И переделайте уже запрос как в (8), мне очень жалко базу, над которой так издеваются.
18. user618695_ka 10.01.17 16:50 Сейчас в теме
(16) нельзя как в (8).

{Документ.ПриемИПередачаВРемонт.МодульМенеджера(1357)}: Поле объекта не обнаружено (Представление)
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;

Так работают эти люди (ремонт ноутбуков), только одно контактное лицо и всегда есть. у них уже база на 10к клиентов, везде так..

Код попробовал. Потом чуть поправил, но не помогло..

		Запрос1 = Новый Запрос();
		Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент);
		Запрос1.Текст = 
        "ВЫБРАТЬ
        |	КонтактныеЛицаКонтактнаяИнформация.АдресЭП КАК АдресЭП,
        |	КонтактныеЛицаКонтактнаяИнформация.НомерТелефона КАК НомерТелефона,
        |	КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление КАК Представление
        |ИЗ
        |	Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаКонтактнаяИнформация
		|ГДЕ
		|	КонтактныеЛицаКонтактнаяИнформация.Ссылка = &Ссылка";
        
        Шапка1 = Запрос1.Выполнить().Выбрать();
        Шапка1.Следующий();
        ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
        ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.АдресЭП;
        ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.НомерТелефона;
Показать
19. vovan_victory 63 10.01.17 16:54 Сейчас в теме
(18)
 КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление КАК Представление


а может все таки

КонтактныеЛицаКонтактнаяИнформация.Представление КАК Представление
23. spacecraft 10.01.17 17:15 Сейчас в теме
(19) это представление названия типа контактной информации (Телефон, Эл. Почта и т.д.)
22. spacecraft 10.01.17 17:14 Сейчас в теме +0.5 $m
(18) в начале было: ПриемИПередачаВРемонт.Контрагент.КонтактнаяИнформация.
Теперь контактные лица.
Вот для КонтактныеЛица:
Запрос1 = Новый Запрос();
Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент.КонтактноеЛицо);
Запрос1.Текст = 
    "ВЫБРАТЬ
		|	КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление КАК Представление,
		|	МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.АдресЭП) КАК АдресЭП,
		|	МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.НомерТелефона) КАК НомерТелефона
		|ИЗ
		|	Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаКонтактнаяИнформация
		|ГДЕ
		|	КонтактныеЛицаКонтактнаяИнформация.Ссылка = &Ссылка
		|
		|СГРУППИРОВАТЬ ПО
		|	КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление";
        
Шапка1 = Запрос1.Выполнить().Выбрать();
Если Шапка1.Следующий() Тогда
    ОбластьМакета.Параметры.Контрагент = Шапка1.Представление; // тут контактное лицо, или таки контрагент нужен?
    ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.НомерТелефона;
    ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.АдресЭП;
КонецЕсли;
Показать
33. antz 10.01.17 18:36 Сейчас в теме
Повторяю. Табличная часть - одна. Телефон может быть в одной строке, емаил - в другой. При открытии карточки контрагента (у меня в УТ по крайней мере) по этой табличной части проходится цикл и заполняются поля формы. Попробуй сделать как в (22) - вытащить максимумы по этим полям и сгруппировать по ссылке. Или по представлению, если даст.
user618695_ka; +1 Ответить
35. user618695_ka 10.01.17 19:07 Сейчас в теме
(22) Максимумы помогли, спасибо)

	Запрос1 = Новый Запрос();
	Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент.КонтактноеЛицо);
	Запрос1.Текст = 
        "ВЫБРАТЬ
        |	МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.АдресЭП) КАК АдресЭП,
        |	МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.НомерТелефона) КАК НомерТелефона,
        |	КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление КАК Представление
        |ИЗ
        |	Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаКонтактнаяИнформация
        |ГДЕ
        |	КонтактныеЛицаКонтактнаяИнформация.Ссылка = &Ссылка
        |СГРУППИРОВАТЬ ПО
        |   КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление";
        
        Шапка1 = Запрос1.Выполнить().Выбрать();
        Шапка1.Следующий();
        ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
        ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.НомерТелефона;
        ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.АдресЭП;
Показать
17. spacecraft 10.01.17 16:21 Сейчас в теме
(15) если достаточно только одного номера телефона и эл. почты:
Запрос1 = Новый Запрос();
Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент);
Запрос1.Текст = 
    "ВЫБРАТЬ
    |    КонтактнаяИнформация.Ссылка.Представление КАК Контрагент,
    |    МАКСИМУМ(КонтактнаяИнформация.АдресЭП) КАК АдресЭП,
    |    МАКСИМУМ(КонтактнаяИнформация.НомерТелефона) КАК НомерТелефона
    |ИЗ
    |    Справочник.Контрагенты.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |    КонтактнаяИнформация.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |    КонтактнаяИнформация.Ссылка.Представление";
        
Шапка1 = Запрос1.Выполнить().Выбрать();
Если Шапка1.Следующий() Тогда
    ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
    ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.НомерТелефона;
    ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.АдресЭП;
КонецЕсли;
Показать
20. antz 10.01.17 16:55 Сейчас в теме
Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент.КонтактноеЛицо);
21. vovan_victory 63 10.01.17 16:58 Сейчас в теме
(20)

могу предположить, что
ТекущийДокумент.Контрагент.КонтактноеЛицо
имеет тип что то типа СправочникСсылка.КонтакныеЛица(могу ошибаться, но по логике...)
24. spacecraft 10.01.17 17:17 Сейчас в теме
25. user618695_ka 10.01.17 17:36 Сейчас в теме
(20) Спасибо! Взлетело! Ну.. почему-то кроме Email-а
	Запрос1 = Новый Запрос();
	Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент.КонтактноеЛицо);
	Запрос1.Текст = 
        "ВЫБРАТЬ
        |	КонтактныеЛицаКонтактнаяИнформация.АдресЭП КАК АдресЭП,
        |	КонтактныеЛицаКонтактнаяИнформация.НомерТелефона КАК НомерТелефона,
        |	КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление КАК Представление
        |ИЗ
        |	Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаКонтактнаяИнформация
	|ГДЕ
	|	КонтактныеЛицаКонтактнаяИнформация.Ссылка = &Ссылка";
        
        Шапка1 = Запрос1.Выполнить().Выбрать();
        Шапка1.Следующий();
        ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
        ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.НомерТелефона;
        ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.АдресЭП;
Показать
26. spacecraft 10.01.17 17:40 Сейчас в теме
(25) уж и не знаю, почему игнорируете мои сообщения...
Но пора уже отдавать премию (8), он честно это заслужил.
А Вам использовать таки код в (22).
27. antz 10.01.17 17:40 Сейчас в теме +1 $m
(26) E-Mail может быть в другой строке табличной части. Ну в отладчике результат запроса выгрузи и посмотри.
28. user618695_ka 10.01.17 17:48 Сейчас в теме
29. spacecraft 10.01.17 17:54 Сейчас в теме
(28) вот только не надо, что не вышло. Если код в (25) отрабатывает, то и в (22) отработает.
И если в контактной информации есть и телефон и ЭлПочта, то все покажет.
30. user618695_ka 10.01.17 18:09 Сейчас в теме
31. user618695_ka 10.01.17 18:30 Сейчас в теме
Ну вот искренне не понимаю..
Прикрепленные файлы:
34. Alex_E 2353 10.01.17 18:40 Сейчас в теме
(31) Ну не понимание налицо - Вам уже несколько раз сказали - этот запрос выдает не одной строкой данные, а там будет столько строк, сколько есть записей в табличной части контрагента. Тут же выводится только первая строка. Сколько их там - в табло посмотрите
Шапка1.Количество()
....

Многих вводит в заблуждение наличие отдельных полей в ТЧ (емейл, там телефон), посмотрите результат запроса в таблице значений (вместо .Выполнить(), наберите .Выгрузить()) или таки воспользуйтесь консолью, тоже не раз советывали))))))....
user618695_ka; +1 Ответить
32. user618695_ka 10.01.17 18:31 Сейчас в теме
Вот телефон и емаил реквизиты одной табличной части. В запросе всё одинаково, но телефон есть, а емэйла нет..
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)