Имя: Пароль:
1C
1С v8
Получить значение из табличной части
0 Карась
 
13.08.12
09:49
Добрый день!У меня появилась задача для реквизита формы справочника, получить значение должности из табличной части другого справочника. Я пытаюсь вытащить из табличной части справочника значение поля роль контактного лица. Текст запроса пока выглядит так

Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ДоговорыКонтрагентов.а_ВЛице,
       |    КонтактныеЛицаПартнеров.РолиКонтактногоЛица.(
       |        РольКонтактногоЛица
       |    )
       |ИЗ
       |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
       |        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
       |        ПО ДоговорыКонтрагентов.а_ВЛице = КонтактныеЛицаПартнеров.Ссылка";

   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       // Вставить обработку выборки ВыборкаДетальныеЗаписи
   КонецЦикла;

По сути я пытаюсь при выборе контактного лица достать его должность и передать ее в реквизит формы,подскажите пожалуйста как мне обработать результат запроса, и правильно ли я его описала?
1 Карась
 
13.08.12
09:53
Как я понимаю в конструкторе запросов во вкладке условия надо сделать запись, а вот какую, я пока не могу разобраться
2 Карась
 
13.08.12
10:05
Или есть второй вариант сделать пока так

Спр=Справочники.КонтактныеЛицаПартнеров.Выбрать(Объект.Лицо.РолиКонтактногоЛица);
ТП=Спр.РолиКонтактногоЛица.Выгрузить();
спис=Новый СписокЗначений;

Для Каждого ТП Из Спр.РолиКонтактногоЛица Цикл
спис.Добавить(ТП.РольКонтактногоЛица);
КонецЦикла;
3 Карась
 
13.08.12
10:05
Но он пока выдает ошибку
4 andrewks
 
13.08.12
10:10
(0) используй соединение для выборки ТЧ  (по Спр.Ссылка=ТЧ.Ссылка)

используй в выборке сразу нужное тебе поле - должность, чтобы не тянуть потом объект снова из БД.

используй параметр запроса, чтобы получить сразу должность на того человека, который тебе нужен
5 Карась
 
13.08.12
10:36
А если я все же решила иным способом, почему он у меня ругается на строку
ТП=Спр.РолиКонтактногоЛица.Выгрузить();
пишет
{Форма.Форма.Форма(19)}: Значение не является значением объектного типа (Выгрузить)
ТП=Спр.РолиКонтактногоЛица.Выгрузить();
6 andrewks
 
13.08.12
10:40
слово "решила" подразумевает собой некое законченное действие. а у тебя ошибки
7 Карась
 
13.08.12
10:41
(6)Перефразирую, если я хочу попробовать
8 Карась
 
