8.х Запрос по курсам валют

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

  1. TopicStarter Overlay
    Allizar
    Offline

    Allizar Опытный в 1С

    Регистрация:
    24 сен 2006
    Сообщения:
    413
    Симпатии:
    0
    Баллы:
    26
    В одном из документов я добавил реквизит ВалютаПечатнойФормы (тип Справочник.Валюты). Далее, чтобы получить курс и кратность соответствующей валюты я написал вот такой запрос:

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

    Не забываем использовать тэг
    Код:
    [/color]
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    1. Не понял вот этого:
    Код:
    "...
    |ГДЕ
    | ПлатежноеПоручениеИсходящее.Номер В (КурсыВалют.Период)";
    
    
    2. Судя по всему - запрос не содержит записей.
  3. TopicStarter Overlay
    Allizar
    Offline

    Allizar Опытный в 1С

    Регистрация:
    24 сен 2006
    Сообщения:
    413
    Симпатии:
    0
    Баллы:
    26
    Про первый пункт забудьте - сам понял, что не правильно.
    А вот по поводу записей не очень понимаю: записи в регистре сведений есть или вы о чем-то другом?
    Что нужно поправить в запросе, чтобы получить все же курс и кратность.
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Посколько голова сегодня уже совсем не соображает - не в состоянии ничего разбирать :)

    А по поводу записей: запрос, который выполняется не содержит записей (может из-за неверного условия или соединения, например), а может и из-за отсутствия записей в РС...
  5. igkr
    Offline

    igkr

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

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Э... А зачем, вообще, велосипед изобретать?
    Код:
    // Возвращает курс валюты на дату
    //
    // Параметры:
    //  Валюта     - Валюта (элемент справочника "Валюты")
    //  ДатаКурса  - Дата, на которую следует получить курс
    //
    // Возвращаемое значение: 
    //  Структура, содержащая:
    //   Курс      - курс валюты
    //   Кратность - кратность валюты
    //
    Функция ПолучитьКурсВалюты(Валюта, ДатаКурса) Экспорт
    
    Структура = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ДатаКурса, Новый Структура("Валюта", Валюта));
    Возврат Структура;
    
    КонецФункции // ПолучитьКурсВалюты()
    
    
    
  7. TopicStarter Overlay
    Allizar
    Offline

    Allizar Опытный в 1С

    Регистрация:
    24 сен 2006
    Сообщения:
    413
    Симпатии:
    0
    Баллы:
    26

    Вообщем, в конечном итоге, так и поступил (воспользовался методом Получить последнее). Хотя научное любопытство начинающего програмиста осталось неудовлетворённым.
  8. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Я к тому написал, что это функция из типовой конфигурации :)

Поделиться этой страницей