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

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].Представление (или выгрузить ее и обойти циклом). В таком случае лучше сделать проверку что ТЗ не пуста.
А вообще проще "ВЫБРАТЬ Т.Контрагент.КонтактнаяИнформация.Представление, Т.Контрагент.КонтактнаяИнформация.Представление, Т.Контрагент.КонтактнаяИнформация.АдресЭП,Т.Контрагент.КонтактнаяИнформация.НомерТелефона ИЗ Документ.ПриемИПередачаВРемонт КАК Т ГДЕ Т.Ссылка = &ТекущийДокумент"
Drak0n; +1
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 Сейчас в теме
(21) именно так и есть.
+
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 Сейчас в теме
(26) 22 не вышло. Согласен.
+
29. spacecraft 10.01.17 17:54 Сейчас в теме
(28) вот только не надо, что не вышло. Если код в (25) отрабатывает, то и в (22) отработает.
И если в контактной информации есть и телефон и ЭлПочта, то все покажет.
+
30. user618695_ka 10.01.17 18:09 Сейчас в теме
(29) ну может я рукожоп)
+
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 Сейчас в теме
Вот телефон и емаил реквизиты одной табличной части. В запросе всё одинаково, но телефон есть, а емэйла нет..
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот