При переходе на новые версии типовых конфигураций (например, 1С:Управление торговлей 11) перед разработчиком часто встает вопрос: как перенести многочисленные доработки и кастомные поля так, чтобы система осталась максимально «чистой» и легко обновляемой? В 1С существует три основных механизма для хранения дополнительных данных: штатные реквизиты (в конфигурации или расширении), дополнительные реквизиты и дополнительные сведения. Каждый из них имеет свои технические особенности, ограничения по производительности и нюансы в администрировании. Разберем подробно, какой механизм выбрать в зависимости от конкретной задачи.
Рассмотрим в первую очередь дополнительные сведения, так как это наиболее «щадящий» для системы вариант. Этот механизм базируется на использовании общего регистра сведений (обычно ДополнительныеСведения), где данные хранятся в разрезе объектов (измерения Объект и Свойство).
Ключевые особенности и преимущества:
Записать() самого документа или справочника. Это критически важно для высоконагруженных систем, так как позволяет избежать блокировок объекта.Однако помните, что дополнительные сведения обычно не выводятся на форму объекта по умолчанию в те места, где пользователь привык видеть важные данные. Они чаще всего доступны по отдельной кнопке «Дополнительные сведения» на панели инструментов.
Дополнительные реквизиты — это часть подсистемы «Свойства» БСП. В отличие от сведений, они хранятся в специальной табличной части объекта (например, ДополнительныеРеквизиты у документа ЗаказКлиента).
Когда стоит выбрать этот вариант:
Проанализируем технический аспект: запись дополнительного реквизита всегда влечет за собой перезапись всего объекта. Это означает выполнение всех процедур ПередЗаписью и ПриЗаписи, что может замедлить работу системы при большом количестве проверок в модулях.
Если количество новых полей исчисляется десятками (как в случае автора темы — до 30 реквизитов), стоит серьезно рассмотреть добавление их в структуру объекта через расширение или напрямую в конфигурацию. Рассмотрим, почему это может быть лучше программных «костылей» БСП.
Производительность БД и SQL-запросы:
Штатный реквизит — это реальная колонка в таблице базы данных. Посмотрим на преимущества этого подхода:
Важное замечание по ограничениям СУБД: При добавлении большого количества полей (особенно типа Строка неограниченной длины или длинных строк) нужно помнить об ограничении размера строки в MS SQL Server (около 8060 байт). Добавление 30+ объемных реквизитов может приблизить вас к этому лимиту, что вызовет ошибку при реструктуризации.
Выясним причину, по которой опытные разработчики часто выбирают разные пути для разных задач. Для этого проведем сравнительный анализ по ключевым критериям:
1. Скорость разработки и внедрения:
Доп. реквизиты создаются «на лету» в режиме 1С:Предприятие. Не нужен монопольный доступ, не нужно выгонять пользователей для обновления конфигурации. Это «быстрое» решение. Однако программная работа с ними (чтение и запись через код) требует использования функций БСП, что чуть сложнее, чем простое обращение через точку.
Для программного обращения к дополнительным свойствам мы используем методы подсистемы УправлениеСвойствами. Рассмотрим пример получения значения:
// Пример получения значения дополнительного реквизита
ЗначениеСвойства = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаОбъект, "ИмяСвойства");
2. Удобство обновлений:
Штатные реквизиты в основной конфигурации делают её «снятой с поддержки», что усложняет жизнь при обновлении релизов. Расширения решают эту проблему, но при серьезных изменениях структуры со стороны 1С (например, если 1С сама добавит реквизит с таким же именем), расширение может «отвалиться» или потребовать переработки.
3. Бизнес-логика:
Если реквизиты нужны для всех экземпляров объектов (например, каждый Заказ Клиента обязан иметь поле «Тип доставки»), лучше использовать штатный реквизит. Если же поле нужно лишь для 5% документов (например, специфическая пометка для узкого круга клиентов), то механизм дополнительных реквизитов будет более оправдан архитектурно.
Подводя итог обсуждению, сформулируем алгоритм выбора:
Разберем еще один нюанс: блокировки. Если в вашей базе одновременно работают сотни пользователей, запись дополнительных реквизитов (которые живут внутри объекта) может стать «бутылочным горлышком». В этом случае вынос части данных в дополнительные сведения (в регистр) значительно повысит параллельность работы системы.
Таким образом, для задачи переноса 20-30 реквизитов оптимальным будет комбинированный подход: критически важные для поиска и учета поля вынести в штатные реквизиты (через расширение), а второстепенные, справочные данные перенести в механизм дополнительных свойств БСП.