В крупных холдингах часто возникает задача ведения детального учета взаиморасчетов между десятками или даже сотнями собственных юридических лиц. Основная сложность здесь заключается в том, что каждая операция должна отражаться «в зеркале»: если одна организация должна другой, то в отчете по первой мы должны видеть дебиторскую задолженность, а по второй — кредиторскую. Разберем по шагам, как спроектировать такую систему на базе регистров накопления 1С, проанализируем различные подходы и выберем наиболее эффективный.
Предположим, у нас есть 100 организаций. Они постоянно обмениваются товарами, услугами и денежными средствами. Нам необходимо видеть актуальные остатки долгов в разрезе статей взаиморасчетов. Важно, чтобы отчет по любой выбранной организации показывал: кто должен ей, кому должна она и по какой причине (статье).
Для решения этой задачи лучше всего подходит Регистр накопления (остатки). Использование оборотного регистра не позволит оперативно получать текущее сальдо без пересчета всех движений с начала времен, а использование регистра бухгалтерии (хотя он и предназначен для двойной записи) может быть избыточным для чисто управленческой задачи. Рассмотрим подробнее, как структурировать данные в регистре накопления.
Это самый прозрачный и удобный для построения отчетов метод. Суть его заключается в том, что на каждую хозяйственную операцию система формирует две записи в регистр. Разберем структуру такого регистра:
Измерения:
Организация — наша организация, по которой мы хотим видеть баланс.Контрагент — вторая сторона сделки (также одна из наших 100 организаций).СтатьяВзаиморасчетов — аналитика, по которой ведется учет (например, «Аренда», «Оплата за товар», «Займ»).Ресурсы:
Сумма — числовое значение долга.Проанализируем ситуацию: Организация №1 оказала услугу Организации №2 на сумму 100 рублей. В момент проведения документа система должна сделать следующие движения:
// Запись для Организации №1 (нам должны)
Движения.ВзаиморасчетыМеждуОрганизациями.ДобавитьПриход();
Движения.ВзаиморасчетыМеждуОрганизациями.Организация = Организация1;
Движения.ВзаиморасчетыМеждуОрганизациями.Контрагент = Организация2;
Движения.ВзаиморасчетыМеждуОрганизациями.Статья = СтатьяУслуги;
Движения.ВзаиморасчетыМеждуОрганизациями.Сумма = 100;
// Запись для Организации №2 (мы должны)
Движения.ВзаиморасчетыМеждуОрганизациями.ДобавитьРасход();
Движения.ВзаиморасчетыМеждуОрганизациями.Организация = Организация2;
Движения.ВзаиморасчетыМеждуОрганизациями.Контрагент = Организация1;
Движения.ВзаиморасчетыМеждуОрганизациями.Статья = СтатьяУслуги;
Движения.ВзаиморасчетыМеждуОрганизациями.Сумма = 100;
Преимущества этого метода:
Организация.Если в системе предполагается колоссальный объем транзакций и вы хотите сэкономить место в базе данных, можно использовать метод «канонического порядка». Посмотрим, как это работает.
В этом случае мы всегда записываем организации в измерения в определенном порядке (например, сравнивая их ссылки или ИНН). Назовем измерения Организация1 и Организация2.
Алгоритм записи:
Организация1, больший — в Организация2.Сумма. Например, положительное число означает, что Орг1 должна Орг2, отрицательное — наоборот.Рассмотрим пример кода для определения порядка:
Если ОрганизацияА.УникальныйИдентификатор() < ОрганизацияБ.УникальныйИдентификатор() Тогда
ОргПервая = ОрганизацияА;
ОргВторая = ОрганизацияБ;
КоэффициентЗнака = 1;
Иначе
ОргПервая = ОрганизацияБ;
ОргВторая = ОрганизацияА;
КоэффициентЗнака = -1;
КонецЕсли;
// Запись в регистр
Движение.Организация1 = ОргПервая;
Движение.Организация2 = ОргВторая;
Движение.Сумма = СуммаОперации * КоэффициентЗнака;
Почему этот метод сложнее: Хотя мы экономим 50% места в таблице итогов, написание запросов для отчетов превращается в кошмар. Вам придется в каждом запросе проверять: ГДЕ (Организация1 = &ВыбОрг ИЛИ Организация2 = &ВыбОрг) и программно инвертировать знак суммы, если ваша организация оказалась во втором измерении. В 99% случаев для управленческого учета этот метод не рекомендуется из-за сложности поддержки.
Иногда удобно использовать одно измерение Организация и одно измерение Контрагент, но вместо одного ресурса Сумма сделать два: ДолгНам и НашДолг. Это позволяет избежать отрицательных чисел и делает регистр похожим на бухгалтерский баланс.
Однако, как показывает практика, это часто приводит к «раздуванию» итогов, когда по одним и тем же измерениям одновременно висят и дебиторка, и кредиторка (например, из-за разных документов-оснований, если вы решите их добавить позже). Поэтому лучше придерживаться классической схемы с одним ресурсом и зеркальными записями типа «Приход» (увеличение нашего актива/дебиторки) и «Расход» (увеличение нашего пассива/кредиторки).
При работе со 100 организациями важно учитывать следующие моменты:
1. Статьи взаиморасчетов: Используйте иерархический справочник. Это позволит финансистам видеть общую картину по группе «Аренда» и детальную по статьям «Аренда офиса», «Аренда склада». В регистр всегда пишите конечный элемент.
2. Элиминация (Исключение внутригрупповых оборотов): Одной из главных целей такой системы является возможность построить консолидированный баланс. Если вы сложите задолженность по всем организациям холдинга, внутренние долги должны «схлопнуться». Именно поэтому метод зеркальных записей идеален — сумма всех остатков по всем организациям даст чистый долг перед внешним миром (если в Контрагент попадут внешние лица) или ноль (если вы учитываете только «своих»).
3. Документальное оформление: Чтобы система работала надежно, желательно автоматизировать создание «парных» документов. Например, если Организация №1 делает документ «Реализация товаров и услуг», система должна автоматически (или по нажатию кнопки) генерировать «Поступление товаров и услуг» в Организации №2. Движения по нашему регистру взаиморасчетов Intercompany должны делать оба документа (каждый по своей организации).
Если вы заметили, что отчет «Сверка внутригрупповых расчетов» показывает разницу, проанализируйте следующие ситуации:
СтатьяВзаиморасчетов, иначе в отчетах вы увидите «развал» сальдо по аналитике.Подводя итог, для задачи из 100 организаций оптимальным решением будет регистр накопления остатков с измерениями Организация, Контрагент и Статья, в который при каждой операции записываются две зеркальные строки. Это обеспечит максимальную гибкость отчетов и простоту контроля данных.