Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 09:42

Помогите с запросом

Автор Марфа22, 01 дек 2014, 23:45

0 Пользователей и 1 гость просматривают эту тему.

Марфа22

Нужно вывести все данные, которые записаны в регистре сведений по выбранной валюте.
Например, если на 01,01,2014 курс 45, 01,02,2014 курс 50. Нужно что бы запрос выводил 45,50.
Есть запрос, но он выводит только последний курс валют.
ВЫБРАТЬ
КурсыВалютСрезПоследних.Курс,
КурсыВалютСрезПоследних.Кратность
ИЗ
РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта) КАК КурсыВалютСрезПоследних"

дфтын

ненадо срез послдених
просто регистрСведений.КурсВалют
и период еще вытащите. ну в конструкторе запроса посомтрите

ColonelAp4u

ВЫБРАТЬ
   КурсыВалют.Период,
   КурсыВалют.Курс
ИЗ
   РегистрСведений.КурсыВалют КАК КурсыВалют
выводит дата курс

sertak

В 1С нет такого агрегата, чтобы через запятую все значения ресурсов вывести. Да и в Transact-SQL даже нет. Выводите в ТЗ и через обычный код соединяйте в строку.
Добавлено: 02 дек 2014, 09:49


Примерно так:

ТЗКурсыВалют = Запрос.Выполнить().Выгрузить();
СписокКурсов = "";
Для Каждого СтрокаТЗ Из ТЗКурсыВалют Цикл
    СписокКурсов = Строка(СтрокаТЗ.Курс) + ",";
КонецЦикла;


Марфа22

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

Kironten

Ну воспользуйтесь такой конструкцией, если вам период нужен:
КурсыВалют.Период Между &ДатаНачала И &ДатаОкончания   

KKurgan

Совершенно верно, ведь в запросе:
      |ГДЕ
      |   КурсыВалют.Период = &Период";
т.е. запрашивается курс, соответствующий конкретной дате. Если нужны все существовавшие курсы по конкретной валюте следует в условиях вместо отбора по периоду указывать условие по виду валюты.

sertak

Цитата: Марфа22 от 01 дек 2014, 23:45
Например, если на 01,01,2014 курс 45, 01,02,2014 курс 50. Нужно что бы запрос выводил 45,50.
Ответ следует из вопроса: какой период нужен, такой и укажите. Ну или вообще не фильтруйте по периоду, чтобы вывести всю историю.
И, как вам посоветовали, зарежьте по валюте.
ВЫБРАТЬ
      |   КурсыВалют.Курс
      |ИЗ
      |   РегистрСведений.КурсыВалют КАК КурсыВалют
      |ГДЕ
      |   КурсыВалют.Валюта= &Валюта";

KrivosheevEV

Цитата: Марфа22 от 02 дек 2014, 12:37
   ...
Таким запросом выводится только последнее значение в регистре сведений

Потому что один раз был создан запрос, один раз была передана в него дата, один раз он выдал последнее значение на указанную дату.

Ученикам в тестовых заданиях использовать запрос в цикле категорически запрещено. Если необходимо выбрать все имеющиеся значения за указанный период, то воспользуйтесь советом выше: укажите нужную периодичность в запросе.

Добавлено: 02 дек 2014, 13:22


В РегистреСведений нельзя указать периодичность.

Марфа22

Цитата: Kironten от 02 дек 2014, 12:46
Ну воспользуйтесь такой конструкцией, если вам период нужен:
КурсыВалют.Период Между &ДатаНачала И &ДатаОкончания
А что записать в параметры &ДатаНачала и &ДатаОкончания?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск