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