Переход с одной конфигурации 1С на другую, особенно с обычных форм на управляемые, всегда связан с множеством вопросов, касающихся переноса существующей функциональности и данных. Особое внимание следует уделить нетиповым реквизитам и дополнительным данным, которые были созданы в старой системе. В данной статье мы рассмотрим, как эффективно перенести нетиповые реквизиты из УТ 10.3 на обычных формах в УНФ 3.0 на управляемых формах с использованием механизма БСП «Дополнительные реквизиты» и расширений конфигурации, а также проанализируем вопросы производительности, работы с табличными частями и интеграции с внешними системами, такими как Битрикс.
При миграции на новую конфигурацию, такую как УНФ 3.0, которая активно использует Библиотеку стандартных подсистем (БСП), возникает ключевой вопрос: стоит ли переносить существующие нетиповые реквизиты в механизм «Дополнительные реквизиты и сведения» БСП, или лучше создавать их как обычные реквизиты в расширении или даже в основной конфигурации?
Механизм «Дополнительные реквизиты и сведения» в 1С 8.3 разработан для того, чтобы пользователи могли самостоятельно добавлять дополнительную информацию к элементам справочников и документов без привлечения программистов и без изменения конфигурации. Это позволяет избежать проблем с обновлениями программы и сохранить конфигурацию на поддержке. Дополнительные реквизиты являются частью объекта и могут отображаться на его форме, а дополнительные сведения хранятся в регистре сведений и доступны по команде из элемента.
Преимущества использования дополнительных реквизитов:
Однако, некоторые специалисты считают дополнительные реквизиты своего рода «костылем» для сложных случаев, предпочитая добавлять объекты напрямую в конфигурацию, если заказчик не против снятия с поддержки или если речь идет о расширении.
Создание собственных объектов метаданных (справочников, реквизитов) в конфигурации или расширении:
Если объем доработок большой, затрагивает создание новых подсистем, или требуется сложная логика, возможно, придется создавать объекты в основной конфигурации или в расширении. Это дает полный контроль над структурой данных и поведением, но может усложнить обновления или иметь свои риски при использовании расширений.
Если вы планируете добавить несколько подчиненных справочников, как в случае с марками авто и их особенностями, то создание их напрямую в основной конфигурации (с сохранением поддержки) или в расширении может быть более подходящим решением, поскольку механизм дополнительных реквизитов имеет ограничения на работу с комплексными структурами.
Один из ключевых вопросов при переносе большого количества нетиповых реквизитов в механизм дополнительных реквизитов — это влияние на производительность запросов, особенно при работе с номенклатурой (55 тыс. позиций и множество характеристик). Возникают опасения, что извлечение данных из таблиц дополнительных реквизитов может замедлить работу.
Механизм хранения дополнительных реквизитов:
Номенклатура) или в отдельном регистре сведений.Несмотря на то что данные хранятся в отдельных таблицах, механизм БСП спроектирован для эффективной работы с ними. Запросы к этим данным оптимизированы. В целом, система «Дополнительные реквизиты» является мощным функционалом, который во многих случаях позволяет отказаться от снятия конфигурации с поддержки или внесения ненужных изменений.
На скорость обработки запросов может влиять размер списка значений, если дополнительный реквизит использует свой собственный список значений. Для больших объемов данных или сложных запросов, объединяющих множество таблиц дополнительных реквизитов, мы рекомендуем провести нагрузочное тестирование. Однако, в большинстве типовых случаев, производительность не является критичным фактором замедления системы, если запросы составлены правильно и используются индексы.
Важно помнить, что дополнительные реквизиты добавляют еще один уровень в структуру данных, требуя объединения таблиц для получения полной информации об объекте. Это, теоретически, может быть медленнее, чем прямой доступ к реквизитам в основной таблице объекта. Однако, преимущества в удобстве обновлений и гибкости часто перевешивают этот потенциальный недостаток.
Предположим, у нас есть справочник «Марка авто», и в карточке номенклатуры необходимо указать несколько марок, подходящих для данной запчасти. Стандартные дополнительные реквизиты в 1С не предназначены для создания табличных частей или для множественного выбора сложных типов данных, таких как ссылки на справочники, по умолчанию. Тип значения «Дополнительное значение» позволяет выбрать одно значение из предопределенного списка, что не подходит для множественного выбора.
Для реализации множественного выбора значений для одного дополнительного реквизита номенклатуры или полноценной табличной части со ссылками на справочник, нам потребуются более сложные подходы:
Одним из вариантов является создание отдельного регистра сведений (возможно, в расширении или основной конфигурации), где:
Номенклатура) и ссылка на элемент справочника «Марка авто».Такой подход позволит хранить произвольное количество значений для одной номенклатуры. Однако, это усложнит запросы, так как потребуется дополнительное объединение с регистром сведений. На форму номенклатуры такую табличную часть можно будет вывести программно, используя данные из этого регистра.
Мы можем программно создать табличную часть на форме элемента номенклатуры через расширение, не заимствуя саму форму в расширение. Эта табличная часть будет связана с данными из созданного регистра сведений или другого механизма хранения множественных значений. Этот подход требует большей программной реализации, но позволяет сохранить форму типовой и избежать проблем с обновлениями.
Для реализации «множественного реквизита» можно рассмотреть вариант создания дополнительного реквизита с типом Массив. Это позволяет хранить набор значений для одного элемента данных. Физически каждый такой реквизит порождает отдельную таблицу в базе данных, которая связывается с основной таблицей по полю «Контейнер». Однако, работа с таким типом в пользовательском интерфейсе и при отборах может быть неочевидной и потребует доработок. Существуют специализированные разработки, которые позволяют указать произвольное количество значений и отображать их как список. При этом в комментарии к такому допреквизиту может быть указано «Множественный», чтобы расширение его распознало.
В любом случае, если требуется сложная структура данных с подчинением или множественным выбором, как в случае справочника «Марка авто», нам придется создавать этот справочник в конфигурации (или расширении), а не полагаться исключительно на механизм дополнительных реквизитов БСП.
Вопрос интеграции с Битриксом крайне важен, особенно при планировании нетипового обмена и наличии сложных условий по выгрузке товара. Ранее мы выяснили, что Битрикс отлично работает с дополнительными реквизитами 1С.
Основные аспекты интеграции с Битрикс:
Таким образом, использование дополнительных реквизитов для Битрикса является предпочтительным вариантом, так как это снижает объем работ по адаптации обмена и позволяет использовать типовые механизмы. Однако, для ваших специфических условий выгрузки потребуется разработка собственного модуля обмена или серьезная доработка типового, который будет учитывать все ваши нетиповые реквизиты, независимо от способа их хранения.
Расширения конфигурации – это мощный инструмент для доработки типовых решений, позволяющий сохранять конфигурацию на поддержке и упрощать процесс обновлений. Они позволяют вносить изменения, не затрагивая основной код, и сократить затраты на адаптацию решений.
Преимущества расширений:
Риски и ограничения расширений:
Учитывая, что вы планируете использовать расширения только для кода и заимствования форм, важно понимать нюансы работы с формами.
Одна из самых «дурацких» (как выразился один из участников обсуждения) проблем при использовании расширений возникает при работе с формами. Если форма заимствуется в расширение и на ней производятся изменения (добавление новых элементов, групп и т.д.), то после обновления основной конфигурации эти изменения не будут отражены на заимствованной форме. Ваша форма в расширении останется в том виде, в каком вы ее заимствовали 5 лет назад. Каждый раз после обновления типовой конфигурации ее придется проверять и, возможно, адаптировать вручную.
Рекомендации по работе с формами в расширениях:
Лучше всего не заимствовать и не изменять заимствованную форму напрямую. Если вам нужно добавить на типовую форму элементы (например, поле для дополнительного реквизита или табличную часть), делайте это программно.
Для добавления новых реквизитов и элементов управления на управляемую форму программно используйте методы платформы 1С. Это позволяет основной форме обновляться, а ваши кастомные элементы будут добавляться динамически при открытии формы.
Например, для программного изменения состава реквизитов управляемой формы на сервере, вы можете использовать методы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Добавляем реквизит на форму
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Новый РеквизитФормы("МойНовыйРеквизит", Новый ОписаниеТипов("Строка"), "Объект"));
ИзменитьРеквизиты(МассивРеквизитов);
// Теперь добавляем элемент управления на форму, который будет связан с этим реквизитом
Элементы.Добавить("МойНовыйЭлемент", Тип("ПолеФормы"), Элементы.ГруппаВажныхРеквизитов);
ЭлементФормы = Элементы.МойНовыйЭлемент;
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.ПутьКДанным = "МойНовыйРеквизит";
// ... Дополнительные настройки элемента
КонецПроцедуры
Операция изменения состава реквизитов формы является ресурсоемкой и выполняется пакетным образом. Программно добавленные элементы можно привязать к обработчикам событий, создавая их также программно.
Этот подход позволяет гарантировать, что при обновлении типовой конфигурации новые элементы подтянутся, а ваши программно добавленные элементы будут корректно отображаться, не "замораживая" форму на старой версии.
В нашем случае, когда речь идет о переходе на УНФ 3.0 с большим объемом нетиповых данных из УТ 10.3 (авторазбор, 55 тыс. номенклатурных позиций с характеристиками и множеством реквизитов), мы рекомендуем комбинированный подход:
ИзменитьРеквизиты и Добавить, чтобы ваши доработки были устойчивы к обновлениям конфигурации.Выбор между обычными реквизитами (в конфигурации/расширении) и дополнительными реквизитами (БСП) зависит от специфики задачи, требований к обновлению и объема кастомизации. Дополнительные реквизиты предпочтительны для гибкого добавления полей пользователем, когда не требуется сложная логика или специфические типы хранения данных. В случаях, когда требуется жесткая структура данных, подчинение или множественный выбор, придется обращаться к созданию собственных объектов метаданных.
Проанализируйте вашу текущую структуру данных и будущие потребности, чтобы принять наиболее оптимальное решение, которое обеспечит баланс между функциональностью, производительностью и удобством сопровождения системы в будущем.