Как включить валютных контрагентов в отчет по дебиторской задолженности в 1С

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

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

Выясним причину: почему пропадают валютные суммы

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

  1. 62.01 — Расчеты с покупателями и заказчиками (в рублях).
  2. 62.21 — Расчеты с покупателями и заказчиками (в валюте).
  3. 62.31 — Расчеты с покупателями и заказчиками (в у.е.).

Если в параметрах запроса или в настройках СКД (Схемы компоновки данных) указан только счет 62.01, система закономерно проигнорирует все движения по валютным счетам. Посмотрим на исходный фрагмент запроса:


ИЗ
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , СчетДт = &СчетДт, , ) КАК ХозрасчетныйДвиженияССубконто

Здесь оператор = ограничивает выборку одним конкретным значением. Если параметр &СчетДт заполнен ссылкой на счет 62.01, данные по 62.21 никогда не попадут в отчет.

Решение 1: Использование списка счетов

Самый простой способ — изменить условие в запросе, чтобы оно позволяло выбирать несколько счетов сразу. Для этого заменим оператор = на оператор В. Разберем по шагам, как это сделать в тексте запроса:

  1. Найдем в тексте запроса все места, где происходит обращение к виртуальным таблицам регистра бухгалтерии (ДвиженияССубконто, Остатки и т.д.).
  2. Заменим условие СчетДт = &СчетДт на СчетДт В (&СписокСчетов).
  3. Аналогично поступим с кредитовым счетом: СчетКт В (&СписокСчетов).

После изменений запрос в первой временной таблице ВТСчета будет выглядеть следующим образом:


ВЫБРАТЬ
    ХозрасчетныйДвиженияССубконто.Период КАК Период,
    ХозрасчетныйДвиженияССубконто.СубконтоДт1 КАК Контрагент,
    ХозрасчетныйДвиженияССубконто.Сумма КАК СуммаДокРеализации,
    // Остальные поля...
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , СчетДт В (&СписокСчетов), , ) КАК ХозрасчетныйДвиженияССубконто
 ОБЪЕДИНИТЬ ВСЕ
 ВЫБРАТЬ
    ХозрасчетныйДвиженияССубконто.Период,
    ХозрасчетныйДвиженияССубконто.СубконтоКт1,
    // Остальные поля...
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , СчетКт В (&СписокСчетов), , ) КАК ХозрасчетныйДвиженияССубконто

Важный момент: В настройках параметров СКД для параметра СписокСчетов необходимо установить флаг «Доступен список значений». В самом отчете в этот список нужно добавить счета 62.01, 62.21 и 62.31.

Решение 2: Использование иерархии счетов (Best Practice)

Более профессиональный подход заключается в использовании оператора В ИЕРАРХИИ. Это позволит не перечислять каждый субсчет вручную. Если мы укажем родительский счет 62, система автоматически подтянет все вложенные счета, включая те, которые могут быть созданы пользователями в будущем.

Рассмотрим пример условия:


ГДЕ
    ХозрасчетныйДвиженияССубконто.СчетДт В ИЕРАРХИИ (&СчетДебиторки)

В качестве значения параметра &СчетДебиторки достаточно будет передать одну ссылку — ПланСчетов.Хозрасчетный.РасчетыСПокупателями.

Разберем нюансы валютных сумм: «Сумма» vs «СуммаВалютная»

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

Если ваша задача — просто видеть общую задолженность, пересчитанную в рубли, то текущий запрос с полем Сумма корректен. Однако, если нужно видеть сумму именно в той валюте, в которой выписан счет, необходимо добавить в запрос поле СуммаВалютная.

Посмотрим на пример модификации выборки:


ВЫБРАТЬ
    ХозрасчетныйДвиженияССубконто.Сумма КАК СуммаРуб,
    ХозрасчетныйДвиженияССубконто.СуммаВалютная КАК СуммаВал,
    ХозрасчетныйДвиженияССубконто.ВалютаДт КАК Валюта

Помните: Ресурс СуммаВалютная заполняется только в том случае, если у счета в плане счетов установлен признак «Валютный». Для счета 62.01 это поле будет пустым (NULL или 0), а для 62.21 — заполненным.

Оптимизация: Переход на таблицу «ОстаткиИОбороты»

В исходном коде используется таблица ДвиженияССубконто. Это «тяжелая» таблица, которая читает физические записи регистра. Если объем данных большой, отчет будет работать медленно. Выясним, как оптимизировать этот процесс.

Для отчетов по взаиморасчетам лучше использовать виртуальную таблицу ОстаткиИОбороты. Она позволяет получить готовые итоги по документам (регистраторам) без необходимости самостоятельно суммировать приходы и расходы. Рассмотрим пример структуры такого запроса:


ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Контрагент,
    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
    ХозрасчетныйОстаткиИОбороты.Субконто3 КАК ДокументРеализации,
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК ДолгРуб,
    ХозрасчетныйОстаткиИОбороты.СуммаВалютнаяКонечныйОстатокДт КАК ДолгВал
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , Счет В ИЕРАРХИИ (&Счет), , ) КАК ХозрасчетныйОстаткиИОбороты

Проблема курсовых разниц

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

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

Резюме: что нужно проверить в вашем отчете

  1. Отбор по счетам: убедитесь, что в выборку попадает не только 62.01, но и 62.21 (валюта), 62.31 (у.е.).
  2. Оператор сравнения: используйте В (&СписокСчетов) или В ИЕРАРХИИ (&Счет) вместо =.
  3. Ресурсы: если нужны оригинальные валютные суммы, добавьте поле СуммаВалютная.
  4. Субконто: проверьте порядок субконто на валютных счетах. Обычно в типовых решениях 1С (БП 3.0) на счете 62.21 субконто идут в том же порядке: Контрагент, Договор, Документ. Если в вашей базе порядок другой, индексы СубконтоДт1, СубконтоДт2 и т.д. в запросе нужно будет скорректировать.

Проанализировав и внедрив эти изменения, вы обеспечите корректную работу отчета вне зависимости от того, в какой валюте ведутся расчеты с вашими бизнес-партнерами.

← На главную