Вход | Регистрация
 

Запрос в базу данных

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

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

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

    //Сообщить("" +Объект.КонтактноеЛицо);

    Сообщить("" +ВыборкаДетальныеЗаписи.Владелец);
    Сообщить("" +ВыборкаДетальныеЗаписи.Наименование);
    Сообщить("" +ВыборкаДетальныеЗаписи.ВладелецНаименование);
    Сообщить("" +РезультатЗапроса);


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

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

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

    Сообщить("" +Объект.КонтактноеЛицо);
    Сообщить("" +ВыборкаДетальныеЗаписи.Владелец);
    Сообщить("" +ВыборкаДетальныеЗаписи.Наименование);
    Сообщить("" +ВыборкаДетальныеЗаписи.ВладелецНаименование);
КонецФункции 


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

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует