Имя: Пароль:
1C
1С v8
Запрос по машинам контрагента
0 Dmitrii_VVV
 
06.06.23
17:48
Всем доброго!

Помогите начинающему с запросом, делаю первый раз
Учебная конфигурацию

Необходимо выбрать Контрагента в поле и при нажатии на кнопку Получить машину в поле машина выводится информация (из регистра сведений Машины)


https://wampi.ru/image/RXRXEnE


&НаКлиенте
Процедура ПолучитьМашину(Команда)
    ПолучитьМашинуНаСервере();
         //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РасходнаяНакладная.Машина КАК Машина,
        |    РасходнаяНакладная.Дата КАК Дата,
        |    МашиныСрезПоследних.Период КАК Период,
        |    МашиныСрезПоследних.Контрагент КАК Контрагент,
        |    МашиныСрезПоследних.Машины КАК Машины
        |ИЗ
        |    Документ.РасходнаяНакладная КАК РасходнаяНакладная,
        |    РегистрСведений.Машины.СрезПоследних(&ДатаДокумента, ) КАК МашиныСрезПоследних
        |ГДЕ
        |    РасходнаяНакладная.СписокНоменклатуры.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("ДатаДокумента", ДатаДокумента);
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    
КонецПроцедуры
1 lubitelxml
 
06.06.23
18:31
Нужно использовать левое соединение в запросе. Основная таблица - РасходнаяНакладная , далее левое соединение с РегистрСведений.Машины по контрагенту
2 azernot
 
06.06.23
19:12
(0) Если предположить, что в РегистрСведений.Машины "Контрагент" - измерение, а "машины" - ресурс, причём имеет тот же тип, что и реквизит "Машина" документа "РасходнаяНакладная", и для одного контрагент не предполагается множество машин в один момент времени,  то код будет такой:

&НаКлиенте
Процедура ПолучитьМашину(Команда)
    ПолучитьМашинуНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПолучитьМашинуНаСервере();
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    МашиныСрезПоследних.Машины КАК Машины
        |ИЗ
        |    РегистрСведений.Машины.СрезПоследних(&ДатаДокумента, Контрагент = &Контрагент) КАК МашиныСрезПоследних";
    
    Запрос.УстановитьПараметр("ДатаДокумента", Объект.Дата);
    Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
        Объект.Машина = ВыборкаДетальныеЗаписи.Машины;
    КонецЕсли;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    
КонецПроцедуры


Если для одного контргента предполагается несколько машин в один момент времени, то надо как-то уточнять задачу.
3 Dmitrii_VVV
 
07.06.23
11:27
Всем спасибо, разбираюсь!
4 Dmitrii_VVV
 
09.06.23
09:34
Коллеги, хелп!
Не разобрался


Вероятно некорректно связь настроил ...
https://wampi.ru/image/RX1N2A0


&НаКлиенте
Процедура ПолучитьМашину(Команда)
    ПолучитьМашинуНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПолучитьМашинуНаСервере();
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    МашиныСрезПоследних.Контрагент КАК Контрагент,
        |    РасходнаяНакладная.Контрагенты КАК Контрагенты
        |ИЗ
        |    Документ.РасходнаяНакладная КАК РасходнаяНакладная
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Машины.СрезПоследних КАК МашиныСрезПоследних
        |        ПО РасходнаяНакладная.Контрагенты = МашиныСрезПоследних.Контрагент";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

  
КонецПроцедуры




Ошибка:
{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(174,11)}: Процедура или функция с указанным именем уже определена (ПолучитьМашинуНаСервере)
Процедура <<?>>ПолучитьМашинуНаСервере(); (Проверка: Сервер)
{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(121,17)}: Тип не определен (Запрос)
    Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент)
{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(169,11)}: Процедура или функция с указанным именем уже определена (ПолучитьМашину)
Процедура <<?>>ПолучитьМашину(Команда) (Проверка: Тонкий клиент)
5 Волшебник
 
09.06.23
09:35
объект Запрос доступен на сервере,
в тонком клиенте недоступен
6 Bigbro
 
09.06.23
09:38
Процедура или функция с указанным именем уже определена
где то задублировали код
7 Dmitrii_VVV
 
