Разработка на платформе 1С:Предприятие 8.3 предоставляет богатый инструментарий, однако опытные разработчики часто сталкиваются с ограничениями стандартного дерева метаданных. В рамках данной статьи мы проанализируем основные "дефицитные" области — от структуры хранения данных до удобства IDE — и рассмотрим практические способы решения этих задач с помощью текущих механизмов платформы.
Одной из первых идей в обсуждении стала нехватка объекта ОбщаяТабличнаяЧасть. В типовых конфигурациях (например, в БСП) этот функционал эмулируется множественным копированием состава ТЧ (контактная информация, дополнительные реквизиты). Разберем, как можно реализовать подобное изящнее:
ОпределяемыйТип.ВладелецОбщейТЧ. Это позволяет хранить структурированные данные для неограниченного списка объектов без изменения их структуры.ОпределяемымТипом в качестве владельца.Пример кода для программного обращения к такой «псевдо-ТЧ» на базе регистра сведений:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КонтактнаяИнформация.Вид,
| КонтактнаяИнформация.Представление
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Объект";
Запрос.УстановитьПараметр("Объект", СсылкаНаОбъект);
Результат = Запрос.Выполнить().Выгрузить();
Платформа 1С не поддерживает ТЧ внутри другой ТЧ («дерево» внутри документа). Это часто требуется в зарплатных решениях или сложных производственных спецификациях. Посмотрим на алгоритм реализации такой структуры через связь по индексу строки:
ОсновнаяТЧ и ПодчиненнаяТЧ.ПодчиненнойТЧ добавим реквизит КлючСвязи (тип Число).ОсновнойТЧ будем фильтровать данные в ПодчиненнойТЧ по номеру строки или уникальному идентификатору ключа.Важно помнить: при удалении строки в основной таблице необходимо программно очищать связанные строки в подчиненной, чтобы не оставлять «мусор» в базе данных.
Многие разработчики критикуют RLS (Record Level Security) за дичайшее снижение производительности. Выясним причину: классический RLS добавляет в каждый SQL-запрос сложные соединения (JOIN), что перегружает оптимизатор СУБД. Рассмотрим современные пути решения:
&ПараметрыСеанса для хранения предопределенных списков разрешенных значений (например, разрешенных организаций).В дереве метаданных 1С индекс — это просто галочка «Индексировать» на реквизите. Однако профессиональная разработка требует составных индексов. Рассмотрим, как их получить:
Поскольку напрямую в справочнике или документе создать составной индекс (по нескольким полям) нельзя, мы можем использовать Регистры Сведений. В регистрах индексы строятся по совокупности измерений. Если нам нужен быстрый поиск по комбинации Поле1 + Поле2 + Поле3, мы создаем РС, где эти поля являются измерениями. Платформа автоматически создаст эффективный индекс в SQL.
При работе с огромными конфигурациями (вроде ERP 2.5) дерево метаданных становится неповоротливым. Проанализируем способы ускорения работы:
_МояРазработка) и включите туда только те объекты, с которыми работаете сейчас. Отфильтруйте дерево по этой подсистеме.TurboConf или переход на EDT (1C:Enterprise Development Tools), если требуется полноценная работа с Git и современный Intellisense.Разберем жалобы на «спагетти-код» в управляемых формах, где клиентские и серверные процедуры перемешаны. Для повышения читаемости кода рекомендуется:
#Область и #КонецОбласти для группировки процедур по назначению (Интерфейс, ОбработчикиСобытий, СлужебныйПрограммныйИнтерфейс).Оповещение), так как старые модальные окна блокируют работу и не поддерживаются в веб-клиенте.Таким образом, несмотря на кажущуюся консервативность дерева метаданных, гибкость платформы 1С позволяет реализовать практически любую архитектурную задумку. Главное — понимать внутренние механизмы работы СУБД и эффективно использовать имеющиеся типы объектов для нетипичных задач.