Почему не загружаются курсы валют в 1С за выходные дни и что делать, если сервис РБК выдает ошибку?

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В работе бухгалтера и технического специалиста 1С часто возникает ситуация, когда при загрузке курсов валют за определенный период обнаруживаются «пробелы». Типичный пример — отсутствие данных за выходные дни, такие как 11 ноября 2018 года. В этой статье мы подробно разберем, почему это происходит, как устроена логика получения данных от Центрального Банка РФ и что делать, если привычные сервисы (например, РБК) перестают отдавать информацию.

Анализируем логику работы Центрального Банка РФ

Прежде чем искать техническую ошибку в коде 1С или конфигурации, нам необходимо понять, как формируются курсы валют на государственном уровне. Центральный Банк Российской Федерации (ЦБ РФ) устанавливает официальные курсы валют только по рабочим дням. В выходные и праздничные дни новые курсы не назначаются.

Рассмотрим стандартный цикл обновления курсов:

Проанализируем ситуацию пользователя: 11 ноября 2018 года было воскресеньем. Следовательно, отдельной записи в базе самого ЦБ за эту дату просто не существует. Для учетных систем это означает, что должен использоваться последний актуальный курс, установленный ранее (обычно за 10 ноября, который был утвержден еще 9 ноября в пятницу).

Проблема источника данных: РБК против сервисов 1С

В старых конфигурациях 1С и самописных решениях часто использовался сервис cbrates.rbc.ru. Однако со временем этот ресурс стал работать нестабильно, выдавая ошибки 404 Not Found или 500 Internal Server Error. Выясним причину: это связано с изменением политики РБК по предоставлению данных и переходом на новые протоколы взаимодействия.

Если ваша программа 1С настроена на получение данных с РБК, вы можете столкнуться с тем, что за выходные дни файлы просто не формируются на стороне сервера-источника, либо структура запроса больше не поддерживается. Рассмотрим альтернативу — сервисы компании 1С. Начиная с определенных версий БСП (Библиотеки стандартных подсистем), загрузка данных осуществляется через шлюзы 1С, которые агрегируют информацию напрямую с сайта ЦБ РФ и кешируют ее для стабильной отдачи пользователям.

Как проверить настройки в вашей конфигурации

Чтобы исправить ситуацию с загрузкой, нам нужно проверить, какой именно источник данных используется в программе. В современных типовых решениях (БП 3.0, УТ 11, ERP 2) это делается в разделе администрирования. Разберем по шагам:

  1. Перейдем в раздел Справочники — Валюты.
  2. Откроем карточку конкретной валюты (например, USD или EUR).
  3. Проверим переключатель «Загружать из интернета».
  4. Если используется типовая конфигурация, убедимся, что программа подключена к Порталу 1С:ИТС, так как именно это позволяет использовать защищенный и стабильный канал получения курсов от 1С.

Если у вас «самописка» на базе старой БСП, как упоминалось в обсуждении, проблема может быть глубже — в жестко прописанном URL-адресе в коде обработки. Проанализируем, как это можно исправить программно.

Программное решение проблемы для разработчиков

Если вы столкнулись с тем, что стандартная обработка загрузки не справляется, рассмотрим пример того, как можно организовать получение данных напрямую с сайта ЦБ РФ (cbr.ru), используя их XML-сервис. Это надежнее, чем использование сторонних посредников.

Для реализации загрузки нам понадобится объект HTTPСоединение и парсинг полученного XML-файла. Посмотрим на логику формирования запроса:


// Пример формирования запроса к шлюзу ЦБ
Соединение = Новый HTTPСоединение("www.cbr.ru");
АдресРесурса = "scripts/XML_daily.asp?date_req=" + Формат(НужнаяДата, "ДФ=dd/MM/yyyy");
Запрос = Новый HTTPЗапрос(АдресРесурса);
Ответ = Соединение.Получить(Запрос);

Если Ответ.КодСостояния = 200 Тогда
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    // Далее следует логика обхода узлов XML и записи в регистр "КурсыВалют"
КонецЕсли;

Важно помнить, что в 1С РегистрСведений.КурсыВалют является периодическим. Если за 11 число курса нет в файле, система должна уметь брать данные за предыдущий день. Проанализируем ситуацию: если мы программно создадим запись за 11-е число, скопировав данные за 10-е, это решит проблему «пустот» в отчетах, но технически правильнее использовать методы получения последнего значения.

Использование метода ПолучитьПоследнее()

Многие пользователи переживают, что отсутствие записи в регистре именно за 11-11-2018 приведет к ошибкам в документах. Выясним, почему это не так, если обращение к курсу написано правильно. В системе 1С при получении курса из периодического регистра сведений рекомендуется использовать метод ПолучитьПоследнее().

Рассмотрим пример кода, который гарантированно вернет курс, даже если на конкретную дату (выходной) записи нет:


ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Валюта", СсылкаНаВалюту);
КурсНаДату = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ДатаДокумента, ПараметрыОтбора);

Сообщить("Актуальный курс: " + КурсНаДату.Курс);

Этот метод автоматически «просмотрит» историю назад и возьмет значение за пятницу или субботу, если за воскресенье данных нет. Именно так работают все типовые механизмы проведения документов.

Рекомендации по устранению сбоев загрузки

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

  1. Проверьте календарь: Если дата — выходной или праздничный день, отсутствие нового курса в официальных источниках — это норма, а не ошибка.
  2. Смените источник: В настройках загрузки курсов валют переключитесь с РБК на «Сервис 1С». Это обеспечит стабильность даже при изменении структуры сайтов ЦБ.
  3. Обновите БСП: Если вы используете старую конфигурацию, рассмотрите возможность обновления модуля РаботаСКурсамиВалют из состава актуальной Библиотеки стандартных подсистем.
  4. Настройте регламентное задание: Убедитесь, что РегламентныеЗадания по загрузке курсов выполняются ежедневно. Это позволит системе своевременно получать курсы на субботу (которые действуют всё воскресенье).
  5. Проверьте доступность портов: Иногда загрузка блокируется брандмауэром. Убедитесь, что сервер 1С имеет доступ к cbr.ru и 1c.ru по протоколам HTTP/HTTPS.

Таким образом, ситуация с «пропавшими» курсами за 11.11.2018 чаще всего объясняется сочетанием естественного отсутствия данных в выходные дни и технического сбоя на стороне устаревшего шлюза РБК. Переход на современные механизмы 1С и правильное использование программных методов получения данных из регистров полностью решают эту проблему.

← На главную