Почему недоступны кнопки сохранения и восстановления настроек во внешней обработке и как ими управлять?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При сопровождении типовых конфигураций на обычных формах (например, «1С:Управление торговлей 10.3») разработчики часто сталкиваются с ситуацией, когда во внешней обработке на командной панели присутствуют стандартные кнопки Сохранить настройки и Восстановить настройки, однако их свойства в конфигураторе заблокированы, а при нажатии в режиме «1С:Предприятие» не удается попасть в модуль точки останова. Выясним причину такого поведения платформы и рассмотрим, как правильно настроить или переопределить данный функционал.

Причины недоступности стандартных кнопок и невозможности прямой отладки

Проанализируем архитектуру работы командных панелей в обычном интерфейсе 1С:Предприятия. Такое поведение элементов обусловлено следующими факторами:

  1. Свойство «Автозаполнение» командной панели. Если у элемента формы включен флаг автозаполнения, платформа автоматически генерирует набор стандартных кнопок (включая действия с настройками). Редактировать свойства таких сгенерированных кнопок в конфигураторе нельзя, поскольку они не являются отдельными элементами управления, добавленными вручную.
  2. Исполнение на уровне ядра платформы. Стандартные действия по сохранению и загрузке настроек реализованы во внутреннем бинарном коде платформы. При нажатии на кнопку платформа напрямую вызывает собственный системный диалог выбора или записи настроек в обход кода конфигурации. По этой причине установить точку останова непосредственно на сам клик по кнопке невозможно.
  3. Блокировка кнопок (серый цвет). Кнопки сохранения и восстановления становятся неактивными в пользовательском режиме в том случае, если в свойствах формы не включен флаг Сохранять значения либо в списке сохраняемых реквизитов не выбрано ни одной позиции.

Штатная настройка сохранения значений формы

Разберем по шагам, как активировать стандартный механизм в конфигураторе для обычной формы:

  1. Откроем палитру свойств самой формы обработки (кликнув по свободному месту формы или в корне дерева элементов).
  2. Найдем свойство Сохранять значения и установим соответствующий флаг.
  3. В свойстве Сохраняемые значения нажмем кнопку выбора и отметим флагами те реквизиты обработки или реквизиты формы, значения которых требуется запоминать между сеансами работы.
  4. При необходимости включим свойство ВосстанавливатьЗначенияПриОткрытии, чтобы последние сохраненные параметры применялись автоматически при старте формы.

После включения этих свойств кнопки на командной панели станут активными и при нажатии откроют системное окно работы с настройками.

Перехват данных для отладки через события формы

Поскольку войти внутрь стандартного кода платформы нельзя, посмотрим, как перехватить сохраняемые и восстанавливаемые данные программно. Для этого в модуле обычной формы предусмотрены специализированные обработчики событий.

В палитре свойств формы перейдем к событиям и назначим обработчики для ПередСохранениемЗначений и ПослеВосстановленияЗначений. В этих процедурах можно установить точку останова и проанализировать структуру передаваемых данных:


Процедура ПередСохранениемЗначений(Отказ, СтруктураНастроек)
	// Здесь можно установить точку останова для отладки
	// В параметре СтруктураНастроек передаются сохраняемые реквизиты
	
	// Пример программного добавления значения, не связанного с реквизитами формы напрямую:
	СтруктураНастроек.Вставить("ДополнительныйПараметр", "ЗначениеПоУмолчанию");
	
	// При необходимости операцию сохранения можно прервать:
	// Отказ = Истина;
КонецПроцедуры

Процедура ПослеВосстановленияЗначений(СтруктураНастроек)
	// Точка останова для проверки прочитанных настроек
	Если СтруктураНастроек.Свойство("ДополнительныйПараметр") Тогда
		Сообщить("Восстановлен дополнительный параметр: " + СтруктураНастроек.ДополнительныйПараметр);
	КонецЕсли;
КонецПроцедуры

Особенности работы механизма во внешних обработках

Важно учитывать ограничение платформы: стандартный механизм связывает сохраненные настройки с конкретным путем к файлу внешней обработки на диске либо с ее внутренним именем. Это создает проблемы в двух случаях:

  1. Перемещение или переименование файла: если пользователь перенесет файл обработки в другую папку, платформа посчитает его новым объектом, и прежние настройки станут недоступны.
  2. Запуск через справочник «Внешние обработки»: при открытии обработки из типового справочника конфигурация УТ 10.3 выгружает бинарные данные обработки во временный каталог текущего пользователя с динамически сгенерированным именем. Из-за постоянной смены временного пути стандартное платформенное сохранение теряет привязку к файлу при каждом новом сеансе.

Альтернативные способы сохранения настроек

Если требуется полный контроль над процессом отладки или надежная работа при запуске из справочника, рассмотрим альтернативные варианты реализации.

1. Полное переопределение командной панели

В свойствах командной панели снимаем флаг Автозаполнение. Вручную добавляем кнопки сохранения и восстановления, а в свойстве Действие указываем собственные процедуры модуля формы. В этом случае весь алгоритм выполняется в конфигурации и доступен для полноценной отладки.

2. Использование системного объекта «ХранилищеОбщихНастроек»

Это наиболее универсальный способ, позволяющий не зависеть от расположения файла на диске. В качестве ключа объекта задается постоянная уникальная строка:


Процедура СохранитьПользовательскиеНастройки() Экспорт
	КлючОбъекта = "ВнешняяОбработка_ЗагрузкаExcel_УТ103";
	КлючНастроек = "ОсновныеНастройки";
	
	Настройки = Новый Структура;
	Настройки.Вставить("ПутьКФайлу", ЭлементыФормы.ПолеВводаПути.Значение);
	Настройки.Вставить("НомерЛиста", НомерЛиста);
	
	ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки);
КонецПроцедуры

Процедура ВосстановитьПользовательскиеНастройки() Экспорт
	КлючОбъекта = "ВнешняяОбработка_ЗагрузкаExcel_УТ103";
	КлючНастроек = "ОсновныеНастройки";
	
	Настройки = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек);
	
	Если ТипЗнч(Настройки) = Тип("Структура") Тогда
		Если Настройки.Свойство("ПутьКФайлу") Тогда
			ЭлементыФормы.ПолеВводаПути.Значение = Настройки.ПутьКФайлу;
		КонецЕсли;
		Если Настройки.Свойство("НомерЛиста") Тогда
			НомерЛиста = Настройки.НомерЛиста;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

3. Использование типового регистра сведений УТ 10.3

В конфигурации «Управление торговлей 10.3» присутствует регистр сведений СохраненныеНастройки. Запись настроек в виде ХранилищеЗначения с привязкой к текущему пользователю и строковому наименованию обработки обеспечивает полную интеграцию с типовой подсистемой настроек отчетов и обработок конфигурации.

4. Выгрузка в локальный файл

Для переноса готовых шаблонов настроек между разными базами данных или рабочими местами подходит сохранение структуры во внешний файл с помощью методов ЗначениеВФайл() и последующее чтение через ЗначениеИзФайла().

← На главную