Переход с устаревшей платформы «1С:Предприятие 7.7» на современную «1С:Бухгалтерия предприятия 3.0» (БП 3.0) часто преподносит сюрпризы технического характера. Один из классических вызовов, с которым сталкиваются разработчики и бухгалтеры, — это перенос забалансовых счетов с избыточной аналитикой. В системе «1С 7.7» на забалансовом счете (например, на счете 005 «Оборудование, принятое для монтажа») могло быть настроено 4, 5 или даже больше субконто. В современных же типовых решениях на платформе «1С 8.3» План счетов «Хозрасчетный» жестко ограничен максимум тремя субконто на одном счете.
В этой статье мы подробно проанализируем, почему попытка просто «расширить» лимит субконто в Конфигураторе является критической ошибкой, и разберем эффективные архитектурные способы решения этой задачи, которые позволят сохранить конфигурацию типовой и обеспечат ее быструю работу.
На первый взгляд кажется, что проблема решается очень просто. Достаточно открыть Конфигуратор, зайти в свойства Плана счетов Хозрасчетный, найти свойство Максимальное количество видов субконто и изменить значение с 3 на 5. Однако делать это категорически не рекомендуется по следующим техническим причинам:
_AccRgED в MS SQL или PostgreSQL). Для быстрого извлечения остатков и оборотов СУБД строит сложные составные индексы. Каждое дополнительное субконто — это составной тип данных (содержит идентификатор типа и ссылку на объект). Добавление 4-го и 5-го субконто приводит к тому, что индекс СУБД раздувается, превышает допустимые лимиты по размеру ключа индекса (например, 900 байт в старых версиях MS SQL) или вовсе перестает быть эффективным. Проведение любых документов по регистру бухгалтерии начинает критически тормозить.Давайте вместе разберем наиболее правильные и безопасные способы переноса пяти аналитик (Контрагенты, Договоры, Оборудование, Склад, НоменклатурнаяГруппа) в типовую конфигурацию БП 3.0.
Давайте внимательно проанализируем структуру данных в «1С:Предприятии 8.3». Архитектура справочников здесь гораздо более развита, чем в старой «семерке». Нам не требуется хранить все 5 аналитик в виде отдельных субконто на счете, поскольку между ними существуют жесткие логические связи:
ДоговорыКонтрагентов в БП 3.0 является подчиненным справочнику Контрагенты. Это значит, что каждый договор жестко связан со своим владельцем (контрагентом). Хранить на счете одновременно и Контрагента, и Договор в качестве двух разных субконто — это грубое дублирование данных. Нам достаточно оставить на счете только субконто Договоры. Если нам потребуется вывести Контрагента в Оборотно-сальдовой ведомости (ОСВ) или в любом другом отчете, мы легко сможем сделать это через точку: Договор.Владелец.Номенклатура (который выступает в роли оборудования) сам по себе может быть связан с определенной номенклатурной группой. Если эта связь однозначная, то держать Номенклатурную группу в качестве отдельного субконто на счете также нет никакого практического смысла. Ее можно получить напрямую из свойств самого оборудования.Таким образом, мы без потери информативности можем сократить наши 5 субконто до стандартных 3-х:
Владелец).Посмотрим, как вывести контрагента в стандартных отчетах. При формировании Оборотно-сальдовой ведомости по счету перейдем в настройки отчета, откроем вкладку «Группировка», нажмем кнопку «Добавить», выберем поле Договор, раскроем его плюсиком и выберем поле Владелец (это и есть наш Контрагент). Система автоматически сформирует отчет в нужном нам разрезе.
Что делать, если Номенклатурная группа или какое-то иное свойство оборудования не имеет жесткой связи в справочнике или нам требуется фиксировать уникальные свойства непосредственно для конкретной операции? В БП 3.0 интегрирована Библиотека Стандартных Подсистем (БСП), которая содержит мощный инструмент — дополнительные реквизиты и сведения.
Мы можем настроить это прямо в режиме «1С:Предприятие» без изменения конфигурации. Давайте разберем этот процесс по шагам:
Номенклатура (или создадим свойство для конкретного документа, если это необходимо).СправочникСсылка.НоменклатурныеГруппы.Теперь пользователи смогут заполнять этот реквизит непосредственно в карточке номенклатуры (оборудования). Чтобы использовать этот доп. реквизит в отчетах (например, в ОСВ по счету 005), выполним следующие действия:
Номенклатура), раскроем его и выберем созданный нами дополнительный реквизит «Номенклатурная группа оборудования».Мы получили гибкую систему аналитики без изменения программного кода и без перегрузки таблиц итогов регистра бухгалтерии!
Бывают уникальные ситуации, когда учет оборудования на забалансовом счете является настолько специфическим и многомерным, что три субконто действительно никак не могут покрыть все потребности бизнеса. Например, если одновременно требуются разрезы по складам, договорам, конкретным спецификациям, физическим лицам, проектам и статусам оборудования.
В этом случае использовать бухгалтерский План счетов вообще не рекомендуется. Гораздо более грамотным архитектурным решением будет создание собственного регистра накопления. Чтобы база данных оставалась типовой и легко обновлялась, мы реализуем это через механизм Расширений конфигурации.
Давайте детально рассмотрим этот способ:
Расш1_ОстаткиОборудованияНаУстановке) с видом регистра Остатки.Контрагент (тип СправочникСсылка.Контрагенты)Договор (тип СправочникСсылка.ДоговорыКонтрагентов)Оборудование (тип СправочникСсылка.Номенклатура)Склад (тип СправочникСсылка.Склады)НоменклатурнаяГруппа (тип СправочникСсылка.НоменклатурныеГруппы)Количество (тип Число).ОперацияБух или специализированный документ поступления оборудования). Переопределим его модуль проведения с помощью аннотации &После.Давайте посмотрим на пример программного кода, который будет записывать данные в наш регистр накопления при проведении документа:
&После("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведенияПосле(Отказ, РежимПроведения)
// Создаем набор записей нашего регистра накопления в расширении
НаборЗаписей = РегистрыНакопления.Расш1_ОстаткиОборудованияНаУстановке.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
// Перебираем табличную часть документа и формируем движения
Для Каждого СтрокаТЧ Из ЭтотОбъект.Товары Цикл
Движение = НаборЗаписей.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = ЭтотОбъект.Дата;
// Заполняем все необходимые нам 5 аналитик напрямую
Движение.Контрагент = СтрокаТЧ.ДоговорКонтрагента.Владелец;
Движение.Договор = СтрокаТЧ.ДоговорКонтрагента;
Движение.Оборудование = СтрокаТЧ.Номенклатура;
Движение.Склад = ЭтотОбъект.Склад;
Движение.НоменклатурнаяГруппа = СтрокаТЧ.НоменклатурнаяГруппа;
Движение.Количество = СтрокаТЧ.Количество;
КонецЦикла;
// Записываем сформированные движения в базу данных
НаборЗаписей.Записать();
КонецПроцедуры
Преимущество этого метода колоссально: мы получаем полноценный многомерный учет с неограниченным количеством аналитик. Регистры накопления оптимизированы под хранение остатков гораздо лучше планов счетов, СУБД работает с ними максимально быстро. Отчетность по такому регистру легко строится с помощью Универсального отчета в режиме 1С:Предприятие.
Существует еще один простой практический прием, упомянутый участниками форума. Если одна из ваших аналитик имеет фиксированное и очень небольшое количество значений (например, у вас всего 2 или 3 склада, на которых может храниться оборудование по 005 счету), вы можете вынести эту аналитику на уровень самого плана счетов.
Для этого в режиме «1С:Предприятие» (без использования Конфигуратора) мы можем создать несколько забалансовых субсчетов:
005.01 «Оборудование на Основном складе»005.02 «Оборудование на Оптовом складе»При таком подходе аналитика по Складу уходит непосредственно в структуру счетов, а на каждом субсчете освобождается одно аналитическое поле субконто, которое мы можем занять под другие нужды (например, под Договор или Номенклатуру). Конфигурация при этом остается полностью типовой, и никаких проблем с последующими обновлениями у вас не возникнет.
При переносе остатков и проектировании учета в «1С:Бухгалтерии 3.0» всегда старайтесь избегать механического наращивания количества субконто на счетах. Платформа 1С 8.3 предоставляет гораздо более изящные и производительные инструменты.
Для решения вашей задачи мы рекомендуем использовать Способ 1 (Свертка аналитики) как наиболее естественный и простой. Избавьтесь от дублирования связок «Контрагент-Договор» и перенесите аналитику по номенклатурным группам в свойства самой номенклатуры. Это позволит вам уложиться в стандартное ограничение из 3-х субконто и гарантирует стабильную, быструю и бесперебойную работу вашей системы учета на долгие годы.