Пропали дополнительные реквизиты номенклатуры в отчетах 1С? Разбор причин и все способы решения

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе в современных конфигурациях на базе 1С:Предприятие 8.3 — таких как «Управление торговлей 11» (УТ 11), «ERP Управление предприятием» или «Комплексная автоматизация 2» — пользователи и администраторы часто сталкиваются с неприятным явлением. В карточке номенклатуры все дополнительные реквизиты отображаются корректно, их можно заполнить и сохранить. Однако при попытке сформировать любой отчет (например, ведомость по товарам на складах или продажи) и раскрыть структуру номенклатуры по значку «(+)», эти дополнительные реквизиты просто исчезают из списка доступных полей для выбора. Вчера они были в отчете, а сегодня их нет.

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

Почему это происходит? Разбираем внутреннюю кухню 1С

Для того чтобы понять природу проблемы, давайте заглянем под капот платформы 1С и БСП. Механизм динамического вывода дополнительных свойств и реквизитов в отчетах СКД (Система компоновки данных) базируется на платформенном механизме под названием «Характеристики».

Когда вы формируете отчет, СКД обращается к метаданным конфигурации, считывает настройки характеристик для справочника Номенклатура и динамически достраивает виртуальные поля в схеме компоновки данных. Связующим звеном здесь выступают план видов характеристик ДополнительныеРеквизитыИСведения и справочник НаборыДополнительныхРеквизитовИСведений.

Существует три основные причины, по которым эта связь внезапно рушится:

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

Ниже мы подробно разберем все способы исправления этой ситуации, начиная от самого простого и быстрого.

Способ 1. Принудительный сброс кэша БСП через создание временного реквизита

Это самый быстрый и действенный «лайфхак», который помогает в 90% случаев, когда реквизиты внезапно пропали из отчетов («вчера были, а сегодня пропали»). Суть метода заключается в том, чтобы заставить программные модули БСП принудительно перезаписать структуру характеристик и очистить кэш.

Давайте выполним следующие действия по шагам:

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

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

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

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

Чтобы реквизиты корректно отображались в карточке и были доступны для выбора в СКД, их необходимо программно зарегистрировать в соответствующем наборе свойств справочника НаборыДополнительныхРеквизитовИСведений. Разберем пример кода, который решает эту задачу:


// Пример программной привязки созданного доп. реквизита к набору свойств номенклатуры
Процедура ПривязатьРеквизитКНабору(СсылкаНаНовыйРеквизит) Экспорт
    
    // Получаем ссылку на предопределенный набор общих свойств номенклатуры
    НаборНоменклатураСсылка = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура;
    
    Если НаборНоменклатураСсылка.Пустая() Тогда
        Возврат;
    КонецЕсли;
    
    НаборОбъект = НаборНоменклатураСсылка.ПолучитьОбъект();
    
    // Проверим, нет ли уже этого реквизита в табличной части набора
    ПараметрыОтбора = Новый Структура("Свойство", СсылкаНаНовыйРеквизит);
    НайденныеСтроки = НаборОбъект.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
    
    Если НайденныеСтроки.Количество() = 0 Тогда
        // Добавляем реквизит в табличную часть набора свойств
        НоваяСтрока = НаборОбъект.ДополнительныеРеквизиты.Добавить();
        НоваяСтрока.Свойство = СсылкаНаНовыйРеквизит;
        НоваяСтрока.ПометкаУдаления = Ложь;
        
        // Записываем набор. При записи БСП автоматически обновит кэш характеристик
        Попытка
            НаборОбъект.Записать();
        Исключение
            ЗаписьЖурналаРегистрации("ПрограммноеДобавлениеСвойства", 
                УровеньЖурналаРегистрации.Ошибка, , , 
                ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        КонецПопытки;
    КонецЕсли;
    
КонецПроцедуры

Использование этого метода гарантирует, что программно созданные свойства будут полноценно интегрированы в подсистему свойств БСП и станут сразу доступны во всех типовых отчетах.

Способ 3. Восстановление связи характеристик в Конфигураторе

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

Разберем этот процесс по шагам:

  1. Запустите базу в режиме Конфигуратор.
  2. В дереве метаданных найдите справочник Номенклатура, нажмите по нему правой кнопкой мыши и выберите пункт Открыть свойства.
  3. В открывшемся окне свойств перейдите на вкладку Данные.
  4. В самом низу окна нажмите кнопку Характеристики....
  5. Внимательно изучите открывшееся диалоговое окно конфигурации характеристик. Здесь должны быть заполнены параметры получения характеристик.

Обычно для типовых конфигураций на БСП настройки должны выглядеть следующим образом:

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

Способ 4. Полная очистка кэша платформы и перезапуск службы сервера

В некоторых случаях некорректная структура метаданных «застревает» в локальном кэше пользователя или серверном кэше вызовов СУБД. Если предыдущие шаги не дали долгосрочного результата, рекомендуется провести тотальную чистку кэша.

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

Очистка серверного кэша (для клиент-серверного варианта):
Для полного сброса серверного кэша администратору необходимо перезапустить службу сервера 1С:Предприятия (1C:Enterprise 8.3 Server Agent). В высоконагруженных системах также рекомендуется периодически производить очистку сеансовых данных через консоль администрирования серверов 1С.

Способ 5. Сброс настроек отчета пользователем

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

Чтобы исключить этот фактор, выполним сброс настроек в режиме 1С:Предприятие:

  1. Откроем проблемный отчет.
  2. В правом верхнем углу нажмем кнопку Еще, далее выберем пункт Настройки (или перейдем в Еще — Прочее — Изменить вариант отчета).
  3. В открывшемся окне нажмем кнопку Еще и выберем пункт Установить стандартные настройки.
  4. После этого заново сформируем отчет и проверим доступность характеристик в списке выбора по кнопке «(+)» у номенклатуры.

Использование этого комплекса методов позволит вам гарантированно вернуть отображение любых дополнительных реквизитов номенклатуры в отчетах вашей базы данных 1С и обеспечит стабильную работу аналитических инструментов для пользователей вашей компании.

← На главную