При работе в конфигурации 1С:Бухгалтерия предприятия 3.0 пользователи нередко сталкиваются с ситуацией, когда при попытке проведения документа Корректировка реализации система выдает критическую ошибку. Текст ошибки гласит: «Поле "Договор" заполнено некорректно. Валюта документа () отличается от валюты регламентированного учета (Руб.) и валюты расчетов по договору "Основной договор" (Руб.)». Особое коварство этой проблемы заключается в том, что в интерфейсе программы все поля могут выглядеть заполненными, а валюта в договоре и самом документе визуально совпадает.
В этой статье мы подробно разберем, почему возникает такая ситуация, особенно при использовании в качестве основания объекта Документ расчетов с контрагентом (ручной учет), и какими способами можно восстановить работоспособность системы. Мы пройдем путь от простой проверки реквизитов до анализа структуры базы данных.
Проанализируем ситуацию: пустые скобки в сообщении Валюта документа () прямо указывают на то, что программный код 1С не может получить значение валюты из объекта-основания. Когда вы выбираете Документ расчетов с контрагентом (ручной учет), система обращается к его реквизиту Валюта. Если этот документ был создан программно, перенесен из другой базы через обработку обмена или создан в старых релизах с ошибками, поле валюты в базе данных может содержать значение Null или ПустаяСсылка.
Даже если в списке выбора вы видите надпись «руб.», это может быть лишь визуальным представлением или результатом работы экранных форм, в то время как физически в таблице базы данных поле остается пустым. Рассмотрим подробнее основные методы решения этой проблемы.
Первым делом нам необходимо выяснить, действительно ли поле валюты заполнено в объекте-основании на уровне базы данных. Поскольку обычная форма документа может скрывать реальное положение дел, мы воспользуемся стандартной обработкой. Посмотрим на алгоритм действий:
Документ расчетов с контрагентом (ручной учет).Валюта. Если в колонке «Значение» пусто — это и есть причина ошибки.Валюта, выберем значение «руб.» и нажмем кнопку «Изменить реквизиты».После этой манипуляции объект в базе данных будет обновлен, и Корректировка реализации сможет корректно прочитать валюту документа-основания.
Иногда проблема кроется не в самом документе, а в его проводках. Если «Документ расчетов» использовался в ручных операциях, система при проведении корректировки пытается сопоставить остатки по счетам (например, 60.01 или 62.01). Выясним причину через анализ регистра бухгалтерии:
Проанализируем записи в регистре Хозрасчетный по данному документу. Бывают случаи, когда в проводке по счету расчетов заполнено субконто «Контрагент» и «Договор», но поле Валюта в самой строке движений регистра осталось незаполненным. В типовых конфигурациях для рублевых расчетов валюта в проводках часто не указывается, но механизм корректировки реализации в БП 3.0 крайне чувствителен к наличию связи между валютой договора и валютой расчетов в документе-основании.
Если вы обнаружили пустую валюту в проводках, попробуйте перепровести документ-основание или, если это ручная операция, принудительно указать валюту «руб.» в табличной части движений.
Рассмотрим еще один сценарий: программный сбой при выборе договора. Иногда в форме документа Корректировка реализации данные о валюте кэшируются некорректно. Разберем по шагам, как «встряхнуть» механизмы автоматического заполнения:
Корректировка реализации.Документ расчетов с контрагентом в качестве основания.Такая процедура часто заставляет систему заново инициализировать программные модули, такие как РаботаСВалютами.ПолучитьКурсВалюты() или обработчики события ПриИзменении, которые могли не отработать должным образом при первом создании документа.
Если стандартные средства не помогают, проанализируем ситуацию программно. Мы можем написать небольшой фрагмент кода, чтобы проверить содержимое реквизитов объекта напрямую. Это исключит влияние визуального интерфейса.
// Пример кода для проверки валюты документа-основания
ДокОснование = Документы.ДокументРасчетовСКонтрагентом.НайтиПоНомеру("00001", Дата);
Если ДокОснование.Пустая() Тогда
Сообщить("Документ не найден");
Иначе
Сообщить("Валюта в БД: " + ДокОснование.ВалютаДокумента);
Если НЕ ЗначениеЗаполнено(ДокОснование.ВалютаДокумента) Тогда
ОбъектОснование = ДокОснование.ПолучитьОбъект();
ОбъектОснование.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб.");
ОбъектОснование.Записать();
Сообщить("Валюта успешно установлена");
КонецЕсли;
КонецЕсли;
Этот код позволяет быстро выявить отсутствие ссылки на валюту и программно её восстановить. Обратите внимание, что название реквизита может варьироваться (Валюта или ВалютаДокумента) в зависимости от конкретной версии метаданных.
Выясним причину возможного сбоя в глобальных настройках. В редких случаях ошибка Валюта документа () возникает из-за дублирования валют в справочнике или некорректных настроек валюты регламентированного учета (рубля).
Проанализируем справочник Валюты. Убедитесь, что для валюты с кодом 643 (или 810) установлены следующие параметры:
Если в системе присутствуют две валюты с названием «руб.», и в договоре выбрана одна, а в документе расчетов — другая, система выдаст ошибку несоответствия, даже если названия идентичны. Рекомендуется воспользоваться стандартной обработкой Поиск и удаление дублей для объединения таких записей.
Подводя итог, можно сказать, что ошибка «Валюта документа ()» — это почти всегда признак физического отсутствия ссылки в реквизите объекта Документ расчетов с контрагентом (ручной учет). Решение заключается в принудительном заполнении этого поля через Групповое изменение реквизитов или программную обработку. Мы рассмотрели все основные пути диагностики, от интерфейсных до низкоуровневых, что позволит вам оперативно устранить проблему и провести документ корректировки.