Как изменить представление справочника в зависимости от подсистемы в 1С?

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

При разработке и настройке прикладных решений на платформе 1С:Предприятие 8.3 часто возникает классическая задача UI/UX: один и тот же справочник необходимо включить в несколько разных разделов (подсистем) интерфейса, но при этом он должен называться по-разному. Например, справочник Контрагенты в разделе закупок логично назвать "Поставщики", а в разделе продаж — "Клиенты".

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

Способ 1. Создание произвольных команд с уникальными синонимами

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

Разберем этот способ по шагам:

  1. Открываем конфигуратор и находим нужный справочник (например, Номенклатура).
  2. Переходим на вкладку Команды в окне редактирования объекта конфигурации.
  3. Добавляем новую команду. Назовем её ОткрытьСписокомПродажи. В свойстве Синоним указываем имя, которое должно отображаться в первом разделе (например, "Каталог товаров").
  4. В свойстве Группа выбираем значение Панель навигации.Обычное (или Важное, в зависимости от требований к интерфейсу).
  5. Двойным кликом по новой команде открываем её модуль и прописываем код открытия формы списка справочника. Разберем пример кода модуля команды:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	// Открываем стандартную форму списка нашего справочника
	ОткрытьФорму("Справочник.Номенклатура.ФормаСписка", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры
  1. Аналогичным образом создаем вторую команду для второго раздела. Назовем её ОткрытьСпискомЗакупки, укажем синоним "Материалы на складах" и пропишем точно такой же код открытия формы списка в её модуле.
  2. Теперь переходим к настройке интерфейса подсистем. Находим в дереве метаданных первую подсистему (раздел "Продажи"). Кликом правой кнопки мыши вызываем контекстное меню и выбираем пункт Открыть командный интерфейс.
  3. В открывшемся окне находим нашу стандартную команду справочника Номенклатура и снимаем с неё галочку видимости. Вместо неё включаем видимость для нашей новой команды ОткрытьСписокомПродажи.
  4. Аналогичную операцию настройки командного интерфейса проделываем для второй подсистемы ("Закупки"), включив там видимость только для команды ОткрытьСпискомЗакупки.
  5. Важный нюанс по правам доступа: Не забываем, что для новых команд роли пользователей настраиваются отдельно! Выясним причину, почему пользователь может не увидеть справочник после обновления. При создании новой команды права на её просмотр автоматически не устанавливаются в существующих ролях. Нам необходимо зайти в роли (например, МенеджерПоПродажам и МенеджерПоЗакупкам), найти ветку команд нашего справочника и вручную установить галочку "Просмотр" для соответствующих команд.

Способ 2. Динамическая установка заголовка формы списка через параметры

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

Посмотрим на пример реализации. Сначала изменим код в модуле нашей созданной команды для раздела "Продажи":


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

В модуле команды для раздела "Закупки" будем передавать в параметрах значение "Закупки":


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

Теперь перейдем в модуль формы списка самого справочника Номенклатура и обработаем этот параметр в процедуре ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Параметры.Свойство("ИмяРаздела") Тогда
		// Отключаем автоматическое формирование заголовка платформой
		АвтоЗаголовок = Ложь; 
		
		Если Параметры.ИмяРаздела = "Продажи" Тогда
			Заголовок = "Каталог продукции (Продажи)";
		ИначеЕсли Параметры.ИмяРаздела = "Закупки" Тогда
			Заголовок = "Сырье и материалы (Закупки)";
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

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

Способ 3. Использование нескольких специализированных форм списка

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

Рассмотрим подробнее этот подход:

  1. В конфигураторе у нашего справочника создаем две разные формы списка: ФормаСпискаПродажи и ФормаСпискаЗакупки.
  2. Для каждой формы в панели свойств настраиваем уникальный статический заголовок, состав отображаемых колонок динамического списка и уникальные отборы.
  3. В созданных нами командах подсистем вызываем открытие конкретной специализированной формы. Пример для команды раздела продаж:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	ОткрытьФорму("Справочник.Номенклатура.ФормаСпискаПродажи", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры

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

Способ 4. Изменение представления элементов справочника в полях выбора

Иногда под термином "изменение представления" подразумевают то, как ссылки на элементы справочника отображаются внутри документов и отчетов разных подсистем. Платформа 1С:Предприятие позволяет динамически переопределять представление ссылки с помощью обработчиков в модуле менеджера справочника.

Разберем по шагам, как переопределить стандартное строковое представление элемента (например, выводить для закупок формат "Артикул + Наименование", а для продаж — только "Наименование"):

  1. Открываем Модуль менеджера нашего справочника.
  2. Используем стандартные процедуры-обработчики событий получения представления. Ниже представлен пример кода:

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

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	
	// Определяем контекст работы пользователя на основе доступных ему ролей
	Если РольДоступна("МенеджерПоЗакупкам") Тогда
		Представление = "[" + Данные.Артикул + "] " + Данные.Наименование;
	Иначе
		Представление = Данные.Наименование;
	КонецЕсли;
КонецПроцедуры

Важное примечание: Поскольку обработчики модуля менеджера выполняются на стороне сервера при получении ссылок базой данных, прямого доступа к открытым формам или клиентскому контексту они не имеют. Определение контекста через проверку ролей (РольДоступна()) или использование предопределенных параметров сеанса — самый надежный способ разделения логики представлений в многопользовательской среде.

Рекомендация по работе с типовыми конфигурациями

Если вы решаете задачу изменения представления в типовой конфигурации 1С (например, 1С:ERP, 1С:Управление торговлей или 1С:Бухгалтерия), которая находится на поддержке, крайне не рекомендуется вносить эти изменения непосредственно в основную конфигурацию. Это усложнит процесс будущих автоматических обновлений базы.

Используйте механизм Расширений конфигурации. Все описанные шаги — добавление новых команд, переопределение командного интерфейса подсистем, переопределение заголовков через форму или создание новых форм — полностью поддерживаются в расширениях и сохранят вашу конфигурацию чистой и легко обновляемой.

← На главную