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