← На главную
При работе с платформой 1С:Предприятие, особенно в конфигурациях типа 1С:Управление предприятием 2, мы часто сталкиваемся с необходимостью доработки стандартных объектов, таких как документы и их табличные части. Механизм расширений предоставляет удобный и безопасный способ внесения изменений без модификации основной конфигурации. Однако иногда после добавления нового реквизита в табличную часть через расширение и размещения его на форме документа, мы обнаруживаем, что при запуске 1С этот реквизит на форме не виден, а программное обращение к нему через Объект.ТЧ... не работает. Рассмотрим подробно, почему это происходит и как решить данную проблему.
Начальные шаги: правильное добавление реквизита через расширение
Прежде всего, давайте убедимся, что мы выполнили все необходимые шаги для добавления нового реквизита в табличную часть стандартного документа с использованием расширения:
- Создание расширения: Мы должны были создать новое расширение конфигурации.
- Заимствование объектов: В расширение необходимо было заимствовать следующие объекты из основной конфигурации:
- Сам документ, в табличную часть которого мы добавляем реквизит.
- Форму документа, на которую мы планируем вывести новый реквизит.
- Табличную часть документа, к которой мы добавляем реквизит. Важно помнить, что заимствовать нужно не только форму, но и сам объект (документ) и его табличную часть, чтобы новый реквизит стал доступен через
Объект.ТЧ....
- Добавление нового реквизита: В заимствованной табличной части в расширении мы создаем новый реквизит с нужным типом данных.
- Размещение реквизита на форме: Открываем заимствованную форму документа в расширении и перетаскиваем новый реквизит табличной части из списка реквизитов в нужную колонку табличной части формы.
После выполнения этих шагов в конфигураторе мы видим новую колонку с реквизитом, но при запуске 1С в режиме предприятия она отсутствует. Также попытки обратиться к реквизиту программно, например, через Объект.ТЧ.НовыйРеквизит, приводят к ошибкам или показывают, что реквизит не найден. Это указывает на то, что проблема лежит глубже, чем просто добавление элементов на форму.
Анализируем ситуацию: возможные причины и отладка
Когда мы сталкиваемся с такой проблемой, нам необходимо проверить несколько ключевых моментов, которые часто становятся причиной подобных неполадок:
- Активность расширения: Убедимся, что расширение активно и подключено в режиме предприятия. Проверить это можно в разделе "Администрирование -> Печатные формы, отчеты и обработки -> Расширения". Если расширение неактивно или имеет статус "Отключено", оно не будет применяться.
- Флаги безопасности: Обратим внимание на флаги "Безопасный режим" и "Защита от опасных действий" в свойствах расширения. Иногда некорректные настройки безопасности могут препятствовать его полноценной работе.
- Множественность форм: Проверим, открывается ли именно та форма, которую мы редактировали в расширении. Возможно, у документа есть несколько форм (например, "ФормаДокумента", "ФормаДокументаОсн"), и мы внесли изменения не в ту, которая используется по умолчанию.
- Наличие ролей в расширении: Выясним, создавали ли мы какие-либо роли непосредственно в нашем расширении. Это критический момент, так как наличие хотя бы одной собственной роли в расширении меняет правила предоставления прав доступа ко всем объектам расширения.
- Права на видимость реквизита: Если роли в расширении есть, проверим, установлены ли права на видимость нового реквизита у всех ролей, которым должен быть доступен этот реквизит. Это относится не только к самому документу, но и к его составным частям.
- Использование отладчика: Если новый реквизит не отображается на форме, очень полезно использовать отладчик. Мы можем поставить точку останова в процедуре
ПриСозданииНаСервере формы документа и проверить свойства объекта. Если реквизит присутствует в свойстве Объект (например, Объект.ТабличнаяЧастьИмя.НовыйРеквизит), но отсутствует в свойстве Элементы формы, это указывает на то, что данные реквизита существуют, но элемент формы для его отображения не был корректно создан или привязан, либо доступ к нему ограничен.
Ключевое решение: правильная настройка прав на табличную часть
Основная причина, по которой новый реквизит табличной части не отображается на форме и недоступен программно, часто кроется в некорректной настройке прав доступа. Как выяснилось в рассматриваемой ситуации, проблема была решена следующим образом:
Мы должны были в роли, которая используется в расширении (или заимствована в него), явно указать права не только на сам документ, но и на его табличную часть (ТЧ).
Даже если мы предоставили полные права на документ в расширении, этого может быть недостаточно. Права на табличную часть – это отдельный аспект, который необходимо явно указать. Без этого платформа 1С не разрешит доступ к реквизитам этой табличной части для пользователей с данной ролью.
Рассмотрим этот аспект подробнее:
- Необходимость явного назначения прав: Критически важно явно настроить права доступа на заимствованные объекты расширения, включая табличные части и их реквизиты. Если в расширении созданы собственные роли, доступ к его объектам (включая новые реквизиты табличных частей) будет ограничен только теми ролями, которым эти права были явно предоставлены в рамках расширения. Это означает, что даже если у пользователя есть полные права на документ в основной конфигурации, он не увидит реквизит из расширения, если эти права не продублированы или не настроены в ролях самого расширения.
- Поведение ролей по умолчанию: Если наше расширение не содержит собственных ролей, то по умолчанию все его объекты доступны всем пользователям. Однако, как только в расширении появляется хотя бы одна собственная роль (даже если она заимствована из основной конфигурации), все объекты расширения становятся доступными только тем ролям, которые заимствованы в расширение и имеют соответствующие права. Именно это и произошло в рассматриваемом случае – наличие роли в расширении потребовало явной настройки прав на ТЧ.
- Работа с ролью "ПолныеПрава": Если в расширении вводятся собственные роли и нам необходимо, чтобы административные пользователи имели доступ ко всем новым объектам, может потребоваться заимствовать роль
ПолныеПрава в расширение и явно предоставить ей необходимые права. Это гарантирует, что даже пользователи с административными привилегиями смогут работать с добавленными реквизитами.
- Флаг "Устанавливать права для реквизитов и табличных частей по умолчанию": В ролях расширяемой конфигурации существует флаг
Устанавливать права для реквизитов и табличных частей по умолчанию. Если он установлен, то в собственных объектах расширения будут автоматически предоставлены все права на реквизиты и табличные части. Однако, если этот флаг не активен, или мы работаем с заимствованными ролями, может потребоваться ручная настройка.
- Ограничения в клиент-серверном варианте: В клиент-серверном варианте расширение прав доступа через расширения может регулироваться настройками профиля безопасности. Если профиль безопасности не используется, расширение ролей не допускается, что может повлиять на возможность предоставления прав через расширение.
Общий подход и нюансы при добавлении реквизитов в табличные части через расширение
Помимо решения с правами, рассмотрим другие важные аспекты, которые следует учитывать при работе с расширениями:
- Заимствование объектов: Как уже упоминалось, для успешного добавления реквизита в табличную часть необходимо заимствовать в расширение не только форму документа, но и сам объект (документ) и его табличную часть. Это критически важно для того, чтобы новый реквизит стал доступен через
Объект.ТЧ.... Если заимствовать только форму, то реквизит формы может быть добавлен, но он не будет связан с данными объекта.
- Программное добавление реквизитов на форму: Существует продвинутый подход, позволяющий добавлять реквизиты на форму и в табличную часть формы программно через расширение, не заимствуя саму форму. Это может быть полезно для обеспечения бесшовного обновления конфигурации, так как изменения внешнего вида формы в основной конфигурации не смогут нарушить работу расширения. Такой способ обычно реализуется в процедурах
ПриСозданииНаСервере общих модулей или непосредственно в обработчиках форм, где мы можем динамически создавать элементы управления и привязывать их к данным.
- Физическое хранение данных: Когда расширение добавляет новый реквизит к существующему объекту, такому как документ или его табличная часть, платформа 1С может создать отдельную таблицу в базе данных для хранения этих дополнительных данных. Это позволяет не изменять напрямую структуру основных таблиц конфигурации, сохраняя чистоту и возможность легкого обновления.
- Ограничения на добавление реквизитов: Важно помнить, что механизм расширений не поддерживает добавление реквизитов и табличных частей для "планов видов характеристик", "планов счетов" и "планов видов расчетов". Также не поддерживается изменение структуры регистров всех видов, только их расширение.
- Отладка: Если новый реквизит все еще не отображается на форме, мы всегда возвращаемся к отладчику. Если реквизит присутствует в свойстве
Объект, но отсутствует в свойстве Элементы формы (или не отображается на макете), это однозначно указывает на то, что данные реквизита существуют, но элемент формы для его отображения не был корректно создан или привязан, либо имеет неверные настройки видимости, или же доступ к нему ограничен.
Альтернативные подходы и общие рекомендации
Рассмотрим также другие возможности и рекомендации, которые могут быть полезны при работе с расширениями и дополнительными реквизитами:
- Механизм "Дополнительные реквизиты": В некоторых типовых конфигурациях (например, 1С:Управление торговлей 11, 1С:Комплексная автоматизация 2, 1С:ERP Управление предприятием 2) для табличных частей можно использовать стандартный механизм "дополнительных реквизитов". Это позволяет добавлять новые атрибуты без прямого изменения структуры объекта в расширении, используя предопределенные значения и специальное именование (например,
РТЧ_Товары_МояЦена). Этот подход предпочтителен, если функциональность типовой конфигурации позволяет его использовать, так как он более универсален и менее требователен к настройкам прав через расширение.
- "Контролируемые" и "проверяемые" свойства: Расширения обладают "контролируемыми" и "проверяемыми" свойствами. Несовпадение "контролируемого" свойства (например, версия конфигурации) приведет к невозможности подключения расширения. Тогда как несовпадение "проверяемого" свойства (например, незначительное изменение в форме) лишь выведет предупреждение, не препятствуя работе расширения. Нам всегда следует следить за этими свойствами, чтобы избежать проблем с подключением расширений после обновлений конфигурации.
- Сохранение данных: Важный аспект, о котором следует помнить, — это то, что данные, добавленные расширением, сохраняются, даже если расширение отключено или неактивно из-за ошибок. Однако при удалении расширения все добавленные им роли и, соответственно, связанные с ними данные могут быть удалены из пользовательских настроек, что может потребовать ручной настройки после повторного создания или подключения расширения.
Таким образом, для успешного добавления нового реквизита в табличную часть через расширение необходимо не только корректно заимствовать объекты и разместить реквизит на форме, но и уделить особое внимание настройке прав доступа на саму табличную часть в ролях расширения. Только комплексный подход к этим вопросам позволит нам эффективно использовать весь потенциал механизма расширений 1С:Предприятия.