Как правильно пересчитать суммы в регистре «Контролируемые сделки организаций» и почему суммы в валюте и рублях могут совпадать?

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

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

Анализируем работу «Помощника подготовки уведомления»

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

  1. Основной массив данных генерируется через «Помощник подготовки уведомления о контролируемых сделках».
  2. Если пользователь просто перепровел первичный документ, это далеко не всегда приводит к автоматическому пересчету сумм в налоговом регистре.
  3. Для обновления данных необходимо зайти в Помощник и нажать кнопку «Сформировать список сделок» или «Обновить». Именно в этот момент срабатывают алгоритмы пересчета валют.

Проанализируем ситуацию: если мы правим запрос в конфигураторе, но не запускаем процедуру обновления в Помощнике, мы видим старые «закешированные» данные. Программа может использовать временные таблицы, сформированные на момент последнего запуска регламентной операции.

Разбираемся в механизме определения курса валюты

Согласно ст. 105.14 НК РФ, для целей налогового контроля суммовые критерии рассчитываются по особым правилам. Выясним причину, почему стандартный пересчет может отличаться от ожидаемого бухгалтером:

В типовых конфигурациях 1С для контролируемых сделок используется курс ЦБ РФ на дату совершения сделки (обычно это дата перехода права собственности или дата документа). Однако здесь есть важный нюанс, связанный с авансами. В обычном бухгалтерском учете (согласно ПБУ 3/2006) часть стоимости, оплаченная авансом, фиксируется по курсу на дату аванса. Но для уведомления о контролируемых сделках 1С часто реализует расчет без учета правил ПБУ 3/2006, то есть пересчитывает всю сумму по курсу на дату документа. Если в вашем случае курс все равно не подтягивается, нужно проверить настройки в справочнике Валюты.

Проверяем системные причины идентичности сумм (Валюта = Рубли)

Если в регистре суммы в валюте и в рублях совпадают (например, 100 USD превращаются в 100 RUB), давайте проанализируем следующие возможные ошибки:

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

Изучаем программный аспект: где происходит расчет

Если вы — разработчик и вам все же нужно программно вмешаться в процесс, важно понимать, где именно в коде происходит формирование сумм. Рассмотрим типичную структуру вызовов. Заполнение регистра обычно вынесено в модуль менеджера регистра накопления или специализированные общие модули.

Обратите внимание на функцию ЗаполнитьСуммыВРублях (название может незначительно отличаться в зависимости от версии конфигурации). Проанализируем примерный алгоритм, который использует система:


// Пример логики пересчета в модуле
Процедура ЗаполнитьСуммыВРублях(СтрокаСделки, ПараметрыЗаполнения)
    КурсВалюты = ПолучитьКурсНаДату(СтрокаСделки.Валюта, СтрокаСделки.ДатаСделки);
    СтрокаСделки.СуммаВРублях = СтрокаСделки.СуммаВВалюте * КурсВалюты.Курс / КурсВалюты.Кратность;
    // Расчет суммы без НДС
    СтрокаСделки.СуммаБезНДСВРублях = РасчитатьСуммуБезНДС(СтрокаСделки.СуммаВРублях, СтрокаСделки.СтавкаНДС);
КонецПроцедуры

Если вы меняете запрос, но не учитываете, что после выполнения запроса данные проходят через подобную программную обработку в общем модуле (например, КонтролируемыеСделкиПереопределяемый), ваши изменения будут затерты типовым алгоритмом. Проверьте, не переопределяются ли значения полей СуммаВРублях и СуммаБезНДСВРублях после выполнения основного запроса по выборке данных.

Корректный расчет суммы без НДС в рублях

Сумма без НДС в рублях в данном регистре вычисляется одним из двух способов:

  1. Путем деления итоговой рублевой суммы (уже пересчитанной по курсу) на ставку налога.
  2. Путем взятия валютной суммы «нетто» (без НДС) и ее последующего пересчета по курсу на дату сделки.

Если вы видите некорректные цифры, проанализируйте настройки группировки сделок в Помощнике. При включенной агрегации (группировке) нескольких мелких сделок в одну, 1С может применять усредненные показатели, что визуально искажает итоговую сумму в рублях. Попробуйте отключить лишние группировки и сформировать список заново.

Рекомендации по исправлению ситуации

Подведем итог и составим план действий для решения проблемы:

  1. Не спешите править код запроса. В 90% случаев проблема решается в пользовательском режиме.
  2. Проверьте курсы валют. Убедитесь, что на все даты совершения сделок в базе есть актуальные курсы ЦБ РФ.
  3. Используйте Помощник. Перейдите в раздел подготовки уведомления и выполните полное обновление списка сделок. Это принудительно запустит типовой механизм пересчета.
  4. Проверьте документы «Регистрация контролируемых сделок». Если они созданы вручную, удалите их или исправьте суммы внутри документов, так как они имеют приоритет над автоматическими данными из регистров учета.
  5. Отладка. Если вы все же лезете в код, ставьте точку останова в общем модуле, отвечающем за формирование данных для уведомления, и ищите метод, где заполняются колонки СуммаВРублях. Посмотрите, какие значения приходят в параметрах структуры.

Помните, что регистр КонтролируемыеСделкиОрганизаций — это специализированный инструмент налогового мониторинга, и его поведение жестко привязано к логике Помощника подготовки уведомления. Совместная работа бухгалтера по проверке первичных данных и программиста по анализу регламентных заданий позволит быстро добиться соответствия сумм в валюте и рублях.

← На главную