Как загрузить курсы валют офлайн в 1С:Бухгалтерия 3.0?

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

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

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


Способ 1. Перенос данных из интернет-сегмента через XML (без программирования)

Если в вашей организации есть хотя бы один компьютер или «зеркальная» база 1С в сегменте с доступом в интернет, вы можете настроить регулярный экспорт и импорт данных без изменения конфигурации. Для этого мы будем использовать стандартный инструмент — обработку «Универсальный обмен данными в формате XML».

Давайте разберем этот процесс по шагам:

  1. Выгрузка данных из интернет-базы:
    • В базе-источнике (где курсы обновляются регулярно через интернет) откройте обработку «Универсальный обмен данными в формате XML» (ее можно найти на диске ИТС или в составе дистрибутива конвертации данных).
    • Перейдите на вкладку «Выгрузка данных».
    • В качестве объекта выгрузки выберите регистр сведений РегистрыСведений.КурсыВалют.
    • Настройте отбор по периоду (например, за последний месяц или за текущий день) и, если требуется, по конкретным валютам (USD, EUR).
    • Укажите путь для сохранения файла на локальный диск или флеш-накопитель и нажмите кнопку «Выгрузить».
  2. Загрузка в закрытом сегменте:
    • Перенесите полученный XML-файл на физическом носителе в закрытую локальную сеть.
    • В целевой базе «1С:Бухгалтерия» откройте ту же обработку «Универсальный обмен данными в формате XML», но перейдите на вкладку «Загрузка данных».
    • Укажите путь к файлу на вашем локальном компьютере и нажмите кнопку «Загрузить».
    • Все записи регистра сведений за выбранный период будут успешно импортированы.

Способ 2. Автоматизация импорта курсов из XML-файлов Центробанка РФ

Центральный Банк РФ ежедневно публикует актуальные курсы валют в формате XML. Мы можем написать простую внешнюю обработку, которая будет считывать эти файлы и автоматически записывать данные в регистр сведений 1С. Это позволит полностью исключить ручной ввод показателей.

Для начала проанализируем структуру XML-файла, предоставляемого Центробанком. Ссылка для получения ежедневных курсов выглядит следующим образом: XML_daily.asp?date_req=ДД/ММ/ГГГГ. Файл содержит перечень валют, их номиналы и курсы по отношению к рублю.

Рассмотрим пример кода, который выполняет чтение сохраненного файла и запись данных в базу 1С. Этот код вы можете использовать при создании собственной внешней обработки:


Процедура ЗагрузитьКурсыИзФайла(ПутьКФайлу) Экспорт
    
    ФайлНаДиске = Новый Файл(ПутьКФайлу);
    Если Не ФайлНаДиске.Существует() Тогда
        ВызватьИсключение "Указанный файл не найден на диске!";
    КонецЕсли;
    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
    
    // Переходим к чтению структуры документа
    Пока ЧтениеXML.Прочитать() Цикл
        
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Valute" Тогда
            
            КодВалюты = "";
            Номинал = 1;
            КурсЧислом = 0;
            
            // Читаем внутренние элементы узла валюты
            Пока ЧтениеXML.Прочитать() Цикл
                
                Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "Valute" Тогда
                    Прервать;
                КонецЕсли;
                
                Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
                    ИмяЭлемента = ЧтениеXML.Имя;
                    ЧтениеXML.Прочитать(); // Переходим к значению
                    
                    Если ИмяЭлемента = "CharCode" Тогда
                        КодВалюты = СокрЛП(ЧтениеXML.Значение);
                    ИначеЕсли ИмяЭлемента = "Nominal" Тогда
                        Номинал = Число(ЧтениеXML.Значение);
                    ИначеЕсли ИмяЭлемента = "Value" Тогда
                        // Заменяем запятую на точку для корректного преобразования в число
                        СтрокаКурса = СтрЗаменить(ЧтениеXML.Значение, ",", ".");
                        КурсЧислом = Число(СтрокаКурса);
                    КонецЕсли;
                КонецЕсли;
                
            КонецЦикла;
            
            // Если нашли нужную валюту в справочнике, записываем курс
            СсылкаНаВалюту = Справочники.Валюты.НайтиПоКоду(КодВалюты);
            Если Не СсылкаНаВалюту.Пустая() Тогда
                ЗаписатьКурсВРегистр(СсылкаНаВалюту, ТекущаяДата(), КурсЧислом, Номинал);
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЦикла;
    
    ЧтениеXML.Закрыть();
    Сообщить("Загрузка курсов валют успешно завершена!");
    
КонецПроцедуры

Для записи полученных данных в регистр сведений воспользуемся менеджером записи. Проанализируем вспомогательную процедуру ЗаписатьКурсВРегистр, которая предотвратит дублирование данных на одну и ту же дату:


Процедура ЗаписатьКурсВРегистр(ВалютаСсылка, ДатаКурса, ЗначениеКурса, ЗначениеНоминала)
    
    МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Период = НачалоДня(ДатаКурса);
    МенеджерЗаписи.Валюта = ВалютаСсылка;
    
    // Пытаемся прочитать существующую запись
    МенеджерЗаписи.Прочитать();
    
    // Заполняем ресурсы
    МенеджерЗаписи.Курс = ЗначениеКурса;
    МенеджерЗаписи.Кратность = ЗначениеНоминала;
    
    // Записываем данные с замещением существующей строки
    Попытка
        МенеджерЗаписи.Записать(Истина);
    Исключение
        ЗаписьЖурналаРегистрации("Загрузка курсов", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
    КонецПопытки;
    
КонецПроцедуры

Способ 3. Использование альтернативного сервера (при наличии интернета, но без ИТС)

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

В БСП (Библиотеке стандартных подсистем), на которой построена «1С:Бухгалтерия 3.0», разработчики заложили скрытую возможность обхода этой проблемы без изменения программного кода. Выясним, как ее активировать:

  1. Откройте меню «Функции для технического специалиста» (в старых версиях — «Все функции»). Если этот пункт не отображается, включите его в настройках параметров системы (Главное меню — Настройки — Параметры — Отображать команду "Функции для технического специалиста").
  2. В открывшемся дереве объектов раскройте ветку Константы.
  3. Найдите константу «Использовать альтернативный сервер для загрузки курсов валют» (имя в конфигураторе — ИспользоватьАльтернативныйСерверДляЗагрузкиКурсовВалют).
  4. Установите флаг напротив этой константы в положение Истина и сохраните настройки.

Что это дает? После активации этой опции система перестанет обращаться к закрытым серверам авторизации Портала 1С, требующим логин и пароль ИТС. Вместо этого программа будет отправлять запросы напрямую к открытым веб-сервисам РБК или Центробанка РФ. Для успешной загрузки вам потребуется настроить только прокси-сервер в разделе «Администрирование» (если доступ в интернет в вашей компании осуществляется через него).


Резюме

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

← На главную