Как настроить общие дополнительные реквизиты для нескольких документов в 1С и исправить проблемы их отображения в списках?

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

При работе с типовыми конфигурациями «1С:Предприятие 8.3» на базе Библиотеки стандартных подсистем (БСП), такими как «1С:Бухгалтерия предприятия 3.0», «1С:ЗУП 3» или «1С:ERP», пользователи и администраторы часто сталкиваются с необходимостью связать один и тот же дополнительный реквизит сразу с несколькими типами документов. Например, нам может потребоваться общий признак «Проверено аудитором» (тип Булево) для документов «Больничный лист» и «Отпуск».

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

Выясняем причину: куда исчезла галочка «Общие реквизиты и сведения» в БСП?

В старых редакциях БСП в разделе административных настроек присутствовал глобальный флажок «Общие реквизиты и сведения». В современных версиях систем (начиная с БСП 3.x) разработчики отказались от этой настройки как от избыточной. Возможность совместного использования реквизитов теперь является стандартным поведением системы и включена по умолчанию.

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

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

Рассмотрим процесс создания сквозного свойства на примере конфигурации «1С:Бухгалтерия предприятия 3.0».

  1. Перейдем в раздел Администрирование — Общие настройки — Дополнительные реквизиты и сведения.
  2. Откроем список Дополнительные реквизиты.
  3. Сначала создадим реквизит в первом «родном» документе (например, для документа «Больничный лист»). Нажмем кнопку Добавить — Новый, укажем наименование (например, «Проверено») и тип значения (например, Булево). Сохраним изменения.
  4. Теперь выделим в дереве объектов второй документ (например, «Отпуск»), для которого мы хотим применить этот же реквизит.
  5. Нажмем кнопку Добавить и выберем пункт меню Из другого набора....
  6. В открывшемся окне найдем наш созданный реквизит «Проверено» в группе документа «Больничный лист». При попытке его добавления система запустит встроенный «Помощник совместного использования».

На этом этапе нам будет предложено три варианта архитектурного решения. Нам важно выбрать правильный вариант:

Выбираем первый вариант: Сделать реквизит общим и добавить в набор.

Решаем проблему с заголовком колонки: убираем имя другого документа на форме

После добавления общего реквизита в форму списка документа «Отпуск», мы можем столкнуться с неприятным визуальным эффектом. На форме настройки списка колонка будет отображаться под именем Проверено (Больничный лист). Это сбивает с толку пользователей, которые работают с отпусками.

Выясним техническую причину этого поведения. Дополнительные реквизиты физически хранятся в подчиненных табличных частях документов. Чтобы платформа «1С:Предприятие 8.3» могла автоматически вытаскивать эти данные в динамический список без изменения текста запроса вручную, она использует штатный механизм характеристик. Поля динамического списка для дополнительных реквизитов формируются платформой по строгому шаблону: Ссылка.[ИмяСвойства (ИмяПервичногоНабора)].

Поскольку свойство изначально было создано в наборе для документа «Больничный лист», метаданные этого свойства ссылаются на его «первичного» владельца. При добавлении этого же свойства в документ «Отпуск» платформа продолжает обращаться к тому же объекту ПВХ, из-за чего в окне настройки формы выводится приписка в скобках.

Решить эту проблему в пользовательском режиме очень просто. Выполним следующие действия:

  1. Откроем форму списка документов «Отпуск».
  2. В правом верхнем углу списка нажмем кнопку Ещё и выберем пункт Изменить форму....
  3. В дереве элементов формы найдем добавленное поле (оно может называться, например, Ссылка.Проверено (Больничный лист)).
  4. Выделим это поле и обратим внимание на его свойства в правой части окна настройки.
  5. В строке свойства Заголовок сотрем автоматически сформированное имя с припиской в скобках и вручную напишем понятное для пользователей название: Проверено.
  6. Нажмем кнопку ОК для сохранения настроек формы.

Теперь для конечного пользователя колонка в списке документов «Отпуска» будет отображаться корректно и аккуратно.

Решаем проблему с типом Булево: почему в списке пусто и как вывести «Да»/«Нет»

Еще одна частая техническая проблема, с которой сталкиваются при выводе общих реквизитов типа Булево в динамический список, заключается в том, что для документов со значением Ложь колонка в списке остается абсолютно пустой. Значение Да (Истина) при этом отображается корректно.

Проанализируем техническую причину этого поведения:

Чтобы исправить это поведение и сделать так, чтобы в списке выводилось «Нет» вместо пустоты, нам нужно настроить формат отображения данных для этой колонки.

Способ 1. Настройка формата в пользовательском режиме (через «Изменить форму»):

  1. В форме списка документов зайдем в меню Ещё — Изменить форму....
  2. Выделим поле нашего дополнительного реквизита.
  3. В свойствах элемента найдем поле Формат и нажмем кнопку выбора (с тремя точками).
  4. В открывшемся конструкторе формата перейдем на вкладку Логический.
  5. Зададим параметры: Формат Истина — «Да», Формат Ложь — «Нет». Также можно настроить представление для неопределенных значений (задать Формат Неопределено как «Нет»). Строка формата примет вид: БЛ=Нет; БИ=Да.
  6. Нажмем ОК.

Способ 2. Программное решение через Конфигуратор (для разработчиков):

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


// Форматная строка для корректного представления Булево с учетом NULL
БЛ='Нет'; БИ='Да'

Это заставит платформу принудительно преобразовывать отсутствующие строки (значения NULL) к визуальному представлению «Нет».

Решаем проблему с обновлением динамического списка при изменении реквизита

Иногда пользователи замечают, что при изменении значения общего дополнительного реквизита внутри формы документа (например, при установке флажка «Проверено» и записи документа) значение в самой форме списка не обновляется мгновенно. Приходится нажимать кнопку «Обновить» (или клавишу F5).

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

Для гарантированного обновления данных в списке при изменении свойств в форме документа разработчику необходимо использовать вызов платформенного метода ОповеститьОбИзменении(). Рассмотрим пример реализации этого метода в модуле формы документа при его записи:


&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
    // Оповещаем систему об изменении объекта, чтобы динамические списки обновили данные
    ОповеститьОбИзменении(Объект.Ссылка);
КонецПроцедуры

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

← На главную