13.08.12
10:42
Просто тем способом, который предложили мне Вы, я похоже совсем не справлюсь, с запросами совсем не лажу((
9 Карась
 
13.08.12
10:44
Я еще совсем в 1 с новичок, месяц всего лишь
10 Карась
 
13.08.12
10:58
Я пытаюсь сделать как здесь
http://www.1c-pro.ru/topic13272.html
11 andrewks
 
13.08.12
11:19
(8) лучше сразу учиться по-нормальному, а то потом переделывать и переделываться будет очень сложно.

итак, для начала: возьми в руки консоль запросов, и отладь там запрос на тестовом значении параметра, убедись, что он выдаст тебе то, что нужно.  
и только потом можно приступать к кодингу
12 Карась
 
13.08.12
11:37
(11)Сделала
Вот так выполняет как надо, находит контактному лицу должность

ВЫБРАТЬ
   ДоговорыКонтрагентов.Контрагент,
   КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка,
   КонтактныеЛицаПартнеровРолиКонтактногоЛица.НомерСтроки,
   КонтактныеЛицаПартнеровРолиКонтактногоЛица.РольКонтактногоЛица,
   КонтактныеЛицаПартнеров.ФизЛицо
ИЗ
   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
       ПО ДоговорыКонтрагентов.а_ВЛице = КонтактныеЛицаПартнеров.Ссылка,
   Справочник.КонтактныеЛицаПартнеров.РолиКонтактногоЛица КАК КонтактныеЛицаПартнеровРолиКонтактногоЛица
13 Карась
 
13.08.12
11:42
Как мне теперь сделать обход результата?
14 Карась
 
13.08.12
11:48
Пока он тянет всех контактных лиц из запроса, где мне лучше установить отбор по конктретному контактному лицу, там же?
15 Rovan
 
гуру
13.08.12
11:49
(0) "для реквизита формы справочника, получить значение должности"
т.е. сам контрагент (ссылка) известен заранее ?
16 Карась
 
13.08.12
11:53
Ну да, я это значение записываю в реквизит а_ВЛице
17 Карась
 
13.08.12
11:54
Я пытаюсь во вкладке условия наложить на него условие, чтобы по нему отбиралось, но пока не выходит
18 Rovan
 
гуру
13.08.12
11:56
(16) ну пиши вручную в запросе

ИЗ
   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
...
ГДЕ
  ДоговорыКонтрагентов.Контрагент = &Контрагент
19 Карась
 
13.08.12
12:00
задала, так ничего не выдает
20 Карась
 
13.08.12
12:15
а все вышло, теперь буду адаптировать под свой случай)
21 Карась
 
13.08.12
13:11
А вот такой вопрос, если я в реквизите Лицо указываю собственно ФИО лица и по нему у меня должна проставляться должность, я описала запрос

Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ДоговорыКонтрагентов.Контрагент,
       |    КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка,
       |    КонтактныеЛицаПартнеровРолиКонтактногоЛица.РольКонтактногоЛица
       |ИЗ
       |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
       |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
       |        ПО ДоговорыКонтрагентов.а_ВЛице = КонтактныеЛицаПартнеров.Ссылка,
       |    Справочник.КонтактныеЛицаПартнеров.РолиКонтактногоЛица КАК КонтактныеЛицаПартнеровРолиКонтактногоЛица
       |ГДЕ
       |    ДоговорыКонтрагентов.Ссылка = &Ссылка
       |
       |СГРУППИРОВАТЬ ПО
       |    ДоговорыКонтрагентов.Контрагент,
       |    КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка,
       |    КонтактныеЛицаПартнеровРолиКонтактногоЛица.РольКонтактногоЛица";

   Запрос.УстановитьПараметр("Ссылка", Объект.Лицо);

   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       // Вставить обработку выборки ВыборкаДетальныеЗаписи
   КонецЦикла;

   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА





           
КонецФункции


Но пока естественно при вводе лица у меня ничего не выходит
22 rasswet
 
13.08.12
13:17
наверное не фио, а ссылку?
23 rasswet
 
13.08.12
13:18
должность это роль контактного лица?
24 Карась
 
13.08.12
13:22
да
25 Карась
 
13.08.12
14:20
Вот так пока сделала, но так он мне находит всех контактных лиц и все должности и выдает последнюю найденную должность, а как мне сделать, чтобы он отобрал именно по тому лицу которое я задала

Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка,
       |    КонтактныеЛицаПартнеровРолиКонтактногоЛица.РольКонтактногоЛица КАК Должность
       |ИЗ
       |    Справочник.КонтактныеЛицаПартнеров.РолиКонтактногоЛица КАК КонтактныеЛицаПартнеровРолиКонтактногоЛица,
       |    Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
       |ГДЕ
       |    КонтактныеЛицаПартнеров.Ссылка = &Ссылка";

   Запрос.УстановитьПараметр("Ссылка", Объект.Лицо);

   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       Должность=ВыборкаДетальныеЗаписи.Должность;
   КонецЦикла;

   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА



   Возврат Должность;
26 Карась
 
13.08.12
14:33
Может мне надо именно после запроса устанавливать условия?
27 Карась
 
13.08.12
15:30
Заработало, вот так

Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    КонтактныеЛицаПартнеровРолиКонтактногоЛица.РольКонтактногоЛица КАК Должность
       |ИЗ
       |    Справочник.КонтактныеЛицаПартнеров.РолиКонтактногоЛица КАК КонтактныеЛицаПартнеровРолиКонтактногоЛица
       |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
       |            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
       |            ПО КонтактныеЛицаПартнеров.Владелец = Партнеры.Ссылка
       |        ПО КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка = КонтактныеЛицаПартнеров.Ссылка
       |ГДЕ
       |    КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка = &КонтактноеЛицо";

   Запрос.УстановитьПараметр("КонтактноеЛицо", Объект.Лицо);

   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       Должность=ВыборкаДетальныеЗаписи.Должность;

   КонецЦикла;

   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА






   Возврат Должность;
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.