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