Как в 1С переопределить субконто плана счетов на справочник из расширения

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При кастомизации типовых конфигураций (например, «1С:Бухгалтерия предприятия 3.0») разработчики часто сталкиваются с необходимостью добавления новой аналитики на счета бухгалтерского учета. Традиционно для этого используется механизм субконто. Однако если новая аналитика строится на базе справочника, который создан внутри расширения, возникает серьезная архитектурная преграда. План видов характеристик (ПВХ) ВидыСубконтоХозрасчетные, определяющий типы значений субконто, находится в основной конфигурации, и долгое время платформа не позволяла расширять его типы объектами из расширения.

В этой статье мы подробно разберем два подхода к решению данной задачи: исторический (классический) метод, требовавший частичного снятия конфигурации с поддержки, и современный метод, ставший доступным начиная с версии платформы «1С:Предприятие» 8.3.20, который позволяет решить проблему элегантно и без нарушения замка поддержки.

В чем сложность: коллизия типов в расширениях

Выясним причину, почему разработчики долгое время вели «борьбу за замочки» поддержки. План видов характеристик ВидыСубконтоХозрасчетные имеет свойство «Тип значения характеристик». Это составной тип данных, включающий в себя ссылки на все справочники и документы, которые могут выступать в роли субконто на плане счетов Хозрасчетный.

В старых версиях платформы действовало жесткое ограничение: составной тип данных ПВХ из основной конфигурации нельзя было расширить типом объекта, созданного в расширении. Платформа просто не видела новые метаданные расширения в контексте настройки типов ПВХ. Из-за этого разработчикам приходилось делать нелегкий выбор: либо отказываться от использования расширения для хранения данных и переносить новый справочник в основную конфигурацию (что требовало снятия «замочка» поддержки), либо искать сложные обходные пути.

Ниже мы подробно проанализируем оба варианта решения этой задачи.

Вариант 1. Классический метод (со снятием конфигурации с поддержки)

Если ваша база работает на платформе версии 8.3.19 и ниже (или в конфигурации установлен режим совместимости ниже 8.3.20), то расширить типы ПВХ напрямую через расширение не удастся. Рассмотрим пошагово, как правильно реализовать задачу в рамках классического подхода, сохранив при этом возможность относительно простых обновлений.

Для реализации этого метода выполним следующие действия:

  1. Откроем конфигуратор основной базы и перейдем в настройку поддержки (меню Конфигурация — Поддержка — Настройка поддержки).
  2. Включим возможность изменения конфигурации. При этом для всех объектов по умолчанию установим правило «Сохранять объект поставщика без изменений». Это позволит нам точечно изменять только нужные объекты, минимизируя проблемы при будущих обновлениях.
  3. Создадим новый справочник (например, _ДополнительнаяАналитика) непосредственно в основной конфигурации. Рекомендуется использовать уникальный префикс в имени справочника, чтобы избежать конфликтов имен при последующих обновлениях от фирмы «1С».
  4. Найдем в основной конфигурации план видов характеристик ВидыСубконтоХозрасчетные. Установим для него правило поддержки «Редактируется с сохранением поддержки».
  5. Откроем свойства ПВХ ВидыСубконтоХозрасчетные, перейдем к свойству «Тип значения характеристик» и добавим в список доступных типов наш новый справочник СправочникСсылка._ДополнительнаяАналитика.
  6. Обновим конфигурацию базы данных (клавиша F7).

После этого мы можем запустить систему в режиме «1С:Предприятие», зайти в План видов характеристик «Виды субконто хозрасчетные», создать новый элемент и привязать его к нашему новому справочнику. Затем созданное субконто можно будет без проблем добавить на любой бухгалтерский счет.

Главный минус этого подхода: конфигурация перестает быть на «чистой» поддержке. При каждом обновлении «1С:Бухгалтерии» разработчику придется вручную контролировать изменения в ПВХ ВидыСубконтоХозрасчетные, что увеличивает трудозатраты на сопровождение системы.

Вариант 2. Современный метод (без снятия с поддержки, платформа 8.3.20+)

Начиная с версии платформы 8.3.20, фирма «1С» внедрила революционное изменение: теперь разработчики могут расширять ранее заблокированные типы метаданных. В число этих объектов вошли определяемые типы, общие реквизиты и, самое главное, тип значения характеристик в планах видов характеристик (ПВХ).

Теперь мы можем полностью решить задачу внутри расширения, оставив основную конфигурацию на замке. Разберем этот процесс по шагам:

  1. Проверим режим совместимости: Убедимся, что и у основной конфигурации, и у нашего расширения в свойствах установлен режим совместимости не ниже «Версия 8.3.20». Если режим совместимости ниже, данный механизм работать не будет.
  2. Создадим справочник в расширении: Внутри нашего расширения создадим новый справочник (например, Расш1_НоваяАналитика).
  3. Заимствуем ПВХ: Найдем в дереве метаданных основной конфигурации ПВХ ВидыСубконтоХозрасчетные, кликнем по нему правой кнопкой мыши и выберем команду «Добавить в расширение».
  4. Расширим типы в ПВХ: Перейдем в дерево метаданных нашего расширения. Откроем свойства заимствованного ПВХ ВидыСубконтоХозрасчетные. Найдем свойство «Тип значения характеристик» и откроем редактор типа. В списке типов мы увидим наш справочник СправочникСсылка.Расш1_НоваяАналитика, созданный в расширении. Установим напротив него флажок и сохраним изменения.
  5. Применим изменения: Обновим конфигурацию базы данных.

