Часто при работе с типовыми обработками, такими как Универсальный подбор и обработка объектов (часто называемой «Универсальный редактор реквизитов») или Групповое изменение реквизитов, мы сталкиваемся с тем, что нужный нам реквизит отсутствует в списке доступных для редактирования. При этом мы точно знаем, что в Конфигураторе этот реквизит у объекта есть, а в Консоли запросов данные по нему успешно считываются. Давайте разберем, почему это происходит и как вернуть видимость нужных полей.
Первая и самая частая причина, по которой 1С «скрывает» реквизиты от пользователя — это механизм Функциональных опций (ФО). В современных конфигурациях, таких как УТ 11 или ERP, многие реквизиты зависят от настроек системы. Если функциональность (например, «Использование соглашений с поставщиками») отключена в настройках программы, то 1С автоматически исключает связанные с ней поля из интерфейса, чтобы не перегружать пользователя лишней информацией.
Чтобы выяснить, почему реквизит скрыт, выполним следующие действия:
Конфигуратор и найдем наш объект (в данном случае ЗаказПоставщику).ИспользоватьСоглашенияСПоставщиками.1С:Предприятие. Если использование опции выключено, то редактор реквизитов будет игнорировать связанные поля.Если вы понимаете, что функциональная опция выключена, но данные в базе все равно требуют корректировки (например, после миграции данных или исправления ошибок учета), у нас есть два пути решения:
НСИ и администрирование. После этого реквизит станет доступен в стандартных обработках автоматически.Консолью кода. Это самый надежный способ, так как он игнорирует ограничения форм и настроек видимости, работая напрямую с объектом.Разберем, как принудительно записать значение в реквизит, который «не виден» в стандартных обработках. Для этого нам потребуется создать простую процедуру, которая выбирает нужные объекты и меняет их значение:
// Пример кода для изменения реквизита без участия интерфейсных форм
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.ЗаказПоставщику ГДЕ Проведен = ЛОЖЬ";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
ОбъектЗаказа = Результат.Ссылка.ПолучитьОбъект();
ОбъектЗаказа.Соглашение = Справочники.СоглашенияСПоставщиками.НайтиПоНаименованию("Основное соглашение");
ОбъектЗаказа.Записать();
КонецЦикла;
Использование метода ПолучитьОбъект() позволяет нам работать с данными как с полноценным объектом 1С, а метод Записать() сохранит изменения в базе данных, даже если на уровне формы поле было скрыто или заблокировано.
Если после проверки функциональных опций поле все равно не появилось, проанализируем следующие моменты:
Групповое изменение реквизитов имеет актуальную версию из состава последней библиотеки БСП. Старые версии обработок могут некорректно считывать структуру метаданных, измененную расширениями.Ограничение доступа к данным), которые могут скрывать доступ к объекту.В завершение, если вам нужно оперативно выровнять данные в документах, не тратьте время на поиск «галочки» в настройках, если вы уверены в результате — программный код всегда дает больше контроля над базой, чем визуальные инструменты. Используйте Консоль кода для массовых исправлений, но всегда делайте резервную копию базы перед выполнением подобных операций.