Уважаемые коллеги, предлагаю обработку «ПолучитьКурсНаКаждыйДень», которая с помощью СКД позволяет получить курс валюты на каждый день. Всё что нужно для получения курса это указать необходимый период и валюту. Далее эти параметры передаются в СКД, который в свою очередь обращается к регистру сведений КурсыВалют и на определённую дату по указанной валюте получает курс. Причём в СКД так же помещается в качестве набора данных «Отчет» таблица значений со списком всех дат за период и данный набор соединяется с набором данных «Запрос» с помощью параметра на закладке «Связи наборов данных» тем самым обеспечивая выполнение запроса к регистру сведений за период. Получение данных возможно и за те периоды, когда курс валюты не указывался (новогодние праздники и т.д.)
Для получения данных необходимо вставить эту обработку в метаданные и использовать функцию «ПолучитьТаблицуКурсов» модуля этой обработки. Причём вариантов получения предусматривается два: первый (по умолчанию) возвращает данные в виде Таблицы значений, второй – табличный документ.
Функция ПолучитьТаблицуКурсов(НачальнаяДата, КонечнаяДата, Валюта, ВТаблицуЗначений = Истина) Экспорт
ТаблицаКурсов = Новый ТаблицаЗначений();
СписокДат.Очистить();
//сформируем список всех дат
Х = 0;
Пока НачальнаяДата + Х*60*60*24 <= КонечнаяДата Цикл
НоваяСтрокаДат = СписокДат.Добавить();
НоваяСтрокаДат.ДатаКурса = НачальнаяДата + Х*60*60*24;
Х = Х + 1;
КонецЦикла;
ВнешниеНаборыДанных = Новый Структура;
//передаём ТЧ в набор данных "объект"
ВнешниеНаборыДанных.Вставить("СписокДат",СписокДат);
СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет("СписокКурсов");
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
//устанавливаем валюту по которой получаем курс
ПараметрДанных1 = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[1];
ПараметрДанных1.Значение = Валюта;
ПараметрДанных1.Использование = Истина;
Настройки = КомпоновщикНастроек.Настройки;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
//Определимся какой макет нам необходим: для вывода в коллекцию или в табличный документ
Если ВТаблицуЗначений Тогда
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборыДанных);
ТаблицаКурсов = Новый ТаблицаЗначений();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаКурсов);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Иначе
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
ТаблицаКурсов = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТаблицаКурсов);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецЕсли;
Возврат ТаблицаКурсов;
КонецФункции
Также в комплекте прилагается обработка «ПолучитьКурсыИзОбработки», которая (в качестве примера) вызывает функцию из обработки получения курсов и выводит их в таблицу значений на форме или в табличный документ на форме.
Данные обработки тестировались на системе ERP 2.4.5.143, но подойдут для всех конфигураций, использующих БСП.