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