При сопровождении типовых конфигураций на обычных формах (например, «1С:Управление торговлей 10.3») разработчики часто сталкиваются с ситуацией, когда во внешней обработке на командной панели присутствуют стандартные кнопки Сохранить настройки и Восстановить настройки, однако их свойства в конфигураторе заблокированы, а при нажатии в режиме «1С:Предприятие» не удается попасть в модуль точки останова. Выясним причину такого поведения платформы и рассмотрим, как правильно настроить или переопределить данный функционал.
Проанализируем архитектуру работы командных панелей в обычном интерфейсе 1С:Предприятия. Такое поведение элементов обусловлено следующими факторами:
Сохранять значения либо в списке сохраняемых реквизитов не выбрано ни одной позиции.Разберем по шагам, как активировать стандартный механизм в конфигураторе для обычной формы:
Сохранять значения и установим соответствующий флаг.Сохраняемые значения нажмем кнопку выбора и отметим флагами те реквизиты обработки или реквизиты формы, значения которых требуется запоминать между сеансами работы.ВосстанавливатьЗначенияПриОткрытии, чтобы последние сохраненные параметры применялись автоматически при старте формы.После включения этих свойств кнопки на командной панели станут активными и при нажатии откроют системное окно работы с настройками.
Поскольку войти внутрь стандартного кода платформы нельзя, посмотрим, как перехватить сохраняемые и восстанавливаемые данные программно. Для этого в модуле обычной формы предусмотрены специализированные обработчики событий.
В палитре свойств формы перейдем к событиям и назначим обработчики для ПередСохранениемЗначений и ПослеВосстановленияЗначений. В этих процедурах можно установить точку останова и проанализировать структуру передаваемых данных:
Процедура ПередСохранениемЗначений(Отказ, СтруктураНастроек)
// Здесь можно установить точку останова для отладки
// В параметре СтруктураНастроек передаются сохраняемые реквизиты
// Пример программного добавления значения, не связанного с реквизитами формы напрямую:
СтруктураНастроек.Вставить("ДополнительныйПараметр", "ЗначениеПоУмолчанию");
// При необходимости операцию сохранения можно прервать:
// Отказ = Истина;
КонецПроцедуры
Процедура ПослеВосстановленияЗначений(СтруктураНастроек)
// Точка останова для проверки прочитанных настроек
Если СтруктураНастроек.Свойство("ДополнительныйПараметр") Тогда
Сообщить("Восстановлен дополнительный параметр: " + СтруктураНастроек.ДополнительныйПараметр);
КонецЕсли;
КонецПроцедуры
Важно учитывать ограничение платформы: стандартный механизм связывает сохраненные настройки с конкретным путем к файлу внешней обработки на диске либо с ее внутренним именем. Это создает проблемы в двух случаях:
Если требуется полный контроль над процессом отладки или надежная работа при запуске из справочника, рассмотрим альтернативные варианты реализации.
1. Полное переопределение командной панели
В свойствах командной панели снимаем флаг Автозаполнение. Вручную добавляем кнопки сохранения и восстановления, а в свойстве Действие указываем собственные процедуры модуля формы. В этом случае весь алгоритм выполняется в конфигурации и доступен для полноценной отладки.
2. Использование системного объекта «ХранилищеОбщихНастроек»
Это наиболее универсальный способ, позволяющий не зависеть от расположения файла на диске. В качестве ключа объекта задается постоянная уникальная строка:
Процедура СохранитьПользовательскиеНастройки() Экспорт
КлючОбъекта = "ВнешняяОбработка_ЗагрузкаExcel_УТ103";
КлючНастроек = "ОсновныеНастройки";
Настройки = Новый Структура;
Настройки.Вставить("ПутьКФайлу", ЭлементыФормы.ПолеВводаПути.Значение);
Настройки.Вставить("НомерЛиста", НомерЛиста);
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки);
КонецПроцедуры
Процедура ВосстановитьПользовательскиеНастройки() Экспорт
КлючОбъекта = "ВнешняяОбработка_ЗагрузкаExcel_УТ103";
КлючНастроек = "ОсновныеНастройки";
Настройки = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек);
Если ТипЗнч(Настройки) = Тип("Структура") Тогда
Если Настройки.Свойство("ПутьКФайлу") Тогда
ЭлементыФормы.ПолеВводаПути.Значение = Настройки.ПутьКФайлу;
КонецЕсли;
Если Настройки.Свойство("НомерЛиста") Тогда
НомерЛиста = Настройки.НомерЛиста;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
3. Использование типового регистра сведений УТ 10.3
В конфигурации «Управление торговлей 10.3» присутствует регистр сведений СохраненныеНастройки. Запись настроек в виде ХранилищеЗначения с привязкой к текущему пользователю и строковому наименованию обработки обеспечивает полную интеграцию с типовой подсистемой настроек отчетов и обработок конфигурации.
4. Выгрузка в локальный файл
Для переноса готовых шаблонов настроек между разными базами данных или рабочими местами подходит сохранение структуры во внешний файл с помощью методов ЗначениеВФайл() и последующее чтение через ЗначениеИзФайла().