В процессе работы с программами на базе 1С:Предприятие 8.3 пользователи часто сталкиваются с неприятным эффектом: в выпадающих списках полей ввода (например, при выборе кассы, склада или номенклатуры) отображаются значения, которые уже не актуальны, к которым нет прав или которые были выбраны ошибочно. Обычная очистка временных файлов (кэша) в таких случаях зачастую не помогает. Разберем подробно, почему это происходит и как программно или административно очистить эти «залипшие» данные.
Для начала проанализируем ситуацию. Платформа 1С использует механизм Истории выбора при вводе. Это не просто кэш метаданных, а персональные настройки пользователя, которые сохраняются в системных таблицах базы данных (или в файле профиля для файловых баз). Основная цель этого механизма — ускорить работу, предлагая пользователю те значения, которые он выбирал ранее. Однако, когда права доступа меняются или данные удаляются, старые значения могут продолжать «висеть» в списке выбора, даже если выбрать их уже невозможно.
Если вы столкнулись с тем, что в типовой или самописной конфигурации история выбора только мешает, самым надежным решением будет изменение свойств конкретного элемента формы. Рассмотрим, как это сделать:
ИсторияВыбораПриВводе в значение Не использовать.Важный момент: если конфигурация находится на поддержке, крайне не рекомендуется вносить изменения напрямую. В этом случае целесообразно использовать Расширение конфигурации. Рассмотрим пример настройки свойств через расширение, чтобы не снимать основную конфигурацию с поддержки:
&НаСервере
Процедура ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Отключаем историю выбора для конкретного элемента программно
Элементы.КассаККМ.ИсторияВыбораПриВводе = ИсторияВыбораПриВводе.НеИспользовать;
КонецПроцедуры
Также обратите внимание на дополнительные настройки визуализации кнопки выбора, которые помогают минимизировать путаницу у пользователя:
В современных конфигурациях, таких как УТ 11, КА 2 или ERP, реализована Библиотека стандартных подсистем (БСП), которая предоставляет удобные инструменты для управления настройками пользователей без программирования — также для визуальной оптимизации интерфейса есть расширение для скрытия недоступных элементов списков. Разберем по шагам, как очистить «застрявшие» данные:
Проанализируем ситуацию: этот метод хорош тем, что он безопасен и не требует внесения изменений в код программы. Однако он сбрасывает и другие настройки формы (ширину колонок, видимость полей), которые пользователь мог настраивать «под себя».
Если нам нужно точечно очистить историю выбора для конкретного реквизита, мы можем воспользоваться встроенным языком 1С. Рассмотрим вариант программной очистки списка выбора. Выясним причину: данные истории выбора хранятся в ХранилищеСистемныхНастроек — для их просмотра и очистки есть инструментарий анализа и редактирования системных настроек. Ключ объекта обычно имеет сложную структуру, включающую путь к форме и имени элемента.
Пример кода для очистки списка выбора в элементе формы:
&НаСервере
Процедура ОчиститьИсториюВыбораНаСервере()
// Очищаем текущий список выбора элемента
Элементы.Склад.СписокВыбора.Очистить();
// Если используется БСП, можно попытаться сохранить пустой список
// ОбщийМодуль.СпискиВыбораКлиентСервер.Сохранить("ИсторияСклада", Элементы.Склад.СписокВыбора);
КонецПроцедуры
Существует также радикальный метод очистки всей истории работы пользователя, который упоминался в обсуждении:
ИсторияРаботыПользователя.ОчиститьВсе();
Внимание: этот метод очистит не только выпадающие списки, но и всю историю переходов пользователя (меню «История»), что может быть неудобно для сотрудников, привыкших быстро возвращаться к недавним документам.
Иногда подстановка «неправильного» значения — это не глюк кэша, а работа алгоритмов типовой конфигурации. Рассмотрим пример из 1С:Управление торговлей 11. Проанализируем механизм автоподстановки кассы в платежные документы:
Если в журнале документов (например, «Приходные кассовые ордера») установлен фильтр по конкретной кассе в шапке списка, то при создании нового документа система автоматически подставит эту кассу из фильтра — для настройки более сложной логики автозаполнения пригодится автоматическая подстановка реквизитов по заданным условиям. Пользователь может забыть о включенном фильтре и думать, что программа «глючит» и подставляет старое значение. Решение: просто сбросьте фильтры в списке документов и проверьте, сохраняется ли проблема.
Также проверьте регистр сведений Настройки пользователей. Там часто хранятся значения по умолчанию (Основной склад, Основная касса, Основная организация). Если там указано значение, к которому у пользователя теперь нет прав, поле все равно может пытаться его инициализировать.
Если ни один из вышеперечисленных способов не помог, и мы имеем дело с файловой базой данных или локальным кэшированием тонкого клиента, стоит заглянуть в папку профиля пользователя. Настройки истории ввода могут дублироваться в файлах с расширением .pfl.
%LOCALAPPDATA%\1C\1cv8\.Local и Roaming для данной базы.Резюме: для решения проблемы с «залипшими» значениями в выпадающем списке лучше всего начать с проверки фильтров в списках документов. Если это не помогает, используйте расширение для установки свойства ИсторияВыбораПриВводе в значение Не использовать или воспользуйтесь инструментами очистки настроек БСП. Программная очистка через ИсторияРаботыПользователя является крайней мерой, так как влияет на общую эргономику работы пользователя.