Обращение к табличной части в запросе
Код запроса:
Ошибка: поле объекта "Представление" не найдено.
Вопрос: как правильно обратиться к этим данным?
Запрос1 = Новый Запрос();
Запрос1.УстановитьПараметр("ТекущийДокумент", ТекущийДокумент);
Запрос1.Текст =
"ВЫБРАТЬ
| ПриемИПередачаВРемонт.Контрагент.КонтактнаяИнформация.(
| Представление КАК Представление,
| АдресЭП КАК АдресЭП,
| НомерТелефона КАК НомерТелефона
| )КАК ЧтоТо
|ИЗ
| Документ.ПриемИПередачаВРемонт КАК ПриемИПередачаВРемонт
|ГДЕ
| ПриемИПередачаВРемонт.Ссылка = &ТекущийДокумент";
Шапка1 = Запрос1.Выполнить().Выбрать();
Шапка1.Следующий();
ОбластьМакета.Параметры.Контрагент = Шапка1.ЧтоТо.Представление;
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.ЧтоТо.АдресЭП;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.ЧтоТо.НомерТелефона;
ПоказатьОшибка: поле объекта "Представление" не найдено.
Вопрос: как правильно обратиться к этим данным?
По теме из базы знаний
Найденные решения
(22) Максимумы помогли, спасибо)
Запрос1 = Новый Запрос();
Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент.КонтактноеЛицо);
Запрос1.Текст =
"ВЫБРАТЬ
| МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.АдресЭП) КАК АдресЭП,
| МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.НомерТелефона) КАК НомерТелефона,
| КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление КАК Представление
|ИЗ
| Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаКонтактнаяИнформация
|ГДЕ
| КонтактныеЛицаКонтактнаяИнформация.Ссылка = &Ссылка
|СГРУППИРОВАТЬ ПО
| КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление";
Шапка1 = Запрос1.Выполнить().Выбрать();
Шапка1.Следующий();
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.НомерТелефона;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.АдресЭП;
ПоказатьОстальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) вы на выходе в поле "ЧтоТо" получаете таблицу значений, соответственно обращаться нужно ОбластьМакета.Параметры.Контрагент = Шапка1.ЧтоТо[0].Представление (или выгрузить ее и обойти циклом). В таком случае лучше сделать проверку что ТЗ не пуста.
А вообще проще "ВЫБРАТЬ Т.Контрагент.КонтактнаяИнформация.Представление, Т.Контрагент.КонтактнаяИнформация.Представление, Т.Контрагент.КонтактнаяИнформация.АдресЭП,Т.Контрагент.КонтактнаяИнформация.НомерТелефона ИЗ Документ.ПриемИПередачаВРемонт КАК Т ГДЕ Т.Ссылка = &ТекущийДокумент"
А вообще проще "ВЫБРАТЬ Т.Контрагент.КонтактнаяИнформация.Представление, Т.Контрагент.КонтактнаяИнформация.Представление, Т.Контрагент.КонтактнаяИнформация.АдресЭП,Т.Контрагент.КонтактнаяИнформация.НомерТелефона ИЗ Документ.ПриемИПередачаВРемонт КАК Т ГДЕ Т.Ссылка = &ТекущийДокумент"
(5) Вариант 1: ошибка "Поле Контрагент не найдено".
Вариант 2: ошибок нет. результата тоже, но похоже это уже совсем другая история..
"ВЫБРАТЬ
| Т.Контрагент.КонтактнаяИнформация.Представление,
| Т.Контрагент.КонтактнаяИнформация.АдресЭП,
| Т.Контрагент.КонтактнаяИнформация.НомерТелефона
|ИЗ
| Документ.ПриемИПередачаВРемонт КАК Т
|ГДЕ
| Т.Ссылка = &ТекущийДокумент";
Шапка1 = Запрос1.Выполнить().Выбрать();
Шапка1.Следующий();
ОбластьМакета.Параметры.Контрагент = Шапка1.Контрагент.КонтактнаяИнформация.Представление;
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.Контрагент.КонтактнаяИнформация.АдресЭП;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.Контрагент.КонтактнаяИнформация.НомерТелефона;
ПоказатьВариант 2: ошибок нет. результата тоже, но похоже это уже совсем другая история..
"ВЫБРАТЬ
| Т.Контрагент.КонтактнаяИнформация.Представление КАК Представление,
| Т.Контрагент.КонтактнаяИнформация.АдресЭП КАК АдресЭП,
| Т.Контрагент.КонтактнаяИнформация.НомерТелефона КАК НомерТелефона
|ИЗ
| Документ.ПриемИПередачаВРемонт КАК Т
|ГДЕ
| Т.Ссылка = &ТекущийДокумент";
Шапка1 = Запрос1.Выполнить().Выбрать();
Шапка1.Следующий();
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.АдресЭП;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.НомерТелефона;
ПоказатьПрикрепленные файлы:
У меня кровь из глаз идет уже.
ВЫБРАТЬ
КонтактнаяИнформация.Ссылка.Представление КАК Контрагент,
КонтактнаяИнформация.АдресЭП,
КонтактнаяИнформация.НомерТелефона
ИЗ
Справочник.Контрагенты.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
КонтактнаяИнформация.Ссылка = &Ссылка
Запрос.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент);
Может так?
ВЫБРАТЬ
КонтрагентыКонтактнаяИнформация.Представление,
КонтрагентыКонтактнаяИнформация.НомерТелефона,
КонтрагентыКонтактнаяИнформация.АдресЭП
ИЗ
Документ.ПриемИПередачаВРемонт КАК ПриемИПередачаВРемонт
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ПО ПриемИПередачаВРемонт.Контрагент = КонтрагентыКонтактнаяИнформация.Ссылка
ГДЕ
ПриемИПередачаВРемонт.Ссылка = &ТекущийДокумент
ПоказатьВЫБРАТЬ
| ПриемИПередачаВРемонт.Представление КАК Представление,
| ПриемИПередачаВРемонт.АдресЭП КАК АдресЭП,
| ПриемИПередачаВРемонт.НомерТелефона КАК НомерТелефона
|ИЗ
| Документ.ПриемИПередачаВРемонт.КонтактнаяИнформация КАК ПриемИПередачаВРемонт
|ГДЕ
| ПриемИПередачаВРемонт.Ссылка = &ТекущийДокумент"
Шапка1 = Запрос1.Выполнить().Выбрать();
Шапка1.Следующий();
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.АдресЭП;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.НомерТелефона;
Показать
Вариант 2: ошибок нет. результата тоже, но похоже это уже совсем другая история..
Ну как бы контактная информация это табличная часть (если мы говорим о типовых конфах), поэтому в ней может быть несколько строк: отдельно строкой номер телефона, отдельно емаэйл и т.д. Все зависит от полей "тип" и "вид". Поэтому для начала сделайте следующее:
И посмотрите в отладчике что лежит в этой таблице. А дальше будет видно что и откуда брать (если конечно таблица не пуста).
ЗЫ: по вашему "не рабочему" варианту, конечно он не рабочий, кто сказал, что в результате запроса должно быть поле "контрагент"? Ну и самому обозначать алиасы полей - не лишнее дело.
"ВЫБРАТЬ
| Т.Контрагент.КонтактнаяИнформация.Представление КАК Представление,
| Т.Контрагент.КонтактнаяИнформация.АдресЭП КАК АдресЭП,
| Т.Контрагент.КонтактнаяИнформация.НомерТелефона КАК НомерТелефона
|ИЗ
| Документ.ПриемИПередачаВРемонт КАК Т
|ГДЕ
| Т.Ссылка = &ТекущийДокумент";
Шапка1 = Запрос1.Выполнить().Выбрать();
Шапка1.Следующий();
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.АдресЭП;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.НомерТелефона;
ПоказатьНу как бы контактная информация это табличная часть (если мы говорим о типовых конфах), поэтому в ней может быть несколько строк: отдельно строкой номер телефона, отдельно емаэйл и т.д. Все зависит от полей "тип" и "вид". Поэтому для начала сделайте следующее:
"ВЫБРАТЬ
| Т.Контрагент.КонтактнаяИнформация.Представление КАК Представление,
| Т.Контрагент.КонтактнаяИнформация.АдресЭП КАК АдресЭП,
| Т.Контрагент.КонтактнаяИнформация.НомерТелефона КАК НомерТелефона
|ИЗ
| Документ.ПриемИПередачаВРемонт КАК Т
|ГДЕ
| Т.Ссылка = &ТекущийДокумент";
ТаблицаКИ = Запрос1.Выполнить().Выгрузить();
ПоказатьИ посмотрите в отладчике что лежит в этой таблице. А дальше будет видно что и откуда брать (если конечно таблица не пуста).
ЗЫ: по вашему "не рабочему" варианту, конечно он не рабочий, кто сказал, что в результате запроса должно быть поле "контрагент"? Ну и самому обозначать алиасы полей - не лишнее дело.
Так.. Спасибо всем огромное, всё пробую, но пока результат не достигнут..
Вот текущий код:
Представление заполняется, а вот адрес и номер телефона из табличной части нет..
Вот текущий код:
Запрос1 = Новый Запрос();
Запрос1.УстановитьПараметр("ТекущийДокумент", ТекущийДокумент);
Запрос1.Текст =
"ВЫБРАТЬ
| Т.Контрагент.КонтактноеЛицо.Представление КАК Представление,
| Т.Контрагент.КонтактноеЛицо.КонтактнаяИнформация.АдресЭП КАК АдресЭП,
| Т.Контрагент.КонтактноеЛицо.КонтактнаяИнформация.НомерТелефона КАК НомерТелефона
|ИЗ
| Документ.ПриемИПередачаВРемонт КАК Т
|ГДЕ
| Т.Ссылка = &ТекущийДокумент";
Шапка1 = Запрос1.Выполнить().Выбрать();
Шапка1.Следующий();
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.АдресЭП;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.НомерТелефона;
ПоказатьПредставление заполняется, а вот адрес и номер телефона из табличной части нет..
(16) нельзя как в (8).
{Документ.ПриемИПередачаВРемонт.МодульМенеджера(1357)}: Поле объекта не обнаружено (Представление)
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
Так работают эти люди (ремонт ноутбуков), только одно контактное лицо и всегда есть. у них уже база на 10к клиентов, везде так..
Код попробовал. Потом чуть поправил, но не помогло..
{Документ.ПриемИПередачаВРемонт.МодульМенеджера(1357)}: Поле объекта не обнаружено (Представление)
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
Так работают эти люди (ремонт ноутбуков), только одно контактное лицо и всегда есть. у них уже база на 10к клиентов, везде так..
Код попробовал. Потом чуть поправил, но не помогло..
Запрос1 = Новый Запрос();
Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент);
Запрос1.Текст =
"ВЫБРАТЬ
| КонтактныеЛицаКонтактнаяИнформация.АдресЭП КАК АдресЭП,
| КонтактныеЛицаКонтактнаяИнформация.НомерТелефона КАК НомерТелефона,
| КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление КАК Представление
|ИЗ
| Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаКонтактнаяИнформация
|ГДЕ
| КонтактныеЛицаКонтактнаяИнформация.Ссылка = &Ссылка";
Шапка1 = Запрос1.Выполнить().Выбрать();
Шапка1.Следующий();
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.АдресЭП;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.НомерТелефона;
Показать
(18) в начале было: ПриемИПередачаВРемонт.Контрагент.КонтактнаяИнформация.
Теперь контактные лица.
Вот для КонтактныеЛица:
Теперь контактные лица.
Вот для КонтактныеЛица:
Запрос1 = Новый Запрос();
Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент.КонтактноеЛицо);
Запрос1.Текст =
"ВЫБРАТЬ
| КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление КАК Представление,
| МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.АдресЭП) КАК АдресЭП,
| МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.НомерТелефона) КАК НомерТелефона
|ИЗ
| Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаКонтактнаяИнформация
|ГДЕ
| КонтактныеЛицаКонтактнаяИнформация.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление";
Шапка1 = Запрос1.Выполнить().Выбрать();
Если Шапка1.Следующий() Тогда
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление; // тут контактное лицо, или таки контрагент нужен?
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.НомерТелефона;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.АдресЭП;
КонецЕсли;
Показать
Повторяю. Табличная часть - одна. Телефон может быть в одной строке, емаил - в другой. При открытии карточки контрагента (у меня в УТ по крайней мере) по этой табличной части проходится цикл и заполняются поля формы. Попробуй сделать как в (22) - вытащить максимумы по этим полям и сгруппировать по ссылке. Или по представлению, если даст.
(22) Максимумы помогли, спасибо)
Запрос1 = Новый Запрос();
Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент.КонтактноеЛицо);
Запрос1.Текст =
"ВЫБРАТЬ
| МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.АдресЭП) КАК АдресЭП,
| МАКСИМУМ(КонтактныеЛицаКонтактнаяИнформация.НомерТелефона) КАК НомерТелефона,
| КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление КАК Представление
|ИЗ
| Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаКонтактнаяИнформация
|ГДЕ
| КонтактныеЛицаКонтактнаяИнформация.Ссылка = &Ссылка
|СГРУППИРОВАТЬ ПО
| КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление";
Шапка1 = Запрос1.Выполнить().Выбрать();
Шапка1.Следующий();
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.НомерТелефона;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.АдресЭП;
Показать
(15) если достаточно только одного номера телефона и эл. почты:
Запрос1 = Новый Запрос();
Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент);
Запрос1.Текст =
"ВЫБРАТЬ
| КонтактнаяИнформация.Ссылка.Представление КАК Контрагент,
| МАКСИМУМ(КонтактнаяИнформация.АдресЭП) КАК АдресЭП,
| МАКСИМУМ(КонтактнаяИнформация.НомерТелефона) КАК НомерТелефона
|ИЗ
| Справочник.Контрагенты.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| КонтактнаяИнформация.Ссылка.Представление";
Шапка1 = Запрос1.Выполнить().Выбрать();
Если Шапка1.Следующий() Тогда
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.НомерТелефона;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.АдресЭП;
КонецЕсли;
Показать
(20) Спасибо! Взлетело! Ну.. почему-то кроме Email-а
Запрос1 = Новый Запрос();
Запрос1.УстановитьПараметр("Ссылка", ТекущийДокумент.Контрагент.КонтактноеЛицо);
Запрос1.Текст =
"ВЫБРАТЬ
| КонтактныеЛицаКонтактнаяИнформация.АдресЭП КАК АдресЭП,
| КонтактныеЛицаКонтактнаяИнформация.НомерТелефона КАК НомерТелефона,
| КонтактныеЛицаКонтактнаяИнформация.Ссылка.Представление КАК Представление
|ИЗ
| Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаКонтактнаяИнформация
|ГДЕ
| КонтактныеЛицаКонтактнаяИнформация.Ссылка = &Ссылка";
Шапка1 = Запрос1.Выполнить().Выбрать();
Шапка1.Следующий();
ОбластьМакета.Параметры.Контрагент = Шапка1.Представление;
ОбластьМакета.Параметры.ТелефонКонтрагента = Шапка1.НомерТелефона;
ОбластьМакета.Параметры.EmailКонтрагента = Шапка1.АдресЭП;
Показать
(31) Ну не понимание налицо - Вам уже несколько раз сказали - этот запрос выдает не одной строкой данные, а там будет столько строк, сколько есть записей в табличной части контрагента. Тут же выводится только первая строка. Сколько их там - в табло посмотрите ....
Многих вводит в заблуждение наличие отдельных полей в ТЧ (емейл, там телефон), посмотрите результат запроса в таблице значений (вместо .Выполнить(), наберите .Выгрузить()) или таки воспользуйтесь консолью, тоже не раз советывали))))))....
Шапка1.Количество()
Многих вводит в заблуждение наличие отдельных полей в ТЧ (емейл, там телефон), посмотрите результат запроса в таблице значений (вместо .Выполнить(), наберите .Выгрузить()) или таки воспользуйтесь консолью, тоже не раз советывали))))))....
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день