Как исправить ошибку «Поле курс расчетов не заполнен» при проведении документа «Выдача наличными» в 1С:Бухгалтерия?

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

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

Причины возникновения ошибки

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

  1. Неполное программное заполнение реквизитов при загрузке. Документы создавались во внешней базе и переносились через правила обмена или внешнюю обработку. При интерактивном выборе договора в форме документа программа автоматически проставляет единицы в скрытые реквизиты курса и кратности взаиморасчетов для рублевых договоров. При программной загрузке реквизиты Курс расчетов (Курс взаиморасчетов) и Кратность расчетов (Кратность взаиморасчетов) часто остаются незаполненными (равными 0).
  2. Ужесточение проверок после обновления конфигурации. В более ранних версиях при совпадении валюты регламентированного учета (рубль) и валюты договора проверка курса при проведении могла пропускаться. После обновления типовой конфигурации в алгоритм проведения была добавлена строгая проверка на заполненность числовых значений курсов (значение должно быть строго больше нуля).
  3. Отсутствие записи в регистре курсов валют. В редких случаях в регистре сведений Курсы валют для валюты «Российский рубль» (код 643/810) отсутствует базовая запись с курсом и кратностью, равными 1.

Способ 1. Использование штатной обработки «Групповое изменение реквизитов»

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

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

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

Способ 2. Применение произвольного алгоритма в групповом изменении

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

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


Для Каждого Стр Из Объект.РасшифровкаПлатежа Цикл
    Если Стр.КурсВзаиморасчетов = 0 Тогда
        Стр.КурсВзаиморасчетов = 1;
        Стр.КратностьВзаиморасчетов = 1;
        Стр.СуммаВзаиморасчетов = Стр.СуммаПлатежа;
    КонецЕсли;
КонецЦикла;

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

Способ 3. Пакетное исправление внешней обработкой

Если требуется исправить документы пакетно с одновременным перепроведением через внешнюю обработку, напишем процедуру выборки и перезаписи:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ВыдачаНаличных.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.ВыдачаНаличных КАК ВыдачаНаличных
    |ГДЕ
    |	ВыдачаНаличных.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |	И ВыдачаНаличных.Проведен = ИСТИНА";

Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ПериодС));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ПериодПо));

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
    
    Модифицирован = Ложь;
    Для Каждого СтрокаТЧ Из ДокОбъект.РасшифровкаПлатежа Цикл
        Если СтрокаТЧ.КурсВзаиморасчетов = 0 Тогда
            СтрокаТЧ.КурсВзаиморасчетов = 1;
            СтрокаТЧ.КратностьВзаиморасчетов = 1;
            СтрокаТЧ.СуммаВзаиморасчетов = СтрокаТЧ.СуммаПлатежа;
            Модифицирован = Истина;
        КонецЕсли;
    КонецЦикла;
    
    Если Модифицирован Тогда
        Попытка
            ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
        Исключение
            Сообщить("Ошибка проведения документа: " + Строка(Выборка.Ссылка) + " - " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

Способ 4. Проверка регистра сведений «Курсы валют»

Выясним, корректно ли настроена национальная валюта в информационной базе:

  1. Перейдем в справочник Валюты (раздел Справочники — Покупки и продажи — Валюты).
  2. Откроем валюту Российский рубль.
  3. Перейдем по гиперссылке Курсы валют.
  4. Убедимся, что в регистре есть запись с курсом 1,0000 и кратностью 1. Если записи нет, создадим ее на самую раннюю дату ведения учета.

Как предотвратить проблему при последующих загрузках

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

  1. В обработчике загрузки (например, событие ПослеЗагрузки или процедура заполнения табличной части) обязательно предусмотрим явную инициализацию реквизитов:
    
    СтрокаДокумента.КурсВзаиморасчетов = 1;
    СтрокаДокумента.КратностьВзаиморасчетов = 1;
    СтрокаДокумента.СуммаВзаиморасчетов = СтрокаДокумента.СуммаПлатежа;
    
  2. При создании документа программно вызывайте типовую процедуру модуля объекта Заполнить() или обработку заполнения реквизитов по договору, которая автоматически проставляет параметры валюты и курса по умолчанию.
← На главную