Получение курса валюты по списку дат

Публикация № 67685

Разработка - Практика программирования

Иногда у меня возникала необходимость в запросе получить значение курсов валют на разные даты, причем заранее список дат неизвестен. Естественно было желание сделать все одним запросом. Буквально вчера нашел я оптимальное решение задачи. Т.к. подобные задачи могут возникать и у других, то решил результат здесь.

Итак исходные условия: любая конфигурация 1с 8, в которой присутствует регистр сведений курсы валют. Для получения списка дат я использовал список периодов валюты Тест1.

Предварительно я заполнил регистр вот такимим данными:

     
Период Валюта Курс
10.03.2010 Тест2 12,0000
12.03.2010 Тест2 142,0000
15.03.2010 Тест2 100,0000
16.03.2010 Тест 20,0000
19.03.2010 Тест2 213,0000
20.03.2010 Тест 40,0000

Обратите внимание: периоды курсов валют различаются, что привносит дополнительные трудности.

Далее собственно запрос:

ВЫБРАТЬ
    КурсыВалют.Курс КАК Курс2,
    КурсыВалют.Период КАК Период2
ПОМЕСТИТЬ Курсы2
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Валюта.Наименование = "Тест2"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВложенныйЗапрос.Период2,
    ВложенныйЗапрос.Период1,
    ВложенныйЗапрос.Курс1,
    Курсы2.Курс2
ИЗ
    (ВЫБРАТЬ
        МАКСИМУМ(Курсы2.Период2) КАК Период2,
        Курсы1.Период1 КАК Период1,
        Курсы1.Курс1 КАК Курс1
    ИЗ
        (ВЫБРАТЬ
            КурсыВалют.Период КАК Период1,
            КурсыВалют.Курс КАК Курс1
        ИЗ
            РегистрСведений.КурсыВалют КАК КурсыВалют
        ГДЕ
            КурсыВалют.Валюта.Наименование = "Тест") КАК Курсы1
            ЛЕВОЕ СОЕДИНЕНИЕ Курсы2 КАК Курсы2
            ПО Курсы1.Период1 >= Курсы2.Период2
   
    СГРУППИРОВАТЬ ПО
        Курсы1.Период1,
        Курсы1.Курс1) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ Курсы2 КАК Курсы2
        ПО ВложенныйЗапрос.Период2 = Курсы2.Период2

А вот результат выполнения запроса:

       
Курс1 Период1 Курс2 Период2
20,0000 16.03.2010 100,0000 15.03.2010
40,0000 20.03.2010 213,0000 19.03.2010

т.е. я получил значение курса второй валюты действовавшее на дату периода установки курса первой валюты.

 

 

 

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. kote 505 21.03.10 15:46 Сейчас в теме
Это то же, что и 2 среза последних на 2ве даты что ли?
Не очень понятно, что это даёт.. дайте пожалуйста пару примеров где это может пригодится..
7. Ivon 639 24.03.10 12:49 Сейчас в теме
(1). Посмотрите мою статью, указанную в 4-м посте, возможно так Вам станет понятнее. На самом деле нужный и полезный прием.
8. Nikola23 423 24.03.10 13:25 Сейчас в теме
(7). указанную статью я видел уже давно.
На мой взгляд - и эта и Ваша статья - одно и тоже, да вот только когда надо я не смог найти уже предложенное Вами решение моего вопроса. Потому сначала сделал сам, а потом выложил на этом сайте.
Предлагаю не начинать обсуждение, чем хорошо ваше решение, или чем хорошо мое - смысла я в этом не вижу. Если лучше все таки Ваше - честь Вам и хвала.
Честно говоря, Ваше решение кажется мне не менее запутанным, чем мое))).
9. Ivon 639 24.03.10 14:51 Сейчас в теме
(8) Посмотреть статью было адресовано kote.
11. echo77 1105 02.02.12 21:37 Сейчас в теме
Уже было. Это называется срез последних на каждую дату в запросе. Например, вот эта публикация http://infostart.ru/public/77568/
В интернете уже достаточно решений данного вопроса.
А соединять два набора данных в СКД с исползованием среза последних - я не рекомендую, т.к. это достаточно медленно работает

(1) Где это можно применить? Например, вы делаете реестр счетов-фактур, часть из которых не рублевые, а валютные. Вам нужен реестр в одной валюте - в рублях. По скольку курсы валют могут быть не на каждую дату, а какие счет-фактуры и на какю дату в валюте сразу и не определишь.
12. Nikola23 423 02.02.12 21:47 Сейчас в теме
(11) echo77, Указанная Вами публикация датирована позже моей. Собственно, мне все-равно.

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

