При закрытии месяца, повторном перепроведении документов или штатном обновлении программы 1С:Бухгалтерия 8.3 пользователи нередко сталкиваются с ошибкой: «Поле курс расчетов не заполнен» при проведении документа Выдача наличных (Расходный кассовый ордер). Если открыть документ вручную и заново выбрать договор контрагента, документ проводится успешно. Однако когда таких документов несколько тысяч за прошлые периоды, ручная перезаполненность каждого ордера становится невозможной. Рассмотрим подробнее, почему возникает эта ошибка и как быстро исправить массив документов.
Проанализируем ситуацию, которая приводит к подобному поведению программы:
Курс расчетов (Курс взаиморасчетов) и Кратность расчетов (Кратность взаиморасчетов) часто остаются незаполненными (равными 0).Курсы валют для валюты «Российский рубль» (код 643/810) отсутствует базовая запись с курсом и кратностью, равными 1.Разберем по шагам, как решить проблему без привлечения программиста с помощью встроенного инструмента корректировки данных:
Выдача наличных.Курс расчетов (или Курс взаиморасчетов) — укажем значение 1.Кратность расчетов (или Кратность взаиморасчетов) — укажем значение 1.Расшифровка платежа, переключимся на редактирование строк табличной части и укажем единицы для соответствующих полей.Важно: повторно выбирать конкретные договоры для каждого контрагента не требуется. Достаточно централизованно заполнить числовые значения курсов и кратностей единицами.
Если в табличной части документов кроме курсов не была заполнена и сумма взаиморасчетов, выполним корректировку через произвольный алгоритм встроенного языка в той же обработке Групповое изменение реквизитов.
Откроем Дополнительные параметры обработки, включим режим выполнения произвольного алгоритма и используем следующий программный код:
Для Каждого Стр Из Объект.РасшифровкаПлатежа Цикл
Если Стр.КурсВзаиморасчетов = 0 Тогда
Стр.КурсВзаиморасчетов = 1;
Стр.КратностьВзаиморасчетов = 1;
Стр.СуммаВзаиморасчетов = Стр.СуммаПлатежа;
КонецЕсли;
КонецЦикла;
После выполнения этого скрипта все строки табличной части документа получат корректные значения, и документы смогут быть перепроведены штатной процедурой закрытия месяца.
Если требуется исправить документы пакетно с одновременным перепроведением через внешнюю обработку, напишем процедуру выборки и перезаписи:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВыдачаНаличных.Ссылка КАК Ссылка
|ИЗ
| Документ.ВыдачаНаличных КАК ВыдачаНаличных
|ГДЕ
| ВыдачаНаличных.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ВыдачаНаличных.Проведен = ИСТИНА";
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ПериодС));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ПериодПо));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
Модифицирован = Ложь;
Для Каждого СтрокаТЧ Из ДокОбъект.РасшифровкаПлатежа Цикл
Если СтрокаТЧ.КурсВзаиморасчетов = 0 Тогда
СтрокаТЧ.КурсВзаиморасчетов = 1;
СтрокаТЧ.КратностьВзаиморасчетов = 1;
СтрокаТЧ.СуммаВзаиморасчетов = СтрокаТЧ.СуммаПлатежа;
Модифицирован = Истина;
КонецЕсли;
КонецЦикла;
Если Модифицирован Тогда
Попытка
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить("Ошибка проведения документа: " + Строка(Выборка.Ссылка) + " - " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
Выясним, корректно ли настроена национальная валюта в информационной базе:
Валюты (раздел Справочники — Покупки и продажи — Валюты).1,0000 и кратностью 1. Если записи нет, создадим ее на самую раннюю дату ведения учета.Чтобы ошибка не повторялась при регулярном обмене данными, скорректируем правила обмена или алгоритм внешней обработки загрузки:
ПослеЗагрузки или процедура заполнения табличной части) обязательно предусмотрим явную инициализацию реквизитов:
СтрокаДокумента.КурсВзаиморасчетов = 1;
СтрокаДокумента.КратностьВзаиморасчетов = 1;
СтрокаДокумента.СуммаВзаиморасчетов = СтрокаДокумента.СуммаПлатежа;
Заполнить() или обработку заполнения реквизитов по договору, которая автоматически проставляет параметры валюты и курса по умолчанию.