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