Пример из практики: вывести движения по складу, где суммовая оценка движения товара берется из типов цен. Ест-но значение цены должно получаться на дату движения.

По прошествии времени, понимаю, что привел не всем понятный пример(
13. echo77 1105 03.02.12 06:55 Сейчас в теме
(12) Я только что увидел, что я здесь некропостингом занимаюсь. Не понимаю, как ваша публикация 2010 года всплыла на главной странице...
3. Nikola23 423 21.03.10 18:22 Сейчас в теме
ту 1:
В конкретно этом примере, действительно можно было бы использовать 2 среза последних, однако мне попадались ситуации, когда в запросе необходимо было получить значения периодического регистра сведений или остатков из регистра накопления на различные, заранее не известные наборы дат. Ранее приходилось решать динамическим построением текста запроса.

Пример по другим таблицам, но с использованием того же механизма.
Например используя этот механизм можно построить отчет "Динамика дебиторской задолженности по месяцам" для БП8 в различных валютах. Причем сумма задолженности вычисляется по курсу, действовавшему на конец каждого месяца попавшего в период отчета.
4. Ivon 639 24.03.10 10:55 Сейчас в теме
Вот здесь http://infostart.ru/public/21181/ моя статья с примером-базой, посвященная данному вопросу. Твое решение сильно запутано. Там надо всего 2 запроса: либо один вложенный в другой, либо через одну временную таблицу. У тебя же в примере запросов 4.
5. Nikola23 423 24.03.10 11:21 Сейчас в теме
При желании можно сделать текст этого запроса и с 2мя конструкциями выбор и с 3мя.
Некоторая запутанность обусловлена тем, что я использую 2 периодических регистра сведений.
Как не странно, но с 4мя запросами этот пример отрабатывает приблизительно в 10 раз быстрее, чем с 2мя.))))
6. Ivon 639 24.03.10 12:47 Сейчас в теме
(5) В данном примере я увидел только РегистрСведений.КурсыВалют. Где второй? На самом деле скорость выполнения так же обусловлена построением запроса и его оптимизацией внутри MSSQL. Как сервер оптимизирует запрос - одному Майкрософту известно, но не факт, что он это делает всегда правильно. Конструкции с вложенным запросом и с временной таблицей могут различаться по времени выполнения в разные стороны из-за многих факторов, которые включают в себя так же и то, насколько правильно настроен MSSQL и количество данных, передаваемых между таблицами. Так что быстрее в 10 раз может быть исключительно на твоей системе, а у других может быть так же или медленнее.
10. Nikola23 423 24.03.10 15:09 Сейчас в теме
14. Onemany 12.07.12 17:03 Сейчас в теме
Есть пример применения?
oneman@yandex.ru; +1 Ответить
16. Nikola23 423 12.07.12 17:29 Сейчас в теме
(14), (15) Пример приведен в публикации. Это виртуальный пример. На практике этот кусок кода, обычно, является частью более крупного запроса.
15. oneman@yandex.ru 12.07.12 17:04 Сейчас в теме
Обработка-пример имеется?
17. NoRazum 25 27.09.12 15:54 Сейчас в теме
Без примера очень сложно.
Реальный пример хотя бы из УТ
Оставьте свое сообщение

См. также

[СКД] Программное создание схемы компоновки данных

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    4656    John_d    19       

Базовый курс по разработке мобильных 1C-приложений для Android-устройств. Третий поток. Онлайн-интенсив с 11 февраля по 05 марта 2020 г. Промо

Данный онлайн-курс предусматривает изучение базовых принципов создания приложений для операционной системы Android, работающих на мобильной платформе “1С:Предприятие”. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие” при разработке прикладных решений для “обычных” компьютеров, но пока ещё не занимался разработкой 1С-приложений, предназначенных для работы на мобильных устройствах.

7500 рублей

Базовый курс по управлению ИТ-проектами. Курс проходит с 26 февраля по 22 апреля 2020 года. Промо

Отличительная черта курса - органичное сочетание трех вещей: 1.Теория проектного управления (PMI®+Agile Alliance+Российские ГОСТ+Методологии от 1С); 2. Опыт внедрения продуктов 1С (опыт франчайзи и успешных компаний + тренды Infostart Event и Agile Days); 3. Разбор реальных проблем и рекомендации экспертов по проектам слушателей. Мы будем фиксироваться на тех инструментах, которые реально оказываются полезными в практике руководителей проектов внедрения. Ведущая курса - Мария Темчина.

