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