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