При ведении учета инвестиционной деятельности, особенно при работе с зарубежными брокерами, мы часто сталкиваемся с ситуацией, когда дата заключения сделки (Trade Date) не совпадает с датой фактических расчетов или клиринга (Settlement Date). Это является стандартной практикой на многих биржах (например, режим T+2, что означает расчет через два рабочих дня после сделки). В условиях волатильности валютных курсов такое расхождение дат создает уникальную проблему для учета в 1С 7.7, особенно когда основная валюта отличается от валюты сделки.
Рассмотрим типовую ситуацию: вы покупаете акции в долларах США, дата сделки — 15 марта, а дата расчетов — 17 марта. За этот период курс доллара к евро (ваша основная валюта учета) успевает измениться. В вашей учетной системе на базе 1С 7.7 вы создаете документ "Брокерский отчет" (предположим, это экранная форма), который затем построчно формирует документы "Покупка акций". И здесь возникает основной вопрос: какой датой создавать документ "Покупка акций" и как корректно отразить суммы в евро, учитывая изменившийся курс?
Если мы создадим документ 15 марта, но попытаемся рассчитать суммы в евро по курсу на 17 марта, то в проводке 1С 7.7 автоматически подставит курс на 15 марта. Это приведет к тому, что арифметически "курс" в проводке не будет соответствовать фактическому курсу, по которому были произведены расчеты. Такой подход может быть "некрасивым" с точки зрения внутреннего контроля и может вызвать трудности при анализе данных в отчетах.
Если же мы создадим документ 17 марта, то, хотя суммы и курсы будут выглядеть "красиво" и корректно, возникнут проблемы с сопоставлением данных с брокерским отчетом, который может отражать сделку от 15 марта. Это нарушит хронологию учета операций и усложнит анализ "бухгалтерских итогов" по дате сделки.
Давайте подробно разберем, как мы можем решить эту проблему, используя различные подходы, подходящие для 1С 7.7, с учетом как технических особенностей платформы, так и методологических принципов учета.
Прежде чем перейти к технической реализации, рассмотрим основные бухгалтерские методики учета операций с расхождением дат сделки и расчетов. Это поможет нам выбрать наиболее подходящий вариант для вашей системы 1С 7.7.
Trade Date Accounting):
При этом подходе активы и обязательства признаются в день заключения сделки (15 марта). Поскольку фактическая оплата происходит позже, в учете временно возникает дебиторская или кредиторская задолженность перед брокером в валюте сделки. На дату расчетов (17 марта) эта задолженность гасится, и разница в курсах между 15 и 17 марта списывается на курсовые разницы (прочие доходы или расходы). Этот метод обеспечивает более точное отражение финансового состояния на дату сделки, так как вы уже являетесь юридическим владельцем актива.
Settlement Date Accounting):
В этом случае актив признается только на дату фактических расчетов (17 марта). В период между датой сделки и датой расчетов операция может отражаться на забалансовых счетах или в специальных транзитных регистрах для контроля "зависших" сделок. Этот метод проще с точки зрения курсовых разниц, поскольку все курсы берутся на одну дату, но он не отражает фактическое владение активом на дату сделки.
В контексте 1С 7.7, где учет ведется для физического лица, решающим фактором часто является необходимость корректного определения налоговой базы и соответствия учета брокерским отчетам. Поэтому нам нужно найти баланс между точностью отражения данных и удобством использования системы.
Платформа 1С 7.7, в отличие от более поздних версий, предоставляет нам определенную гибкость в работе с проводками. Хотя система автоматически подставляет курс по дате документа, мы имеем возможность программно или даже вручную (при наличии соответствующих прав) изменить сумму в основной валюте (евро), не затрагивая при этом валютную сумму.
Давайте посмотрим, как это может выглядеть в коде модуля проведения документа 1С 7.7:
Процедура ПриПроведении()
// ... ваш код для подготовки проводки ...
// Получаем курс на дату расчетов
ДатаРасчетов = глДатаРасчетов; // Предположим, что эту дату мы храним в шапке документа или реквизите
КурсДоллараНаДатуРасчетов = Валюта.ПолучитьКурс(ДатаРасчетов);
Если КурсДоллараНаДатуРасчетов = 0 Тогда
Сообщить("Не найден курс доллара на дату расчетов " + Формат(ДатаРасчетов, "ДФ=dd.MM.yyyy"), "!");
СтатусВозврата = 0;
Возврат;
КонецЕсли;
// Допустим, у нас есть табличная часть с данными о сделках
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Если ТипОперации = "ПокупкаАкции" Тогда
// Создаем новую проводку
НоваяПроводка = СоздатьОбъект("Проводка");
НоваяПроводка.УстановитьРеквизитШапки(ЭтотОбъект);
// Заполняем счета и субконто
НоваяПроводка.Дебет.Счет = СчетПокупаемыхАкции; // Например, счет "Акции"
НоваяПроводка.Дебет.Субконто(1, Акция);
НоваяПроводка.Кредит.Счет = СчетБрокерскогоСчета; // Например, счет "Брокерский счет USD"
НоваяПроводка.Кредит.Субконто(1, БрокерскийСчет);
// Устанавливаем валюту и валютную сумму
НоваяПроводка.Валюта = ВалютаСделки; // Доллары
НоваяПроводка.ВалютнаяСумма = СуммаВВалютеСделки;
// !!!! Здесь самое важное: принудительно рассчитываем сумму в евро по курсу на дату расчетов
НоваяПроводка.Сумма = СуммаВВалютеСделки * КурсДоллараНаДатуРасчетов;
// Записываем проводку
НоваяПроводка.Записать();
КонецЕсли;
КонецЦикла;
// ... остальной код ...
КонецПроцедуры
В этом примере, несмотря на то что дата документа (и, следовательно, дата проводки) — 15 марта, сумма в основной валюте (НоваяПроводка.Сумма) будет рассчитана по курсу на 17 марта. При этом в самой проводке будет виден "расчетный курс", который получается делением НоваяПроводка.Сумма на НоваяПроводка.ВалютнаяСумма. Этот "расчетный курс" будет отличаться от официального курса, который хранится в справочнике "Валюты" на 15 марта.
Это методологически более корректный подход, который лучше соответствует принципам учета по дате сделки (Trade Date Accounting) и позволяет избежать проблем с "расчетным курсом" в проводках. Мы разделим одну логическую операцию на две учетные: признание сделки и фактическое исполнение (расчеты).
Для каждой такой операции мы будем создавать два связанных документа:
Шаг 1: Документ "Покупка акций" (датой сделки - 15 марта)
Этот документ будет фиксировать ваше право собственности на акции. Он формирует проводку, где мы дебетуем счет акций и кредитуем специальный "транзитный" счет расчетов с брокером по курсу на 15 марта.
Предположим, у нас есть счет 20.01 "Акции" и новый счет 76.05 "Расчеты по сделкам в пути".
// Модуль проведения документа "Покупка акций" (дата документа 15.03)
Процедура ПриПроведении()
// ...
НоваяПроводка = СоздатьОбъект("Проводка");
НоваяПроводка.УстановитьРеквизитШапки(ЭтотОбъект);
// Дебетуем счет акций
НоваяПроводка.Дебет.Счет = "20.01";
НоваяПроводка.Дебет.Субконто(1, АкцияКупленная);
// Кредитуем транзитный счет расчетов
НоваяПроводка.Кредит.Счет = "76.05";
НоваяПроводка.Кредит.Субконто(1, Брокер); // Субконто для учета брокера
НоваяПроводка.Кредит.Субконто(2, ВалютаСделки); // Субконто для валюты
НоваяПроводка.Валюта = ВалютаСделки; // USD
НоваяПроводка.ВалютнаяСумма = СуммаДолларов;
НоваяПроводка.Сумма = СуммаДолларов * ВалютаСделки.ПолучитьКурс(ДатаДок); // Курс на 15.03
НоваяПроводка.Записать();
// ...
КонецПроцедуры
После этой проводки на 15 марта у нас появились акции на счете 20.01 и возникла кредиторская задолженность перед брокером на счете 76.05 в долларах и в евро по курсу 15 марта.
Шаг 2: Документ "Списание средств с брокерского счета" (или "Расчеты по сделке") (датой расчетов - 17 марта)
Этот документ будет фиксировать фактическое списание денежных средств с вашего брокерского счета. Он формирует проводку, которая закрывает задолженность на транзитном счете 76.05 и уменьшает ваш брокерский денежный счет.
Предположим, ваш брокерский денежный счет — 57.01 "Брокерский счет USD".
// Модуль проведения документа "Списание средств по сделке" (дата документа 17.03)
Процедура ПриПроведении()
// ...
НоваяПроводка = СоздатьОбъект("Проводка");
НоваяПроводка.УстановитьРеквизитШапки(ЭтотОбъект);
// Дебетуем транзитный счет расчетов, закрывая задолженность
НоваяПроводка.Дебет.Счет = "76.05";
НоваяПроводка.Дебет.Субконто(1, Брокер);
НоваяПроводка.Дебет.Субконто(2, ВалютаСделки);
// Кредитуем брокерский денежный счет
НоваяПроводка.Кредит.Счет = "57.01";
НоваяПроводка.Кредит.Субконто(1, БрокерскийСчетUSD);
НоваяПроводка.Кредит.Субконто(2, ВалютаСделки);
НоваяПроводка.Валюта = ВалютаСделки; // USD
НоваяПроводка.ВалютнаяСумма = СуммаДолларов;
НоваяПроводка.Сумма = СуммаДолларов * ВалютаСделки.ПолучитьКурс(ДатаДок); // Курс на 17.03
НоваяПроводка.Записать();
// ...
КонецПроцедуры
Шаг 3: Учет курсовой разницы
Поскольку курсы на 15 марта и 17 марта были разными, на счете 76.05 "Расчеты по сделкам в пути" после проведения обоих документов возникнет сальдо в евро (но не в долларах, так как валютная сумма была одинаковой). Это сальдо и есть курсовая разница. Эту разницу необходимо списать на счета доходов или расходов (например, 91.01 "Прочие доходы" или 91.02 "Прочие расходы").
Для списания курсовой разницы можно использовать:
76.05 в конце дня или месяца.Пример проводки для закрытия курсовой разницы (допустим, курс евро к доллару вырос, и у нас образовался убыток):
// Проводка по курсовой разнице (дата 17.03)
Дт 91.02 "Прочие расходы" (Курсовые разницы) - Кт 76.05 "Расчеты по сделкам в пути" (Сумма убытка в евро)
Для удобства анализа и навигации крайне важно связать эти два документа между собой. Мы можем использовать несколько подходов:
ДокументОснование), который будет ссылаться на соответствующий документ "Покупка акций" (от 15 марта). Это позволит легко переходить от одного документа к другому.
// В модуле формы документа "Списание средств по сделке"
Процедура ОткрытьДокументОснование()
Если ДокументОснование.Выбран() = 1 Тогда
ДокументОснование.ОткрытьДокумент();
Иначе
Сообщить("Документ-основание не выбран!");
КонецЕсли;
КонецПроцедуры
ДокументОснование, то через правую кнопку мыши в списке документов можно настроить "Показать подчиненные документы", чтобы видеть всю цепочку операций.Если для вас более критично, чтобы все суммы в евро брались строго по курсу даты фактического списания средств, и вы готовы пренебречь отражением актива на дату сделки, можно использовать подход, основанный на дате расчетов. Однако, чтобы не терять информацию о сделке, можно использовать регистры накопления или забалансовые счета.
Этот подход хорошо подходит, если основная логика вашего учета ориентирована на момент фактического движения денежных средств, а не на юридический переход прав собственности. Однако для полного соответствия принципам Trade Date Accounting он менее пригоден, так как актив будет признан только 17 марта.
Поскольку ваш учет ведется для частного лица, мы должны учитывать, что часто ключевым аспектом является не столько строгий бухгалтерский учет, сколько корректное формирование налоговой базы и адекватное отражение финансовых результатов. Многие юрисдикции при расчете дохода/расхода для налоговых целей ориентируются на курс Центрального банка на дату фактического получения/списания средств. Если брокер зарубежный, его отчеты будут содержать валютные суммы и даты расчетов. Использование "транзитных" проводок (как в Решении 2) или двух документов, которые используют курсы на соответствующие даты, наиболее полно соответствует логике банковских/брокерских выписок и позволяет четко отслеживать формирование курсовых разниц.
Выбор оптимального метода зависит от ваших приоритетов:
Мы рекомендуем использовать подход с разделением операций на два документа и использованием транзитных счетов, так как он обеспечивает большую прозрачность и точность учета, что особенно важно при анализе инвестиционной деятельности и формировании отчетности, даже если она ведется исключительно для личных целей.