от 11000 рублей

Агрегатные функции СКД, о которых мало кто знает

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    21154    ids79    45       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

Три костыля. Сказ про фокусы в коде

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    13112    YPermitin    70       

Отслеживание выполнения фонового задания

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции Разработка

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    16464    ids79    16       

INFOSTART MEETUP Krasnodar. 14 февраля 2020 г. Промо

Краснодар станет первым в 2020 году местом, где пройдет региональная встреча IT-специалистов сообщества Инфостарт. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Стоимость участия - 5000 рублей. Цена действительна до 26.12.2019.

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    27278    ids79    34       

Фоновое выполнение кода в 1С - это просто

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    16573    avalakh    21       

Онлайн-курс «Практические аспекты внедрения регламентированного учета и расчета себестоимости в 1С:ERP на крупных промышленных предприятиях» с 17 февраля по 13 марта 2020 года. Промо

Курс рассчитан для подготовки экспертов по регламентированному учету и учету затрат для внедрения на крупных промышленных предприятиях с «исторически сложившимся» учетом

9000 рублей

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    23066    ids79    8       

Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.130.х, КА 2.4.11.х и ERP 2.4.11.х! Промо

Обработка позволяет переносить из УПП 1.3 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления при выходе новых релизов конфигураций 1С.

29700 руб.

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Инструментарий разработчика Практика программирования

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    17462    ids79    27       

Регистры сведений. За кулисами

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    13535    YPermitin    12       

Перенос документов, остатков и справочников КА 1.1 => КА 2 / УТ 11. Обновлено до КА 2.4.12.х и УТ 11.4.11.х! Промо

Более 130 компаний выполнили переход на КА 2 или УТ 11 с помощью нашей разработки! Позволяет перенести не только остатки и справочники (как типовая обработка), но и документы за нужный период времени. Предоставляем техподдержку, оперативно исправляем замечания, выпускаем обновления при выходе новых релизов программ 1С. Вы можете проверить разработку до покупки: сделаем бесплатный тестовый перенос из вашей базы КА 1.1 и предоставим доступ к базе-результату через веб-клиент!

29700 руб.

"Меньше копипаста!", или как Вася универсальную процедуру писал

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    11544    SeiOkami    49       

Создание отчетов с помощью СКД - основные понятия и элементы

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    29083    ids79    17       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    15949    dmurk    144       

Регистры накопления. Структура хранения в базе данных

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    25152    YPermitin    27       

Базовый курс для начинающих 1С-программистов. Пятый поток. Онлайн-курс с 12 февраля по 15 апреля 2020 г. Промо

Данный онлайн-курс является начальной ступенью по изучению базовых принципов программирования в системе “1С:Предприятие” и предназначен для обучения 1С-программированию “с нуля”.

4500/9500 рублей

Выполнение внешней обработки в фоновом задании

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    16019    Eret1k    23       

Выгрузка документа по условию

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    8851    m-rv    2       

Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0"). Обновлен до версий КА 1.1.115.х, УПП 1.3.130.х! Промо

Разработка позволяет перенести остатки по всем счетам бух.учета в программу "1С:Бухгалтерия предприятия 8", ред. 3.0 на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Правила оперативно обновляю при выходе новых релизов. Рассылка обновлений правил бесплатно в течение 12 месяцев. Есть видеодемонстрация проведения переноса данных. Конфигурации при использовании обмена остаются полностью типовыми. Перенос данных возможен в Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую.

24700 руб.

Как прикрутить ГУИД к регистру сведений

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    11866    m-rv    16       

О расширениях замолвите слово...

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    21700    ellavs    125       

Открыто голосование за доклады на INFOSTART MEETUP Krasnodar Промо

Выбирайте и голосуйте за самые интересные доклады, лучшие из них попадут в окончательную программу митапа. Голосование продлится до 30 января 2020 года.

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    17557    ellavs    83       

Трюки с внешними источниками данных

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    19161    YPermitin    53       

INFOSTART MEETUP Kazan. 13 марта 2020 г. Промо

Инфостарт продолжает путешествие по России. Следующая остановка - Казань. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Ждем всех: докладчиков и участников! Стоимость участия - 5 500 рублей. Цена действительна до 30.01.2020

5 500