Как исправить ошибку «При пересчете из валюты 'RUB' в валюту '' обнаружен нулевой курс» при загрузке выписки в 1С

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

Приветствуем вас, уважаемые коллеги! При работе с обработкой автоматической загрузки банковских выписок из систем «Клиент-Банк» специалисты и бухгалтеры нередко сталкиваются со странной и крайне неприятной ошибкой: «При пересчете из валюты 'RUB' в валюту '' обнаружен нулевой курс. Пересчет не произведен!». Параллельно в окне сообщений выводится информация о том, что целевой документ (например, исходящее платежное поручение) не был создан из-за ошибок при записи в информационную базу.

Ситуация на первый взгляд кажется парадоксальной: расчетный счет организации ведется в рублях, контрагент отечественный, платеж стандартный (например, налоговый), и ранее аналогичные операции загружались без каких-либо затруднений. Почему же система вдруг начинает «требовать» курс для несуществующей или пустой валюты? Давайте подробно разберем эту проблему по шагам, выясним неочевидные технические причины и рассмотрим проверенные практические способы её решения.

Причина 1. Сбой автонумерации документов в 1С (Основной фактор)

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

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

Однако перед самой отменой транзакции или в процессе выполнения обработчиков событий ПередЗаписью и ПриЗаписи платформа пытается выполнить регламентные проверки и расчеты. В этот момент некоторые реквизиты объекта (включая ссылки на валюту договора или счета) могут быть не до конца инициализированы или сброшены в пустую ссылку. Алгоритм проведения натыкается на пустую целевую валюту, пытается получить её курс и выдает ложное сообщение о нулевом курсе. Эта ошибка маскирует истинную проблему — конфликт уникальности номеров.

Давайте разберем по шагам, как восстановить корректную автонумерацию документов:

  1. Откройте журнал документов «Платежные поручения исходящие» (или «Списания с расчетного счета», в зависимости от вашей конфигурации).
  2. Отсортируйте список по колонке «Номер» в хронологическом порядке за текущий год.
  3. Проанализируйте последние созданные документы. Ищите номера, которые были изменены вручную. Например, если стандартный шаблон номера выглядит как «Гм00000456», а кто-то вручную ввел номер «Гм00000456-1» или нарушил длину лидирующих нулей («Гм456»), автонумератор платформы сбивается и не может автоматически назначить следующий порядковый номер.
  4. Вручную отредактируйте последние «сбойные» номера документов, вернув их к стандартному шаблону (например, убрав лишние символы в конце номера, чтобы освободить диапазон для автоматического назначения).
  5. Если документов со сбитыми номерами слишком много, выполните перенумерацию документов за текущий период с помощью стандартных групповых обработок или напишите простую программную процедуру.

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


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

Причина 2. Зарегистрированная ошибка конфигурации 1С (Код ошибки: 30009619)

В типовых конфигурациях 1С (особенно прошлых поколений, таких как «Управление производственным предприятием 1.3» или «Комплексная автоматизация 1.1») существует официально зарегистрированный баг с кодом 30009619.

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

Даже если вы визуально замечаете эту нестыковку в форме предварительного просмотра выписки и вручную меняете вид операции перед нажатием кнопки «Выполнить загрузку», в коде обработки при непосредственной программной записи объекта все равно срабатывает жестко зашитый алгоритм, который ищет реквизиты, характерные для перевода между счетами. Поскольку валюта второго (несуществующего) расчетного счета не определена, возникает ошибка пересчета в пустую валюту.

Давайте рассмотрим пути решения этой проблемы:

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

Причина 3. Незаполненная валюта в карточке расчетного счета организации

Давайте проанализируем еще одну частую причину сбоя — настройки справочника банковских счетов организации. Программа 1С при чтении выписки сопоставляет банковские реквизиты, указанные в файле импорта, с карточками счетов в вашей базе данных.

Если в карточке расчетного счета вашей организации по какой-то причине не заполнено поле «Валюта учета» или значение этого реквизита «слетело» при обновлении либо некорректном обмене данными, алгоритм загрузки получит пустую ссылку вместо валюты. Программа попытается пересчитать сумму платежа из валюты документа (RUB) в валюту счета (которая пуста), что мгновенно приведет к ошибке нулевого курса.

