При работе в конфигурации «1С:Торговля и Склад 7.7» (ТиС) специалисты часто сталкиваются с технической проблемой в регистрах Покупатели и Поставщики. Суть проблемы заключается в том, что новый ресурс ОценкаРуб оказывается незаполненным (содержит нулевые значения), из-за чего при попытке проведения корректировок или зачета авансов система выдает критическую ошибку: «Обнаружен курс списания аванса, отличный от курса принятия аванса к учету». Рассмотрим подробнее, зачем нужен этот ресурс, почему он остается пустым и как привести базу в порядок.
Для начала проанализируем, откуда в старой доброй «семерке» появился этот ресурс. Его внедрение в типовые релизы (начиная с 953–955) было продиктовано изменениями в законодательстве, а именно требованиями ПБУ 3/2006 «Учет активов и обязательств, стоимость которых выражена в иностранной валюте».
Согласно этим правилам, авансы (как выданные, так и полученные) в иностранной валюте или условных единицах переоценке не подлежат. Это означает, что рублевая стоимость аванса фиксируется один раз — в момент его оплаты — и при последующей отгрузке товара или оказании услуги должна быть зачтена именно по тому курсу, который действовал в день оплаты.
Ранее в 1С 7.7 существовал только ресурс СуммаРуб, который пересчитывался регламентным документом ПереоценкаВалюты. Чтобы отделить «замороженную» сумму аванса от текущей задолженности, разработчики ввели ресурс ОценкаРуб. Он выполняет роль «якоря» для рублевого эквивалента валютной суммы аванса.
Разберем, в чем принципиальная разница между этими двумя ресурсами в регистрах учета взаиморасчетов:
ПереоценкаВалюты корректирует это значение, начисляя курсовые разницы.Проанализируем ситуацию, описанную в обсуждении: почему в базе возникают нули и ошибки проведения? Основная причина — некорректное обновление конфигурации. Когда в структуру регистров добавляется новый ресурс, 1С не заполняет его задним числом автоматически во всех исторических записях. Если после обновления не было выполнено полное перепроведение документов, то во всех остатках, перешедших из прошлых периодов, ОценкаРуб будет равна нулю.
Ситуация осложняется, если в организации не принято регулярно восстанавливать последовательность. В этом случае при попытке провести новый документ (например, КорректировкаДолга или Реализация), программа видит, что в регистре числится валютный остаток (например, 100$), а соответствующая ему «Оценка» равна 0. Алгоритм проведения делает проверку:
// Пример упрощенной логики проверки в модуле документа
ОстатокВалюта = Регистр.Покупатели.Остаток(ТекущийКонтрагент, "СуммаВал");
ОстатокОценка = Регистр.Покупатели.Остаток(ТекущийКонтрагент, "ОценкаРуб");
Если (ОстатокВалюта > 0) И (ОстатокОценка == 0) Тогда
Сообщить("Обнаружен курс списания аванса, отличный от курса принятия...");
СтатусВозврата(0);
КонецЕсли;
Программа блокирует проведение, так как не может определить рублевую стоимость аванса, которую нужно списать, чтобы закрыть долг «в ноль».
Как выяснилось в ходе обсуждения, еще одной неочевидной причиной проблем может быть наличие дубликатов в справочнике Валюты. Если в системе созданы две разные валюты с названием «руб.» (одна базовая, а другая — созданная пользователем), программа может начать воспринимать расчеты в «пользовательских рублях» как валютные. В этом случае система будет требовать заполнения ОценкаРуб даже для обычных рублевых договоров.
Для исправления такой ситуации рекомендуется использовать специализированные обработки по поиску и замене дублей, например, repval.ert, которая корректно перебросит ссылки в документах и справочниках на правильную базовую валюту.
Рассмотрим способы восстановления корректного учета в зависимости от состояния вашей базы данных.
Самый правильный с точки зрения методологии 1С способ — это перепроведение документов. Перепроведение заставит алгоритмы типовой конфигурации заново сформировать движения по регистрам, корректно заполнив ресурс ОценкаРуб.
Операции -> Проведение документов.Если перепроведение за несколько лет невозможно из-за закрытых периодов или большого объема данных, необходимо заполнить ресурс технически. Для этого можно использовать Универсальный двигатель регистров или написать простую обработку, которая совершит «технический оборот» по регистру.
Логика исправления должна быть следующей: для всех записей, где СуммаВал не равна нулю, а ОценкаРуб равна нулю, нужно дозаписать в ОценкаРуб значение, равное СуммаРуб (на текущий момент или на дату ввода остатков).
Если ваша организация не ведет расчеты в валюте, убедитесь, что в справочнике Договоры у всех контрагентов:
ВалютаБухУчета — она должна ссылаться на ту же валюту, что указана в договорах.Игнорировать пустой ресурс ОценкаРуб нельзя, так как на нем завязана вся современная логика формирования книги покупок и книги продаж в части НДС с авансов. Попытка «просто обнулить» регистры техническим списанием может привести к расхождениям в отчетности. Оптимальным решением является исправление дублей валют и аккуратное заполнение ресурса значениями СуммаРуб для всех текущих остатков по авансам.