Имя: Пароль:
1C
 
Запрос в базу данных
,
0 кабанчик
 
08.04.19
21:34
Здравствуйте, объясните мне, правильно ли я делаю запрос?
&НаСервере
Функция КонтактноеЛицоПриИзмененииНаСервере()
    //КонтрагентВладелец = Объект.КонтактноеЛицо.ПолучитьОбъект();    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоступлениеТоваров.Контрагент КАК Контрагент,
        |    ПоступлениеТоваров.КонтактноеЛицо КАК КонтактноеЛицо
        |ИЗ
        |    Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
        |ГДЕ
        |    ПоступлениеТоваров.Контрагент.Родитель = &КонтрагентВладелец";
    Запрос.УстановитьПараметр("КонтрагентВладелец",Объект.КонтактноеЛицо);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Объект.Контрагент = ВыборкаДетальныеЗаписи.Контрагент;
КонецФункции

Есть поле КонтакноеЛицо, исходя из того, что там выберем в другое поле Контрагент присвоить название его.
1 runoff_runoff
 
08.04.19
21:48
постановка задачи так себе..
2 palsergeich
 
08.04.19
21:52
СПОТЫКНЕТСЯ ТУТ  Объект.Контрагент
3 RomanYS
 
08.04.19
21:53
(0) Не такого существует сценария для которого это код верен. А так да, сначала бы задачу описать, а не попытку написать решение
4 Garykom
 
гуру
08.04.19
21:57
(2) Ну забыл .Следующий() бывает.

(3) Да сценарий то понятен, вот решение подкачало не факт что в выборке только один контрагента.
5 Garykom
 
гуру
08.04.19
21:58
(4)+ Хотя там и 0 контрагентов может быть
6 piter3
 
08.04.19
22:00
Да кто тебя знает,что хочешь получить
7 RomanYS
 
08.04.19
22:05
(4) >>Да сценарий то понятен
поведай
>>не факт что в выборке
в этой выборке не может быть ничего, контактное лицо не может быть родителем для контрагента. Только в ооочень извращенных конфигурациях
8 Garykom
 
гуру
08.04.19
22:21
(7) Ну вдруг там контактные лица это те же контрагенты только иерархия элементов. Что извращение согласен.
9 кабанчик
 
08.04.19
22:40
Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("КонтактЛицо",Объект.КонтактноеЛицо);
Запрос.Текст =
        "ВЫБРАТЬ
        |   КонтактныеЛица.Владелец КАК Владелец,
        |   КонтактныеЛица.Наименование КАК Наименование,
        |   КонтактныеЛица.Владелец.Наименование КАК ВладелецНаименование
        |ИЗ
        |   Справочник.КонтактныеЛица КАК КонтактныеЛица
        |ГДЕ
        |   КонтактныеЛица.Наименование = &КонтактЛицо";
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    //Объект.Контрагент = ВыборкаДетальныеЗаписи.Владелец.Наименование;
    //Сообщить("" +Объект.КонтактноеЛицо);
    Сообщить("" +ВыборкаДетальныеЗаписи.Владелец);
    Сообщить("" +ВыборкаДетальныеЗаписи.Наименование);
    Сообщить("" +ВыборкаДетальныеЗаписи.ВладелецНаименование);
    Сообщить("" +РезультатЗапроса);


Не знаю, как скрины кинуть сюда, было бы сразу понятно. В общем есть справочники Контрагенты и КонтактныеЛица. У КонтакногоЛица стоит владелец Контрагент. Данные все записаны и везде указано всё.
А мне нужно сделать, чтобы когда я выбирал КонтактноеЛицо, то в другое поле автоматически записывался Контрагент.
10 Garykom
 
гуру
08.04.19
22:48
Если Контрагенты владельцы Контактных Лиц то твоя задачка решается в одну строчку кода без всяких запросов.
Чтобы при выборе КонтактногоЛица в документе в реквизит заодно засунуть Контрагента.

Объект.Контрагент = Объект.КонтактноеЛицо.Владелец;
11 кабанчик
 
08.04.19
22:55
У меня стоит задача решить это через табличную форму. Этот способ я знаю.
12 Garykom
 
гуру
08.04.19
22:57
Мне кажется кому то пора пить таблетки...
13 Fram
 
08.04.19
23:02
(11) при изменении элемента контактного лица пишешь (10)

(12) не надо так нервничать. ТС ещё только учиться
14 Fram
 
08.04.19
23:03
Пардон.. тся
15 кабанчик
 
08.04.19
23:14
Можете на примере в коде показать, как? Уже устал танцы с бубном проводить. Задачу поставил куратор в прохождении курсов.
&НаСервере
Функция КонтактноеЛицоПриИзмененииНаСервере()    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("КонтактЛицо",Объект.КонтактноеЛицо);
    Запрос.Текст =
        "ВЫБРАТЬ
        |    КонтактныеЛица.Владелец КАК Владелец,
        |    КонтактныеЛица.Наименование КАК Наименование,
        |    КонтактныеЛица.Владелец.Наименование КАК ВладелецНаименование
        |ИЗ
        |    Справочник.КонтактныеЛица КАК КонтактныеЛица
        |ГДЕ
        |    КонтактныеЛица.Наименование = &КонтактЛицо";
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    //Объект.Контрагент = ВыборкаДетальныеЗаписи.Владелец.Наименование;
    Сообщить("" +Объект.КонтактноеЛицо);
    Сообщить("" +ВыборкаДетальныеЗаписи.Владелец);
    Сообщить("" +ВыборкаДетальныеЗаписи.Наименование);
    Сообщить("" +ВыборкаДетальныеЗаписи.ВладелецНаименование);
КонецФункции


&НаКлиенте
Процедура КонтактноеЛицоПриИзменении(Элемент)
    КонтактноеЛицоПриИзмененииНаСервере();
КонецПроцедуры
16 Garykom
 
гуру
08.04.19
23:20
(13) мне надо, от нервов ))
17 vicof
 
08.04.19
23:36
|ГДЕ
|    КонтактныеЛица.Ссылка = &КонтактЛицо";

Если ВыборкаДетальныеЗаписи.Следующий() Тогда

    Объект.Контрагент = ВыборкаДетальныеЗаписи.Владелец;

КонецЕсли;
18 Garykom
 
гуру
08.04.19
23:42
(17) Объясните до меня не доходит, зачем делать выборку из Справочник.КонтактныеЛица по условию КонтактныеЛица.Ссылка = &КонтактЛицо ?
19 hhhh
 
08.04.19
23:46
(18) когда пишем

Объект.Контрагент = Объект.КонтактноеЛицо.Владелец;

в базу отправляется точно такой же запрос. Неявно. Так что тут без разницы. Если хочет, пусть пишет.
20 NUser
 
09.04.19
07:43
(1)))
21 кабанчик
 
09.04.19
09:31
Подскажите почему мы указываем "Ссылка", а не "Наименование"? При сравнении в запросе.
22 кабанчик
 
09.04.19
09:32
(18) Спасибо большое. Объясни ещё, выше вопрос задал, чтобы понимал
23 Fram
 
09.04.19
22:13
(21) потому что Наименование не может однозначно идентифицировать объект данных. для этого придумали ссылку. она уникальна. ну, должна быть по крайней мере
24 palsergeich
 
09.04.19
22:47
(21) Потому что внезапно записей в таблице с одним наименованием может быть несколько, и это нормально.
Пример ФИО людей, совершенно нормально, что в РФ будет больше одного человека с ФИО Иванов Иван Иванович.
По этому указатель на конкретную строчку в БД является именно ссылкой, которая по факту является Уникальным на уровне конкретной таблицы значением.