Как получить доступ к таблице (макету) из формы списка справочника в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

В процессе разработки на платформе 1С:Предприятие 7.7 программисты часто сталкиваются с необходимостью динамического управления макетами (таблицами), которые встроены непосредственно в формы объектов. Типичный сценарий: в справочнике (например, «Должности») внутри формы списка размещена таблица, играющая роль классификатора. При выборе строки пользователю необходимо установить расшифровку или считать данные. Однако попытки обратиться к такой таблице стандартными методами из внешних обработок или даже из модуля самой формы часто вызывают ошибку «Неверное имя».

В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем внутреннюю архитектуру путей к метаданным в 1С 7.7 и рассмотрим несколько надежных способов получения доступа к таблице формы списка с использованием штатных средств и популярной внешней компоненты FormEx.

Выясняем причину: разница в контекстах макетов в 1С 7.7

Для начала разберем, почему стандартный метод ИсходнаяТаблица() может выдавать ошибку. В конфигураторе 1С 7.7 таблицы (макеты) могут создаваться на разных уровнях:

  1. Макет на уровне справочника. Он создается через общую вкладку «Таблица» в окне редактирования справочника. Такой макет принадлежит всему справочнику в целом.
  2. Макет на уровне конкретной формы. Если вы откроете, например, форму списка «ФормаСписка» и внизу окна редактора формы перейдете на вкладку «Таблица», этот макет будет принадлежать исключительно данной форме.

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

Способ 1. Обращение к макету внутри модуля самой формы (Штатные средства)

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


Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("МакетКлассификатор");
// Дальнейшие действия с таблицей, например, вывод секций
Таб.ВывестиСекцию("Строка");
Таб.Показать();

Важные условия для успешной работы этого кода:

Способ 2. Доступ к макету формы списка через внешнюю компоненту FormEx

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

При использовании метода ИсходнаяТаблица(Имя, Путь) во втором параметре необходимо передать точный путь к форме внутри конфигурации. Для справочников структура хранения метаданных в файле 1Cv7.md имеет свою специфику. Поскольку у одного справочника может быть множество форм (списка, выбора, элемента), система требует дублирования идентификатора формы в пути.

Шаблон пути для справочника выглядит следующим образом:

MD.Справочник.[ИмяСправочника].[ИдентификаторФормы].[ИдентификаторФормы]

Рассмотрим практический пример кода. Предположим, у нас есть справочник «Должности», у него есть форма списка с идентификатором ФормаСписка, а внутри этой формы создан макет с именем МакетКлассификатор. Чтобы прочитать эту таблицу из внешней обработки, используем следующий алгоритм:


// Инициализируем объект Таблица
Таб = СоздатьОбъект("Таблица");

// Задаем имя макета и точный путь по метаданным
ИмяМакета = "МакетКлассификатор";
ПутьКФорме = "MD.Справочник.Должности.ФормаСписка.ФормаСписка";

Попытка
    Таб.ИсходнаяТаблица(ИмяМакета, ПутьКФорме);
    Сообщить("Таблица успешно загружена!");
Исключение
    Сообщить("Ошибка загрузки таблицы: " + ОписаниеОшибки(), "!");
КонецПопытки;

Обратите внимание на конструкцию ФормаСписка.ФормаСписка на конце пути. Если вы укажете сокращенный вариант MD.Справочник.Должности.ФормаСписка, платформа вернет ошибку «Неверное имя», так как не сможет однозначно сопоставить объект метаданных.

Способ 3. Автоматическое определение точного пути к форме

Чтобы исключить ошибки ручного ввода путей (особенно в сильно измененных или нетиповых конфигурациях), мы можем определить точный внутренний путь программно. Компонента FormEx предоставляет для этого специальный объект Сервис.

Разберем, как выгрузить структуру всех доступных путей форм в текстовый файл для последующего анализа:


// Создаем объект Сервис компоненты FormEx
Сервис = СоздатьОбъект("Сервис");

// Получаем список всех форм конфигурации (возвращает объект типа "Текст")
СписокФорм = Сервис.СписокВсехФорм();

// Записываем полученную структуру во временный файл
ПутьКФайлу = КаталогВременныхФайлов() + "all_forms.txt";
СписокФорм.Записать(ПутьКФайлу);

Сообщить("Список путей сохранен в файл: " + ПутьКФайлу);

Открыв созданный файл all_forms.txt в любом текстовом редакторе, вы сможете найти строчку, относящуюся к вашему справочнику «Должности». Скопируйте полученный путь и используйте его во втором параметре метода ИсходнаяТаблица. Это гарантирует 100% совместимость кода с вашей текущей конфигурацией.

Альтернативное решение для продвинутой работы: Использование компоненты Йоксель

Если перед вами стоит задача не просто открыть макет, а динамически изменять его структуру, управлять расшифровками ячеек «на лету» или формировать сложные отчеты интерактивно, стандартный объект 1С 7.7 Таблица может накладывать существенные ограничения.

В сообществе разработчиков 1С 7.7 стандартом де-факто для решения таких задач является использование внешней компоненты Йоксель (Yoksel). Данное решение позволяет:

Для внедрения Йокселя достаточно подключить соответствующую dll-библиотеку и использовать объект ТабличныйДокумент вместо стандартной Таблицы.

Таким образом, комбинируя правильное понимание контекста выполнения кода, верный синтаксис путей метаданных в FormEx и возможности внешних компонент, вы сможете легко решить задачу доступа к любым встроенным таблицам и классификаторам в 1С 7.7.

← На главную