Как правильно учесть брокерские операции в 1С 7.7, когда дата сделки и дата расчетов не совпадают, и курс валюты изменился?

Программист 1С v7.7 Бухгалтерский учет Финансы и профессиональные услуги
← На главную

При ведении учета инвестиционной деятельности, особенно при работе с зарубежными брокерами, мы часто сталкиваемся с ситуацией, когда дата заключения сделки (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, с учетом как технических особенностей платформы, так и методологических принципов учета.

Основы учета операций T+2

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

  1. Учет по дате сделки (Trade Date Accounting):

    При этом подходе активы и обязательства признаются в день заключения сделки (15 марта). Поскольку фактическая оплата происходит позже, в учете временно возникает дебиторская или кредиторская задолженность перед брокером в валюте сделки. На дату расчетов (17 марта) эта задолженность гасится, и разница в курсах между 15 и 17 марта списывается на курсовые разницы (прочие доходы или расходы). Этот метод обеспечивает более точное отражение финансового состояния на дату сделки, так как вы уже являетесь юридическим владельцем актива.

  2. Учет по дате расчетов (Settlement Date Accounting):

    В этом случае актив признается только на дату фактических расчетов (17 марта). В период между датой сделки и датой расчетов операция может отражаться на забалансовых счетах или в специальных транзитных регистрах для контроля "зависших" сделок. Этот метод проще с точки зрения курсовых разниц, поскольку все курсы берутся на одну дату, но он не отражает фактическое владение активом на дату сделки.

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

Решение 1: Ручная корректировка суммы в проводках

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

Как это работает?

  1. Создание документа: Мы создаем документ "Покупка акций" датой сделки (например, 15 марта).
  2. Заполнение валютной суммы: В валютную сумму проводки мы записываем точное количество долларов, которое было списано брокером за акции.
  3. Принудительное вычисление суммы в евро: Вместо того чтобы полагаться на автоматическое подставление курса 1С 7.7 (который будет на 15 марта), мы программно вычисляем сумму в евро, используя курс на дату расчетов (17 марта). Затем эту рассчитанную сумму мы принудительно записываем в поле суммы в основной валюте проводки.

Давайте посмотрим, как это может выглядеть в коде модуля проведения документа 1С 7.7:


Процедура ПриПроведении()
    // ... ваш код для подготовки проводки ...
    
    // Получаем курс на дату расчетов
    ДатаРасчетов = глДатаРасчетов; // Предположим, что эту дату мы храним в шапке документа или реквизите
    КурсДоллараНаДатуРасчетов = Валюта.ПолучитьКурс(ДатаРасчетов);
    
    Если КурсДоллараНаДатуРасчетов = 0 Тогда
        Сообщить("Не найден курс доллара на дату расчетов " + Формат(ДатаРасчетов, "ДФ=dd.MM.yyyy"), "!");
        СтатусВозврата = 0;
        Возврат;
    КонецЕсли;
    
    // Допустим, у нас есть табличная часть с данными о сделках
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        Если ТипОперации = "ПокупкаАкции" Тогда
            // Создаем новую проводку
            НоваяПроводка = СоздатьОбъект("Проводка");
            НоваяПроводка.УстановитьРеквизитШапки(ЭтотОбъект);
            
            // Заполняем счета и субконто
            НоваяПроводка.Дебет.Счет = СчетПокупаемыхАкции; // Например, счет "Акции"
            НоваяПроводка.Дебет.Субконто(1, Акция);
            
            НоваяПроводка.Кредит.Счет = СчетБрокерскогоСчета; // Например, счет "Брокерский счет USD"
            НоваяПроводка.Кредит.Субконто(1, БрокерскийСчет);
            
            // Устанавливаем валюту и валютную сумму
            НоваяПроводка.Валюта = ВалютаСделки; // Доллары
            НоваяПроводка.ВалютнаяСумма = СуммаВВалютеСделки;
            
            // !!!! Здесь самое важное: принудительно рассчитываем сумму в евро по курсу на дату расчетов
            НоваяПроводка.Сумма = СуммаВВалютеСделки * КурсДоллараНаДатуРасчетов;
            
            // Записываем проводку
            НоваяПроводка.Записать();
        КонецЕсли;
    КонецЦикла;
    // ... остальной код ...
КонецПроцедуры

В этом примере, несмотря на то что дата документа (и, следовательно, дата проводки) — 15 марта, сумма в основной валюте (НоваяПроводка.Сумма) будет рассчитана по курсу на 17 марта. При этом в самой проводке будет виден "расчетный курс", который получается делением НоваяПроводка.Сумма на НоваяПроводка.ВалютнаяСумма. Этот "расчетный курс" будет отличаться от официального курса, который хранится в справочнике "Валюты" на 15 марта.

Преимущества и недостатки:

Решение 2: Разделение операции на два документа (или использование транзитных счетов)

Это методологически более корректный подход, который лучше соответствует принципам учета по дате сделки (Trade Date Accounting) и позволяет избежать проблем с "расчетным курсом" в проводках. Мы разделим одну логическую операцию на две учетные: признание сделки и фактическое исполнение (расчеты).

Концепция:

Для каждой такой операции мы будем создавать два связанных документа:

  1. Документ "Сделка" (датой сделки, 15 марта): Он отражает сам факт заключения сделки и признание актива. При этом возникает временное обязательство или право требования в валюте сделки на специальном "транзитном" счете расчетов с брокером.
  2. Документ "Расчеты по сделке" (датой расчетов, 17 марта): Он отражает фактическое движение денежных средств с брокерского счета и закрывает обязательство, возникшее в документе "Сделка".

Пошаговая реализация:

Шаг 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 "Прочие расходы").

