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