Выполним проверку реквизитов счета по шагам:

  1. Перейдите в меню «Справочники» — «Организации».
  2. Откройте карточку организации, по которой не загружается выписка.
  3. Перейдите на вкладку или по ссылке «Банковские счета».
  4. Найдите в списке и откройте карточку того расчетного счета, по которому происходит загрузка.
  5. Убедитесь, что в поле «Валюта» явно указано значение RUB (или руб.). Если поле пустое, выберите валюту из классификатора и сохраните изменения в карточке счета.

Причина 4. Проблемы с валютой в договоре контрагента

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

Если у контрагента, по которому проводится платеж, в базе данных создан договор по умолчанию, но в нем не заполнена (или очищена) валюта расчетов, программа при попытке проведения платежа столкнется с конфликтом. Алгоритм проведения попытается пересчитать сумму платежа из рублей в валюту взаиморасчетов по договору. Поскольку валюта договора пустая (''), система выдаст нам уже знакомое сообщение об ошибке нулевого курса.

Давайте проверим договоры контрагентов по шагам:

  1. Откройте справочник «Контрагенты» и найдите партнера, платеж по которому вызвал сбой при загрузке.
  2. Перейдите в список договоров этого контрагента.
  3. Откройте договор, который программа подставляет в документ (обычно это договор с признаком «Основной»).
  4. Проверьте реквизит «Валюта расчетов». В нем обязательно должно быть установлено значение RUB. Если поле пустое или содержит неверную валюту, исправьте значение и запишите договор.

Причина 5. Отсутствие записи курса валюты RUB в регистре сведений

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

Иногда при импорте архивных документов за прошлые периоды или при операциях будущей датой программа обращается к регистру курсов на дату документа. Если на эту дату (или на более раннюю дату, выполняющую роль начальной точки отсчета) в регистре нет записи по рублю с курсом 1 и кратностью 1, функция получения курса вернет пустые параметры. Это приведет к ошибке нулевого курса при пересчете.

Проверим и исправим записи в регистре сведений:

  1. Через меню «Все функции» (или «Функции для технического специалиста») откройте регистр сведений «Курсы валют».
  2. Сделайте отбор по валюте RUB (код 643 или 810).
  3. Убедитесь, что в регистре есть хотя бы одна историческая запись с курсом «1» и кратностью «1». Желательно, чтобы дата этой записи была как можно более ранней (например, 01.01.1980), чтобы перекрывать любые возможные даты документов в вашей базе данных.
  4. Если такой записи нет, создайте её вручную, заполнив поля: Валюта — RUB, Курс — 1, Кратность — 1, Период — 01.01.1980.

Использование отладчика для локализации проблемы (для программистов)

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

  1. Запустите базу 1С в режиме Конфигуратора от имени администратора.
  2. Откройте модуль обработки загрузки выписки (обычно это обработка ПредприятиеКлиент или общий модуль РаботаСВалютами).
  3. Найдите функцию получения курса валюты (например, ПолучитьКурсИКратность()) и установите точку останова в самом начале этой функции.

Пример отладочного кода в процедуре пересчета валюты выглядит следующим образом:


Функция ПолучитьКурсИКратность(Валюта, Дата) Экспорт
    Если Не ЗначениеЗаполнено(Валюта) Тогда
        // Точка останова сработает здесь, когда вместо валюты передается ''
        ЗаписатьВЖурналРегистрации("ОшибкиЗагрузки", УровеньЖурналаРегистрации.Ошибка,,, "Пустая валюта при пересчете!");
        Возврат Неопределено;
    КонецЕсли;
    ...
КонецФункции

Запустите отладку (клавиша F5), откройте обработку загрузки выписки в режиме предприятия и запустите процесс импорта. Когда выполнение программы прервется на вашей точке останова, откройте табло (Ctrl + Alt + W) и проанализируйте стек вызовов. Вы увидите, какая именно процедура верхнего уровня передала пустую валюту в качестве параметра.

Резюме и план действий по устранению ошибки

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

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

← На главную