09.06.23
10:47
Дубль кода нашёл, ошибок больше не выдаёт, но код всё равно не отрабатывает (
8 Мультук
 
09.06.23
10:54
(7)

Почему не отрабатывает? Он занят очень важным делом, а именно - ничем (см свой же комментарий)

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
9 Dmitrii_VVV
 
09.06.23
14:24
(8) Есть такое! Поправил, но всё равно не отрабатывает

Опишу подробнее...

Машина это реквизит документа Расходная накладная

Контрагенты это так же реквизит данного документа


Есть РС с измерением Контрагент и ресурсом Машины

И непосредственно кнопка, Получить машины

Необходимо, при нажатии на кнопку Получить машину, чтобы в поле машина выводится информация

Форма
https://wampi.ru/image/RX4pwpr
10 azernot
 
09.06.23
14:39
(9) >Есть такое! Поправил, но всё равно не отрабатывает

А что поправили-то? Код в студию!
11 Dmitrii_VVV
 
09.06.23
14:49
&НаКлиенте
Процедура ПолучитьМашину(Команда)
    ПолучитьМашинуНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПолучитьМашинуНаСервере();
        
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    Запрос.Текст =
        "ВЫБРАТЬ
        |    МашиныСрезПоследних.Контрагент КАК Контрагент,
        |    РасходнаяНакладная.Контрагенты КАК Контрагенты
        |ИЗ
        |    Документ.РасходнаяНакладная КАК РасходнаяНакладная
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Машины.СрезПоследних КАК МашиныСрезПоследних
        |        ПО РасходнаяНакладная.Контрагенты = МашиныСрезПоследних.Контрагент
        |ГДЕ
        |    РасходнаяНакладная.Ссылка = &Ссылка";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
            
КонецПроцедуры
12 АгентБезопасной Нацио
 
09.06.23
15:24
попытка очередного доказательства "теоремы о бесконечных обезьянах"?
13 azernot
 
09.06.23
15:42
(11) Ну так сравните с тем, что написано в (2) после РезультатЗапроса.Выбрать(); и до КонецПроцедуры
14 Sneer
 
11.06.23
13:41
(11)
1. Задача 1 - Получить машину, где в запросе получение машины?
2. Задача 2 - Вывести машину в поле машина, где, опять же это действие?
15 Гена
 
11.06.23
16:12
(5) Упс! Спасибо )
16 Dmitrii_VVV
 
13.06.23
16:17
(14) Если подскажете, будет просто великолепно!
17 yurikmellon2
 
13.06.23
16:40
(16) дык что тут подсказывать то?
Ты нафига в запросе строчками
      |    МашиныСрезПоследних.Контрагент КАК Контрагент,
      |    РасходнаяНакладная.Контрагенты КАК Контрагенты
контрагентов то выбираешь? Контрагент тебе нужен только для связи и ты через левое соединение это делаешь.

В запросе должно быть
      |    МашиныСрезПоследних.Автомобиль КАК Автомобиль
или как там у тебя этот реквизит называется


Ну и раз начал в (4) делать конструктором, так и делай. По выборке пройди и получи свой Автомобиль
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       Сообщить(ыборкаДетальныеЗаписи.Автомобиль);
    КонецЦикла;
18 yurikmellon2
 
13.06.23
16:40
+ (17) Сообщить(ВыборкаДетальныеЗаписи.Автомобиль);
19 Dmitrii_VVV
 
13.06.23
17:37
Спасибо, добрый человек, заработало!

А как вывести результат в поле Машина?
сейчас всплывает наименование внизу, при нажатии на кнопку


https://wampi.ru/image/RXaALRt
20 azernot
 
13.06.23
17:39
Ещё всего пара недель переписки, и снова будет выведен код из (2)
:)
21 VismuT
 
13.06.23
17:53
(19) Тебе же написали -
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
        Объект.Машина = ВыборкаДетальныеЗаписи.Машины;
    КонецЕсли; (2)
22 Dmitrii_VVV
 
13.06.23
18:00
(21) Есть такое, невнимательно посмотрел!

Заработало как надо
Всем спасибо!
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан