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