8.х Запрос

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Эмиль0690, 11 апр 2019.

  1. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    325
    Симпатии:
    2
    Баллы:
    29
    Добрый день!
    Есть два запроса нужно их объединить, подскажите пожалуйста как правильно можно сделать
    Значит есть два договора первый стандартный а второй как vip
    стандартный договор постоянный а vip иногда есть иногда нету,
    когда есть vip договор то берем запрос второй а когда нету то возврат первый зарос

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

    2 запрос (не постоянный)
    Код:
    Функция ПолучитьДоговораСКонтрагентами(Контрагенты,Дата) Экспорт
       
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ДоговораСКонтрагентамиСрезПоследних.ЦенаЗаКуб,
                       |    ДоговораСКонтрагентамиСрезПоследних.ЦенаЗаКг
                       |ИЗ
                       |    РегистрСведений.ДоговораСКонтрагентами.СрезПоследних(&Дата, Контрагенты = &Контрагенты) КАК ДоговораСКонтрагентамиСрезПоследних";
                      
           
        Запрос.УстановитьПараметр("Дата", Дата);
        Запрос.УстановитьПараметр("Контрагенты", Контрагенты);
           
        Результат = Запрос.Выполнить();
       
        ВыборкаДетальныеЗаписи = Результат.Выбрать();
        Результат=Новый Структура("ЦенаЗаКуб,ЦенаЗаКг",0,0);
       
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
           
            Результат.ЦенаЗаКуб=ВыборкаДетальныеЗаписи.ЦенаЗаКуб;
            Результат.ЦенаЗаКг=ВыборкаДетальныеЗаписи.ЦенаЗаКг;
        КонецЦикла;
        Возврат(Результат);
           
    КонецФункции
  2. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    325
    Симпатии:
    2
    Баллы:
    29
    Ребята подскажите пожалуйста
    как обходить если нет цены по договору 2 то берем цены из договор 1
    пример какой нить скиньте пожалуйста
  3. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    724
    Симпатии:
    76
    Баллы:
    54
    Не вникал(извини - времени нет сейчас), но если правильно понял - в один запрос, а дальше воспользуйся конструкцией Выбор Когда Тогда...
  4. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    7.932
    Симпатии:
    513
    Баллы:
    204
    Чтобы соединить два запроса нужно какое то общее поле. В Ваших запросах его нет. В первом склад, во-втором, контрагент.
  5. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    325
    Симпатии:
    2
    Баллы:
    29
    примерно так да?
    Код:
    &НаСервере
    Процедура ПолучательПриИзмененииСервер()
       
        ВЫБОР
       
        КОГДА Результат=Взаиморасчеты.ПолучитьДоговораСКонтрагентами( Объект.Получатель, Объект.Дата);    //Объект.Склад,
       
        Объект.ЦенаПоКубу=Результат.ЦенаЗаКуб;
        Объект.ЦенаПоКг=Результат.ЦенаЗаКг;
        Объект.РеальныаяЦенаПоКубу=Результат.ЦенаЗаКуб;
        Объект.РеальнаяЦенаПоКг=Результат.ЦенаЗаКг;
       
        Объект.ОбщийКуб = Объект.ДлинаСм1*Объект.ШиринаСм2*Объект.ВысотаСм3*Объект.Количество;
        Если Объект.ОбщийКуб*Объект.ЦенаПоКубу>Объект.ОбщийКг*Объект.ЦенаПоКг
            Тогда Объект.Цена = Объект.ЦенаПоКубу
        Иначе Объект.Цена = Объект.ЦенаПоКг
        КонецЕсли;
       
        Если Объект.ОбщийКуб*Объект.ЦенаПоКубу>Объект.ОбщийКг*Объект.ЦенаПоКг
            Тогда Объект.Сумма = Объект.ОбщийКуб*Объект.ЦенаПоКубу
        Иначе Объект.Сумма = Объект.ОбщийКг*Объект.ЦенаПоКг
        КонецЕсли;
       
        // реальная цена и сумма
        Объект.ОбщийКуб = Объект.ДлинаСм1*Объект.ШиринаСм2*Объект.ВысотаСм3*Объект.Количество;
        Если Объект.ОбщийКуб*Объект.РеальныаяЦенаПоКубу>Объект.ОбщийКг*Объект.РеальнаяЦенаПоКг
            Тогда Объект.РеальнаяЦена = Объект.РеальныаяЦенаПоКубу
        Иначе Объект.РеальнаяЦена = Объект.РеальнаяЦенаПоКг
        КонецЕсли;
       
        Если Объект.ОбщийКуб*Объект.РеальныаяЦенаПоКубу>Объект.ОбщийКг*Объект.РеальнаяЦенаПоКг
            Тогда Объект.РеальнаяСумма = Объект.ОбщийКуб*Объект.РеальныаяЦенаПоКубу
        Иначе Объект.РеальнаяСумма = Объект.ОбщийКг*Объект.ЦенаПоКг
        КонецЕсли;
       
        Объект.Разница = Объект.Сумма-Объект.РеальнаяСумма;
       
       
        ТОГДА
       
        Результат=Взаиморасчеты.ПолучитьЦеныНаГрузаПеревозки(Объект.Склад, Объект.Дата);
       
       
        Объект.ЦенаПоКубу=Результат.ЦенаЗаКуб;
        Объект.ЦенаПоКг=Результат.ЦенаЗаКг;
        Объект.РеальныаяЦенаПоКубу=Результат.ЦенаЗаКуб;
        Объект.РеальнаяЦенаПоКг=Результат.ЦенаЗаКг;
       
        Объект.ОбщийКуб = Объект.ДлинаСм1*Объект.ШиринаСм2*Объект.ВысотаСм3*Объект.Количество;
        Если Объект.ОбщийКуб*Объект.ЦенаПоКубу>Объект.ОбщийКг*Объект.ЦенаПоКг
            Тогда Объект.Цена = Объект.ЦенаПоКубу
        Иначе Объект.Цена = Объект.ЦенаПоКг
        КонецЕсли;
       
        Если Объект.ОбщийКуб*Объект.ЦенаПоКубу>Объект.ОбщийКг*Объект.ЦенаПоКг
            Тогда Объект.Сумма = Объект.ОбщийКуб*Объект.ЦенаПоКубу
        Иначе Объект.Сумма = Объект.ОбщийКг*Объект.ЦенаПоКг
        КонецЕсли;
       
        // реальная цена и сумма
        Объект.ОбщийКуб = Объект.ДлинаСм1*Объект.ШиринаСм2*Объект.ВысотаСм3*Объект.Количество;
        Если Объект.ОбщийКуб*Объект.РеальныаяЦенаПоКубу>Объект.ОбщийКг*Объект.РеальнаяЦенаПоКг
            Тогда Объект.РеальнаяЦена = Объект.РеальныаяЦенаПоКубу
        Иначе Объект.РеальнаяЦена = Объект.РеальнаяЦенаПоКг
        КонецЕсли;
       
        Если Объект.ОбщийКуб*Объект.РеальныаяЦенаПоКубу>Объект.ОбщийКг*Объект.РеальнаяЦенаПоКг
            Тогда Объект.РеальнаяСумма = Объект.ОбщийКуб*Объект.РеальныаяЦенаПоКубу
        Иначе Объект.РеальнаяСумма = Объект.ОбщийКг*Объект.ЦенаПоКг
        КонецЕсли;
       
        Объект.Разница = Объект.Сумма-Объект.РеальнаяСумма;
       
        КОНЕЦ
       
    КонецПроцедуры
    
    но ошибки выдает (
    --- Объединение сообщений, 11 апр 2019 ---
    запрос выбор когда тогда нужно записать в общем модуле или же можно модуле форма документа?
  6. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    724
    Симпатии:
    76
    Баллы:
    54
    в коде нельзя использовать язык запроса и наоборот! для этого есть другие конструкции!
    И если занимаетесь 1С 5 год - почитайте хоть какие-нибудь книги по программированию...
  7. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    325
    Симпатии:
    2
    Баллы:
    29
    -Banghead-
    --- Объединение сообщений, 13 апр 2019 в 08:09 ---
    подскажите пожалуйста какие другие конструкции?
    и книгу тоже пожалуйста
  8. TrasserZero
    Offline

    TrasserZero Опытный в 1С

    Регистрация:
    26 окт 2016
    Сообщения:
    64
    Симпатии:
    3
    Баллы:
    29
    Форум поддержки читателей книги "Практическое пособие разработчика. Примеры и типовые приемы". Там и книгу можно скачать и новичкам помогут.
  9. rpashkovsky
    Offline

    rpashkovsky

    Регистрация:
    18 авг 2017
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    ТС, а как ты до этого всё время кодил?
    Книга Хрусталёва - Язык запросов .
    Для объединения используется <Объединить> , или <Объединить все> (ситуативо) В твоем случае , возможно, лучше динамически формировать текст запроса, затем выполнять запрос.
    И да, если надумал объединять - нужны смежные поля,т.е если в первом выбираешь, допустим Номенклатуру и количество, то и во втором должна быть номенклатура и количество.
    конструкции "Если" не применимы для запросов это как справедливо заметили выше
    Относительно конструций выбор когда-тогда - пример на коленке (вариант записи конструкции смотри сам какой предпочтительнее)
    Выбор <выражение>
    когда <Значение1>
    Тогда <выражение1>

    когда <Значение2>
    Тогда <выражение2>
    .....
    Конец

    Или Выбор когда <выражение1> тогда <значение1> иначе <значение2> Конец
    Эти конструкции применяются непосредственно в тексте запроса!
    Последнее редактирование: 14 апр 2019 в 17:37