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