При обновлении конфигурации 1С:ERP до версий 2.5.11 и выше многие пользователи и разработчики столкнулись с критической ошибкой проведения документов, таких как Авансовый отчет или Приобретение товаров и услуг. Система прерывает процесс со ссылкой на Регистр сведений: Суммы документов в валютах учета, сообщая о нарушении уникальности записей. Давайте разберем, почему возникает этот конфликт и какими способами мы можем его устранить.
Данная ошибка сигнализирует о том, что алгоритм проведения пытается добавить в Регистр сведений запись, которая уже существует. Это происходит из-за того, что при расчете движений документа система создает дублирующие записи в служебном регистре СуммыДокументовВВалютахУчета. В частности, это часто вызвано особенностями учета денежных средств у подотчетных лиц, где развернутые остатки в разрезе Цель выдачи приводят к коллизиям при попытке записи данных системой.
Самым эффективным и «чистым» способом решения проблемы, не требующим вмешательства в код или выполнения сложных обработок, является изменение настроек системы. Этот метод заставляет 1С более строго и корректно обрабатывать движения по подотчетным суммам.
После активации этого признака алгоритм проведения документов пересчитывает движения с учетом новых правил, что позволяет избежать формирования дублей. Обратите внимание, что включение этой опции может потребовать от вас актуализации или инвентаризации ранее оформленных документов, если учет подотчетных средств велся без детализации по целям.
Если активация контроля целей не приводит к желаемому результату, или же бизнес-процессы компании не позволяют использовать данный метод, разработчики 1С предлагают вариант со сверткой записей в регистре СуммыДокументовВВалютахУчета. Этот метод подразумевает техническую очистку регистра от дублей, возникших из-за некорректного развертывания данных при обновлении конфигурации.
Важно: Данный метод является радикальным. Мы рекомендуем выполнять его только после создания резервной копии информационной базы и в присутствии квалифицированного специалиста.
Суть свертки заключается в поиске записей с идентичными ключевыми полями (регистратор, период, валюта) и объединении их в одну запись с суммированием значений. В коде 1С это может выглядеть как использование набора записей регистра:
// Пример логики обработки записей регистра
НаборЗаписей = РегистрыСведений.СуммыДокументовВВалютахУчета.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
НаборЗаписей.Прочитать();
// Здесь выполняется анализ записей и их свертка
НаборЗаписей.Записать();
Как показывает практика, даже при обновлении до версий 2.5.12 и выше, ошибка может сохраняться, если данные в базе уже «испорчены» некорректными записями, созданными до внесения исправлений в сам код конфигурации. Система пытается провести документ, опираясь на существующие записи в регистрах, и наталкивается на конфликт.
В такой ситуации мы рекомендуем предпринять следующие шаги:
Расходного кассового ордера (выдачи средств). Это позволит системе пересчитать движения с нуля, используя исправленные алгоритмы текущего релиза.Авансовый отчет. Убедитесь, что поле Объект расчетов заполнено корректно. Ошибки в этом поле часто приводят к тому, что при записи данных в СуммыДокументовВВалютахУчета возникают некорректные измерения, вызывающие конфликт.Расширение конфигурации, добавив обработчик в метод ПередЗаписью или ОбработкаПроведения, чтобы принудительно очищать конфликтующие записи перед записью документа.Помните, что регистр СуммыДокументовВВалютахУчета является служебным и играет ключевую роль в расчете себестоимости и отражении финансовых результатов. Любые ручные манипуляции с ним должны быть обоснованы и протестированы на копии базы данных.