При ведении валютного учета в программе «1С:Управление торговлей» редакции 11.4 пользователи часто сталкиваются с необходимостью анализа взаиморасчетов в разрезе курсовых разниц. Возникает типичная задача: создать отчет, в котором будут сопоставлены суммы продаж и оплаты от клиентов в рублях по валютным договорам (USD, EUR), а полученная курсовая разница будет выведена в отдельную колонку.
В этой статье мы подробно разберем, как устроен механизм валютного учета в 1С:УТ 11.4, почему не стоит пытаться рассчитывать курсовые разницы «вручную» в запросах, и как правильно вытащить готовые данные из регистров конфигурации для построения корректного отчета.
На первый взгляд задача кажется простой: взять дату продажи, дату оплаты, найти курсы валют на эти даты и перемножить. Однако на практике этот подход быстро приводит к неверным результатам по следующим причинам:
Поэтому мы настоятельно рекомендуем использовать уже готовые данные, которые система 1С:УТ 11.4 рассчитывает автоматически на уровне проведения документов и регламентных операций.
В системе заложен мощный механизм онлайн-взаиморасчетов. Программа сама сопоставляет документы по принципу ФИФО или на основании явных указаний пользователя в платежных документах (поле Основание платежа или табличная часть «Расшифровка платежа»).
Связующим звеном выступает специальный реквизит — Объект расчетов. В зависимости от настроек правил оплаты в договоре, объектом расчетов может быть:
При проведении документов система делает записи в регистры накопления, распределяя суммы оплат по документам отгрузки. Нам остается лишь правильно прочитать эти данные.
В конфигурации 1С:УТ 11.4 для хранения информации о расчетах с клиентами используются специализированные регистры накопления:
РасчетыСКлиентамиРасчетыСКлиентамиПоДокументамРасчетыСКлиентамиПоСрокамДля разработки отчета по продажам с детализацией до документов отгрузки наиболее удобным является регистр РасчетыСКлиентамиПоДокументам.
Важный маркер курсовой разницы в регистре:
Когда система производит переоценку валютного долга (например, при регламентном закрытии месяца или в момент проведения документов оплаты), она делает записи в этот регистр со следующими особенностями:
СуммаВВалюте равен 0 (так как сумма долга в валюте контракта не изменилась).Сумма (рублевый эквивалент) — заполнен (это и есть сумма начисленной в рублях курсовой разницы).Хозяйственная операция принимает значение ПереоценкаВалютныхСредств (или аналогичное, связанное с курсовыми разницами).Окончательный расчет и фиксация этих сумм происходят при выполнении регламентной операции «Расчет курсовых разниц» в рамках процедуры «Закрытие месяца». Результаты также дублируются в регистрах финансового учета ПрочиеДоходы и ПрочиеРасходы.
Рассмотрим, как связать данные о продажах и курсовых разницах в одном запросе. Мы будем использовать виртуальную таблицу оборотов регистра РасчетыСКлиентамиПоДокументам.Обороты.
Ниже представлен пример структуры запроса для получения необходимых показателей:
ВЫБРАТЬ
Продажи.Организация КАК Организация,
Продажи.Контрагент КАК Контрагент,
Продажи.Договор КАК Договор,
Продажи.ЗаказКлиента КАК ОбъектРасчетов,
Продажи.Реализация КАК ДокументПродажи,
Продажи.СуммаВВалюте КАК СуммаПродажиВалюта,
Продажи.СуммаРегл КАК СуммаПродажиРуб,
// Получаем оплату из регистра расчетов
ЕСТЬNULL(ВзаиморасчетыОплата.СуммаОплатыВалюта, 0) КАК СуммаОплатыВалюта,
ЕСТЬNULL(ВзаиморасчетыОплата.СуммаОплатыРуб, 0) КАК СуммаОплатыРуб,
// Вытаскиваем курсовую разницу
ЕСТЬNULL(ВзаиморасчетыКурсовые.КурсоваяРазница, 0) КАК КурсоваяРазница
ИЗ
// Первым источником выбираем ваши данные по продажам (например, из регистра "ВыручкаИСебестоимостьПродаж")
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК Продажи
// Левое соединение для получения сумм оплаты
ЛЕВОЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ
Взаиморасчеты.ОбъектРасчетов КАК ОбъектРасчетов,
Взаиморасчеты.РасчетныйДокумент КАК РасчетныйДокумент,
СУММА(Взаиморасчеты.СуммаВВалютеРасход) КАК СуммаОплатыВалюта,
СУММА(Взаиморасчеты.СуммаРасход) КАК СуммаОплатыРуб
ИЗ
РегистрНакопления.РасчетыСКлиентамиПоДокументам.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Взаиморасчеты
ГДЕ
Взаиморасчеты.СуммаВВалютеРасход <> 0
СГРУППИРОВАТЬ ПО
Взаиморасчеты.ОбъектРасчетов,
Взаиморасчеты.РасчетныйДокумент
) КАК ВзаиморасчетыОплата
ПО Продажи.ЗаказКлиента = ВзаиморасчетыОплата.ОбъектРасчетов
И Продажи.Реализация = ВзаиморасчетыОплата.РасчетныйДокумент
// Левое соединение для получения курсовых разниц
ЛЕВОЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ
Взаиморасчеты.ОбъектРасчетов КАК ОбъектРасчетов,
Взаиморасчеты.РасчетныйДокумент КАК РасчетныйДокумент,
// Курсовая разница - это рублевые движения при нулевом изменении валютной суммы
СУММА(Взаиморасчеты.СуммаКонечныйОстаток - Взаиморасчеты.СуммаНачальныйОстаток) КАК КурсоваяРазница
ИЗ
РегистрНакопления.РасчетыСКлиентамиПоДокументам.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Взаиморасчеты
ГДЕ
Взаиморасчеты.СуммаВВалютеОборот = 0
И Взаиморасчеты.СуммаОборот <> 0
СГРУППИРОВАТЬ ПО
Взаиморасчеты.ОбъектРасчетов,
Взаиморасчеты.РасчетныйДокумент
) КАК ВзаиморасчетыКурсовые
ПО Продажи.ЗаказКлиента = ВзаиморасчетыКурсовые.ОбъектРасчетов
И Продажи.Реализация = ВзаиморасчетыКурсовые.РасчетныйДокумент
Проанализируем этот запрос. Мы разделили получение оплат и получение курсовых разниц на два разных пакета (подзапроса). В блоке ВзаиморасчетыКурсовые мы применили ключевой фильтр: Взаиморасчеты.СуммаВВалютеОборот = 0. Это позволяет отсечь обычные рублевые оплаты по текущему курсу и выбрать только те транзакции переоценки, которые изменили рублевую стоимость долга без изменения его валютного объема.
Если перед вами не стоит задача жестко интегрировать этот показатель в специфическую внешнюю форму, мы рекомендуем воспользоваться встроенным отчетом «Ведомость расчетов с клиентами». Данный отчет уже содержит в себе все необходимые механизмы:
Объекту расчетов и Расчетному документу.Сумма (Регл.) — сумма в рублях;Сумма (Вал.) — сумма в валюте договора;Такой подход позволит вам без написания кода увидеть детальную картину: когда произошла отгрузка, когда пришла оплата и какая сумма курсовой разницы была начислена регламентным документом в конце месяца.