В процессе автоматизации учета в программе 1С:Бухгалтерия предприятия 3.0 пользователи и руководство часто сталкиваются с нехваткой стандартной аналитики. Классический пример — счета расчетов с покупателями (62.01 и 62.02). Типовая конфигурация предлагает здесь три разреза учета: Контрагенты, Договоры и Документы расчетов с контрагентами. Попытка добавить четвертый разрез аналитики (например, Номенклатуру или Номенклатурную группу) «в лоб» через Конфигуратор неизбежно приводит к серьезным техническим и методологическим проблемам.
В этой статье мы подробно проанализируем, почему прямое добавление четвертого субконто является критической ошибкой, к каким последствиям для производительности СУБД и обновлений это приведет, а также разберем по шагам пять надежных и безопасных альтернативных решений, которые успешно применяются практикующими разработчиками.
Прежде чем приступать к доработке, важно понять разницу между возможностями платформы «1С:Предприятие 8» и логикой конкретного прикладного решения. Технически платформа позволяет устанавливать до 50 видов субконто на одном счете. Ограничение в три субконто — это осознанное решение архитекторов фирмы «1С» для конфигурации «Бухгалтерия предприятия».
Рассмотрим детально риски, с которыми мы столкнемся при попытке изменить свойство плана счетов Хозрасчетный под названием «Максимальное количество субконто»:
_AccRg) жестко оптимизированы. При увеличении лимита субконто СУБД вынуждена физически перестроить таблицы, добавив новые колонки (например, СубконтоДт4 и СубконтоКт4) для абсолютно всех записей регистра, даже тех счетов, где четвертая аналитика не используется. На крупных базах данных это приводит к колоссальному росту объема таблиц, замедлению транзакций при проведении документов и фрагментации индексов.62.01 и 62.02 появится четвертый разрез учета, стандартный зачет авансов перестанет функционировать корректно. Суммы начнут «зависать» и двоиться по дебету и кредиту внутри одного контрагента и договора из-за несовпадения четвертой аналитики.Ниже представлены проверенные и безопасные архитектурные альтернативы, которые позволят получить нужные отчеты без разрушения типового функционала.
Если вам требуется анализировать расчеты по категориям товаров или проектам, которые косвенно связаны с договором, мы можем воспользоваться возможностями Библиотеки стандартных подсистем (БСП), встроенной в 1С. Рассмотрим этот вариант подробнее.
Каждый элемент справочника ДоговорыКонтрагентов или документ расчетов может обладать набором дополнительных свойств. Чтобы настроить эту связь, выполним следующие шаги:
Теперь проанализируем, как вывести эти данные в стандартном отчете «Оборотно-сальдовая ведомость по счету» (например, по счету 62.01):
Договоры и выберем пункт Договоры.КатегорияНоменклатуры (наш дополнительный реквизит).Мы получили полноценный аналитический отчет по взаиморасчетам в разрезе категорий товаров без изменения конфигурации и написания кода!
Если аналитика обязательно должна отражаться в бухгалтерских проводках, но мы не хотим ломать логику балансовых счетов взаиморасчетов, отличным решением станет использование забалансового счета. Мы создадим этот счет и логику его заполнения внутри механизма расширений конфигурации.
Выясним причину удобства этого метода: забалансовые счета не участвуют в формировании баланса, не влияют на расчет налогов и не контролируются регламентными операциями закрытия месяца. Мы можем настроить на таком счете (например, под кодом ОБ62) четыре субконто: Контрагенты, Договоры, Документы расчетов и Номенклатура.
Разберем по шагам реализацию данного механизма через расширение:
ОБ62, установив для него нужные виды субконто.&После.Рассмотрим пример программного кода в расширении, который транслирует движения балансового счета на наш вспомогательный забалансовый счет:
&После("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведенияПосле(Отказ, РежимПроведения)
Если Отказ Тогда
Возврат;
КонецЕсли;
// Получаем набор записей регистра бухгалтерии документа
ПроводкиБухгалтерии = Движения.Хозрасчетный;
ТаблицаТоваров = ЭтотОбъект.Товары.Выгрузить();
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
// Создаем параллельную проводку по забалансовому счету
НоваяПроводка = ПроводкиБухгалтерии.Добавить();
НоваяПроводка.Период = ЭтотОбъект.Дата;
НоваяПроводка.Активность = Истина;
НоваяПроводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("ОБ62");
// Заполняем аналитику (субконто) забалансового счета
НоваяПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = ЭтотОбъект.Контрагент;
НоваяПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры] = ЭтотОбъект.ДоговорКонтрагента;
НоваяПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами] = ЭтотОбъект.Ссылка;
// В качестве 4-го субконто передаем конкретную номенклатурную позицию
НоваяПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = СтрокаТовара.Номенклатура;
// Сумма проводки
НоваяПроводка.Сумма = СтрокаТовара.Сумма + СтрокаТовара.СуммаНДС;
КонецЦикла;
// Записываем сформированные движения
ПроводкиБухгалтерии.Записать();
КонецПроцедуры
С помощью этого подхода мы получаем точные забалансовые остатки по взаиморасчетам с детализацией до товара, которые можно анализировать любой стандартной обороткой, не вмешиваясь в логику закрытия счетов 62.01 и 62.02.
Этот способ идеально подходит для высоконагруженных систем, где важна скорость работы базы данных и масштабируемость. Вместо использования ресурсов регистра бухгалтерии мы переносим детальный оперативный учет по товарам во взаиморасчетах в отдельный спроектированный нами Регистр накопления.
Выясним преимущества этого решения: регистры накопления работают быстрее регистров бухгалтерии, поддерживают любое количество измерений и оптимизированы для построения сложных отчетов на Схеме компоновки данных (СКД).
Алгоритм действий следующий:
РасчетыСПокупателямиПоТоварам.Контрагент, Договор, ДокументРасчетов, Номенклатура (или НоменклатурнаяГруппа).Сумма.Рассмотрим пример кода для обработки проведения в модуле подписки на события:
Процедура ПередЗаписьюРегистрацииДвижений(Источник, Отказ, РежимПроведения) Экспорт
Если Отказ Или Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Проверим наличие движений по нашему регистру накопления
ТаблицаДвижений = Источник.Движения.РасчетыСПокупателямиПоТоварам;
ТаблицаДвижений.Очистить();
// Заполняем записи регистра при отгрузке товаров
Для Каждого СтрокаТЧ Из Источник.Товары Цикл
Движение = ТаблицаДвижений.ДобавитьПриход();
Движение.Период = Источник.Дата;
Движение.Контрагент = Источник.Контрагент;
Движение.Договор = Источник.ДоговорКонтрагента;
Движение.ДокументРасчетов = Источник.Ссылка;
Движение.Номенклатура = СтрокаТЧ.Номенклатура;
Движение.Сумма = СтрокаТЧ.Сумма + СтрокаТЧ.СуммаНДС;
КонецЦикла;
КонецПроцедуры
После реализации этой схемы мы сможем легко разработать отчет на СКД, который соединит данные о взаиморасчетах на счетах 62.01/62.02 с детальной товарной аналитикой из нашего специализированного регистра.
Давайте критически проанализируем текущий состав субконто на счете 62. Действительно ли нам нужны все три стандартные аналитики одновременно с добавлением четвертой?
Обратим внимание на важную деталь: каждый элемент справочника ДоговорыКонтрагентов в 1С жестко связан со своим владельцем — конкретным контрагентом. Свойство Владелец элемента справочника «Договоры» всегда указывает на Контрагента. Это означает, что аналитика «Контрагенты» является избыточной при наличии аналитики «Договоры», так как мы всегда можем программно или в настройках отчета получить контрагента из поля Договор.Владелец.
Используя это методологическое правило, мы можем создать новый субсчет (например, 62.31 «Расчеты по товарным категориям») со следующими тремя субконто:
Посмотрим на результат: мы не превысили ограничение в 3 субконто, не нарушили структуру СУБД, но получили необходимую глубину детализации непосредственно на счетах бухгалтерского учета. Единственной задачей программиста в данном случае будет настройка автоматического заполнения проводок по субсчету 62.31 в документах через расширение.
Часто требования добавить четвертую аналитику возникают из-за того, что пользователи ведут справочник договоров формально — создают одну запись под названием «Основной договор» на несколько лет ведения работы.
Разберем методологически правильный подход без программирования. Справочник ДоговорыКонтрагентов в 1С выполняет роль «разреза расчетов». Ничто не мешает нам заводить элементы этого справочника под конкретные хозяйственные задачи.
Если нам нужно видеть взаиморасчеты в разрезе товарных категорий или проектов, мы можем заводить элементы справочника «Договоры» под каждую такую категорию. Например:
При таком подходе юридический договор остается единым (мы можем указать его номер и дату в наименовании), но система разделяет финансовые потоки на уровне стандартного субконто Договоры. Это полностью исключает необходимость программирования и сохраняет базу данных в идеальном типовом состоянии.
Для наглядности сопоставим рассмотренные варианты в таблице, чтобы выбрать оптимальный путь реализации:
| Критерий сравнения | Добавление 4-го субконто (в лоб) | Доп. реквизиты БСП (Решение 1) | Забалансовый счет (Решение 2) | Параллельный регистр (Решение 3) | Выделение субсчета (Решение 4) |
|---|---|---|---|---|---|
| Сложность реализации | Высокая (нужно переписывать типовой код) | Низкая (настройка пользователем) | Средняя (работа в расширении) | Средняя (создание регистра) | Средняя (настройка субсчета) |
| Риски при обновлении 1С | Критические (риск потери данных) | Отсутствуют | Минимальные (код изолирован в расширении) | Минимальные | Низкие (новый субсчет) |
| Влияние на скорость базы | Существенное замедление всей СУБД | Не влияет | Незначительное | Незначительное | Незначительное |
| Работа закрытия месяца | Вызывает регулярные сбои и зависание сумм | Работает корректно | Работает корректно | Работает корректно | Требует ручного контроля зачета авансов |
Мы выяснили, что прямое добавление четвертого субконто к типовым счетам учета — это опасная практика, которая приводит к нестабильности системы 1С и трудностям при обновлении.
Для решения задачи детального учета взаиморасчетов рекомендуется использовать дополнительные реквизиты БСП, если отчетность нужна менеджменту без погружения в бухгалтерские проводки, либо использовать забалансовые счета и регистры накопления в расширении, если требуется жесткий программный контроль товарно-материальных потоков во взаиморасчетах.