Получение курса валюты за период с помощью СКД

04.02.20

Разработка - СКД

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Получить курс валюты за период с помощью СКД.:
.zip 13,60Kb
2 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Уважаемые коллеги, предлагаю обработку «ПолучитьКурсНаКаждыйДень», которая с помощью СКД позволяет получить курс валюты на каждый день. Всё что нужно для получения курса это указать необходимый период и валюту. Далее эти параметры передаются в СКД, который в свою очередь обращается к регистру сведений КурсыВалют и на определённую дату по указанной валюте получает курс. Причём в СКД так же помещается в качестве набора данных «Отчет» таблица значений со списком всех дат за период и данный набор соединяется с набором данных «Запрос» с помощью параметра на закладке «Связи наборов данных» тем самым обеспечивая выполнение запроса к регистру сведений за период. Получение данных возможно и за те периоды, когда курс валюты не указывался (новогодние праздники и т.д.)

Для получения данных необходимо вставить эту обработку в метаданные и использовать функцию «ПолучитьТаблицуКурсов» модуля этой обработки. Причём вариантов получения предусматривается два: первый (по умолчанию) возвращает данные в виде Таблицы значений, второй – табличный документ.

Функция ПолучитьТаблицуКурсов(НачальнаяДата, КонечнаяДата, Валюта, ВТаблицуЗначений = Истина) Экспорт
	
	ТаблицаКурсов = Новый ТаблицаЗначений();
	СписокДат.Очистить();
	//сформируем список всех дат
	Х = 0;
	Пока НачальнаяДата + Х*60*60*24 <= КонечнаяДата Цикл
		НоваяСтрокаДат = СписокДат.Добавить();
		НоваяСтрокаДат.ДатаКурса = НачальнаяДата + Х*60*60*24;		
		Х = Х + 1;
	КонецЦикла;
	
	ВнешниеНаборыДанных = Новый Структура;
	//передаём ТЧ в набор данных "объект"
	ВнешниеНаборыДанных.Вставить("СписокДат",СписокДат);                          
	
	СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет("СписокКурсов");        
	Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;                       

	КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
	КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
	
	//устанавливаем валюту по которой получаем курс
	ПараметрДанных1 = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[1]; 
	ПараметрДанных1.Значение = Валюта;
	ПараметрДанных1.Использование = Истина;
	
	Настройки = КомпоновщикНастроек.Настройки;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	//Помещаем в переменную данные о расшифровке данных
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
	
	//Определимся какой макет нам необходим: для вывода в коллекцию или в табличный документ 
	Если ВТаблицуЗначений Тогда
		МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
		ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
		ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборыДанных);	
		
		ТаблицаКурсов = Новый ТаблицаЗначений();
		ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
		ПроцессорВывода.УстановитьОбъект(ТаблицаКурсов);
		ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	Иначе
		МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
		ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
		ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
		
		ТаблицаКурсов = Новый ТабличныйДокумент;
		ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
		ПроцессорВывода.УстановитьДокумент(ТаблицаКурсов);
		ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	КонецЕсли;
	
	Возврат ТаблицаКурсов;
	
КонецФункции

Также в комплекте прилагается обработка «ПолучитьКурсыИзОбработки», которая (в качестве примера) вызывает функцию из обработки получения курсов и выводит их в таблицу значений на форме или в табличный документ на форме.

Данные обработки тестировались на системе ERP 2.4.5.143, но подойдут для всех конфигураций, использующих БСП.

Вступайте в нашу телеграмм-группу Инфостарт

Курс валюта СКД

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    247612    1363    421    

1134

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    5297    295    shapa_pro    25    

66

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    16259    ovetgana    112    

105

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    9425    krasnoshchekovpavel    5    

67

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    8637    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    15688    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.

24.12.2024    13248    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    9776    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kniga888 04.02.20 17:23 Сейчас в теме
А о способе получения списка дат в запросе не слышал?

Например:
ВЫБРАТЬ
   0 КАК Цифра
ПОМЕСТИТЬ ВТ_Цифры

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   9
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
   НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ) КАК ДеньПериода
ПОМЕСТИТЬ ТаблицаДат

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, ВТ_Цифры_Разряд1.Цифра + 10 * ВТ_Цифры_Разряд2.Цифра + 100 * ВТ_Цифры_Разряд3.Цифра + 1000 * ВТ_Цифры_Разряд4.Цифра), ДЕНЬ)
ИЗ
   ВТ_Цифры КАК ВТ_Цифры_Разряд1,
   ВТ_Цифры КАК ВТ_Цифры_Разряд2,
   ВТ_Цифры КАК ВТ_Цифры_Разряд3,
   ВТ_Цифры КАК ВТ_Цифры_Разряд4
ГДЕ
   НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, ВТ_Цифры_Разряд1.Цифра + 10 * ВТ_Цифры_Разряд2.Цифра + 100 * ВТ_Цифры_Разряд3.Цифра + 1000 * ВТ_Цифры_Разряд4.Цифра), ДЕНЬ) <= &КонецПериода

ИНДЕКСИРОВАТЬ ПО
   ДеньПериода
;
Показать
wowik; 1C_Koding; +2 Ответить
2. KawaNoNeko 120 05.02.20 13:01 Сейчас в теме
(1) Слышал. Принципа действия обработки это не меняет. Оптимизация спорна. Делал так как было удобно. Можешь поменять по своему усмотрению - код открытый.
Для отправки сообщения требуется регистрация/авторизация