Для списания курсовой разницы можно использовать:

  1. Регламентную операцию: Создать отдельный документ "Регламентная операция" (или "Переоценка валютных средств"), который будет автоматически рассчитывать и закрывать курсовые разницы на счете 76.05 в конце дня или месяца.
  2. Ручную проводку: При небольшом количестве операций можно делать это вручную отдельной операцией.

Пример проводки для закрытия курсовой разницы (допустим, курс евро к доллару вырос, и у нас образовался убыток):


// Проводка по курсовой разнице (дата 17.03)
Дт 91.02 "Прочие расходы" (Курсовые разницы) - Кт 76.05 "Расчеты по сделкам в пути" (Сумма убытка в евро)

Связывание документов:

Для удобства анализа и навигации крайне важно связать эти два документа между собой. Мы можем использовать несколько подходов:

  1. Единая нумерация/префикс: Присваивать документам, относящимся к одной сделке, одинаковые номера или номера с общим префиксом (например, "СП-000001" и "РП-000001" для сделки и расчетов соответственно).
  2. Реквизит "Документ-основание": В шапке документа "Списание средств по сделке" (от 17 марта) мы можем добавить реквизит типа "Документ" (например, ДокументОснование), который будет ссылаться на соответствующий документ "Покупка акций" (от 15 марта). Это позволит легко переходить от одного документа к другому.
  3. 
    // В модуле формы документа "Списание средств по сделке"
    Процедура ОткрытьДокументОснование()
        Если ДокументОснование.Выбран() = 1 Тогда
            ДокументОснование.ОткрытьДокумент();
        Иначе
            Сообщить("Документ-основание не выбран!");
        КонецЕсли;
    КонецПроцедуры
    
  4. Поиск подчиненных документов: Если мы используем реквизит ДокументОснование, то через правую кнопку мыши в списке документов можно настроить "Показать подчиненные документы", чтобы видеть всю цепочку операций.
  5. Комментарии к проводкам: В содержание операции или комментарий к проводке можно записывать информацию о связанном документе (например, "Расчеты по сделке №XXX от 15.03").

Преимущества и недостатки такого подхода:

Решение 3: Учет по дате расчетов с транзитным регистром для контроля (менее предпочтительный для "Trade Date Accounting")

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

Как это работает?

  1. Документ "Брокерский отчет" (15 марта): На дату сделки он создает записи не в проводках, а в некотором "регистре сделок в пути". Этот регистр будет хранить информацию о сделке: акции, валютная сумма, дата сделки, ожидаемая дата расчетов. Это позволяет контролировать все "незакрытые" сделки.
  2. Документ "Покупка акций" (17 марта): Создается датой фактических расчетов. Вся сумма в евро рассчитывается по курсу на 17 марта. При этом в проводке все будет "красиво". Перед проведением этот документ ищет соответствующую запись в "регистре сделок в пути" и закрывает ее.

Этот подход хорошо подходит, если основная логика вашего учета ориентирована на момент фактического движения денежных средств, а не на юридический переход прав собственности. Однако для полного соответствия принципам Trade Date Accounting он менее пригоден, так как актив будет признан только 17 марта.

Особенности учета для физических лиц

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

Заключение

Выбор оптимального метода зависит от ваших приоритетов:

Мы рекомендуем использовать подход с разделением операций на два документа и использованием транзитных счетов, так как он обеспечивает большую прозрачность и точность учета, что особенно важно при анализе инвестиционной деятельности и формировании отчетности, даже если она ведется исключительно для личных целей.

← На главную