Чего не хватает в дереве метаданных 1С и как реализовать недостающий функционал существующими средствами платформы

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

Разработка на платформе 1С:Предприятие 8.3 предоставляет богатый инструментарий, однако опытные разработчики часто сталкиваются с ограничениями стандартного дерева метаданных. В рамках данной статьи мы проанализируем основные "дефицитные" области — от структуры хранения данных до удобства IDE — и рассмотрим практические способы решения этих задач с помощью текущих механизмов платформы.

Реализация «Общих табличных частей»

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

  1. Использование Регистров Сведений (РС): Рассмотрим вариант создания регистра с измерением типа ОпределяемыйТип.ВладелецОбщейТЧ. Это позволяет хранить структурированные данные для неограниченного списка объектов без изменения их структуры.
  2. Определяемые типы и Общие реквизиты: Проанализируем ситуацию, когда нам нужно добавить одинаковый набор полей в несколько документов. Вместо создания ТЧ, мы можем использовать механизм дополнительных реквизитов (через БСП) или создать подчиненный справочник с ОпределяемымТипом в качестве владельца.

Пример кода для программного обращения к такой «псевдо-ТЧ» на базе регистра сведений:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	КонтактнаяИнформация.Вид,
    |	КонтактнаяИнформация.Представление
    |ИЗ
    |	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |	КонтактнаяИнформация.Объект = &Объект";

Запрос.УстановитьПараметр("Объект", СсылкаНаОбъект);
Результат = Запрос.Выполнить().Выгрузить();

Проблема вложенных табличных частей

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

  1. Создадим две табличные части: ОсновнаяТЧ и ПодчиненнаяТЧ.
  2. В ПодчиненнойТЧ добавим реквизит КлючСвязи (тип Число).
  3. При редактировании строки в ОсновнойТЧ будем фильтровать данные в ПодчиненнойТЧ по номеру строки или уникальному идентификатору ключа.

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

Оптимизация RLS: от «тормозов» к производительности

Многие разработчики критикуют RLS (Record Level Security) за дичайшее снижение производительности. Выясним причину: классический RLS добавляет в каждый SQL-запрос сложные соединения (JOIN), что перегружает оптимизатор СУБД. Рассмотрим современные пути решения:

Управление индексами и выборками

В дереве метаданных 1С индекс — это просто галочка «Индексировать» на реквизите. Однако профессиональная разработка требует составных индексов. Рассмотрим, как их получить:

Поскольку напрямую в справочнике или документе создать составной индекс (по нескольким полям) нельзя, мы можем использовать Регистры Сведений. В регистрах индексы строятся по совокупности измерений. Если нам нужен быстрый поиск по комбинации Поле1 + Поле2 + Поле3, мы создаем РС, где эти поля являются измерениями. Платформа автоматически создаст эффективный индекс в SQL.

Улучшение навигации в Конфигураторе

При работе с огромными конфигурациями (вроде ERP 2.5) дерево метаданных становится неповоротливым. Проанализируем способы ускорения работы:

Модульность и «чистый код»

Разберем жалобы на «спагетти-код» в управляемых формах, где клиентские и серверные процедуры перемешаны. Для повышения читаемости кода рекомендуется:

  1. Вынос логики в модули менеджера: Если процедура не требует контекста формы, рассмотрите возможность её переноса в модуль менеджера объекта. Это упрощает тестирование и повторное использование кода.
  2. Области (Region): Активно используйте директивы #Область и #КонецОбласти для группировки процедур по назначению (Интерфейс, ОбработчикиСобытий, СлужебныйПрограммныйИнтерфейс).
  3. Асинхронность: Переходите на использование асинхронных вызовов (Оповещение), так как старые модальные окна блокируют работу и не поддерживаются в веб-клиенте.

Таким образом, несмотря на кажущуюся консервативность дерева метаданных, гибкость платформы 1С позволяет реализовать практически любую архитектурную задумку. Главное — понимать внутренние механизмы работы СУБД и эффективно использовать имеющиеся типы объектов для нетипичных задач.

← На главную