Благодаря технологическим изменениям в платформе, системные типы (такие как ЛюбаяСсылка) и программные вызовы автоматически начинают учитывать типы объектов, добавленных через расширения. Это гарантирует корректную работу ПВХ во всех типовых механизмах БСП (Библиотеки Стандартных Подсистем).

Настройка субконто на счетах в режиме «1С:Предприятие»

После того как тип нового справочника добавлен в ПВХ (неважно, классическим или современным методом), нам необходимо связать его с планом счетов. Обратите внимание: вносить изменения в сам План счетов в конфигураторе не требуется. Настройка выполняется непосредственно в пользовательском режиме.

Выполним следующие шаги в режиме «1С:Предприятие»:

  1. Перейдем в раздел «Администрирование» — «Параметры учета» — «Настройки плана счетов» (или откроем План видов характеристик «Виды субконто хозрасчетные» напрямую через функции для технического специалиста).
  2. Создадим новый элемент в справочнике/ПВХ видов субконто. Назовем его, например, «Дополнительная аналитика проекта». В качестве типа значения выберем наш новый справочник из расширения.
  3. Перейдем в План счетов хозрасчетный, выберем интересующий нас счет (например, счет 60.01 или 76.09) и добавим в список субконто созданный нами элемент.

Теперь при проведении документов и формировании проводок по этому счету система будет требовать и позволять заполнять аналитику по нашему новому справочнику.

Программное добавление субконто на счета

В некоторых случаях ручное добавление субконто пользователями в режиме предприятия нежелательно или автоматизируется в рамках первоначального внедрения расширения. Посмотрим на пример кода, позволяющего программно добавить новое субконто на определенный счет при первом запуске расширения или через обработку обслуживания.

Рассмотрим следующий программный код:


Процедура ДобавитьНовоеСубконтоНаСчет(КодСчета, ИмяСубконто) Экспорт
    
    // Инициализируем поиск счета в плане счетов Хозрасчетный
    СчетСсылка = ПланыСчетов.Хозрасчетный.НайтиПоКоду(КодСчета);
    Если СчетСсылка.Пустая() Тогда
        ВызватьИсключение "Указанный счет " + КодСчета + " не найден в плане счетов!";
    КонецЕсли;
    
    // Ищем вид субконто в плане видов характеристик
    ВидСубконтоСсылка = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НайтиПоНаименованию(ИмяСубконто);
    Если ВидСубконтоСсылка.Пустая() Тогда
        ВызватьИсключение "Вид субконто '" + ИмяСубконто + "' не найден в системе!";
    КонецЕсли;
    
    СчетОбъект = СчетСсылка.ПолучитьОбъект();
    
    // Проверим, не добавлено ли данное субконто ранее
    СубконтоУжеДобавлено = Ложь;
    Для Каждого ТекущаяСтрока Из СчетОбъект.ВидыСубконто Цикл
        Если ТекущаяСтрока.ВидСубконто = ВидСубконтоСсылка Тогда
            СубконтоУжеДобавлено = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    // Если аналитики еще нет на счете, добавим ее
    Если Не СубконтоУжеДобавлено Тогда
        // Проверим лимит количества субконто на счете (обычно в БП 3.0 разрешено до 3 субконто)
        Если СчетОбъект.ВидыСубконто.Количество() >= 3 Тогда
            ВызватьИсключение "Превышено максимальное количество субконто на счете " + КодСчета;
        КонецЕсли;
        
        НоваяСтрока = СчетОбъект.ВидыСубконто.Добавить();
        НоваяСтрока.ВидСубконто = ВидСубконтоСсылка;
        НоваяСтрока.Предопределенное = Ложь; // Указываем, что субконто добавлено пользователем/программно
        
        Попытка
            СчетОбъект.Записать();
            ЗаписьЖурналаРегистрации("Расширение.НастройкаСубконто",
                УровеньЖурналаРегистрации.Информация, , ,
                "Успешно добавлено субконто " + ИмяСубконто + " на счет " + КодСчета);
        Исключение
            ЗаписьЖурналаРегистрации("Расширение.НастройкаСубконто",
                УровеньЖурналаРегистрации.Ошибка, , ,
                "Ошибка при записи счета " + КодСчета + ": " + ОписаниеОшибки());
            ВызватьИсключение "Не удалось записать изменения в план счетов: " + ОписаниеОшибки();
        КонецПопытки;
    КонецЕсли;
    
КонецПроцедуры

Этот код безопасно проверяет наличие счета и вида субконто, контролирует ограничение платформы на количество субконто (в типовом решении это 3 разрешенных субконто на одном счете) и корректно дописывает аналитику в коллекцию видов субконто счета.

Рекомендации разработчикам

Для того чтобы внедрение новой аналитики прошло успешно и не вызвало сбоев в работе информационной базы, рекомендуем придерживаться следующих правил:

Таким образом, эволюция платформы «1С:Предприятие» позволила полностью решить застарелую проблему расширения типов субконто. Использование платформы версии 8.3.20 и выше навсегда избавляет разработчиков от необходимости снимать конфигурацию с поддержки ради внедрения кастомной аналитики на планах счетов.

← На главную