В процессе работы с отчетами и журналами документов в 1С разработчики и администраторы иногда сталкиваются со специфическим поведением системы: пользователь формирует отчет за один период (например, 1-й квартал), находит в списке нужный документ, но при попытке открыть его через кнопку выбора с тремя точками переходит в список документов, где этого документа нет. При этом проблема воспроизводится только у одного конкретного пользователя, а у остальных сотрудников все работает корректно.
В этой статье разберем причинно-следственные связи этой проблемы и проанализируем доступные способы ее решения.
Проанализируем, почему платформа 1С ведет себя подобным образом. При работе пользователя в режиме «1С:Предприятие» платформа автоматически сохраняет персональные настройки форм списков и журналов документов (установленные отборы, фильтры по датам, порядок сортировки и видимость колонок). Данная информация фиксируется в пользовательском хранилище настроек (ХранилищеПользовательскихНастроек) и локальном кэше сеанса.
Если конкретный пользователь ранее установил в самом журнале документов отбор по периоду (например, 4-й квартал), а затем пытается выбрать документ за 1-й квартал из сформированного отчета, платформа открывает форму выбора списка с восстановлением ранее сохраненных настроек этого пользователя. В результате список отсекает документы, не входящие в сохраненный период 4-го квартала, и искомый документ визуально исчезает из списка.
Рассмотрим наименее инвазивное решение, не требующее изменения конфигурации. Так как проблема проявляется изолированно у одного сотрудника, в первую очередь выполним сброс пользовательских настроек формы:
Посмотрим, как проблему можно решить программно на уровне конфигурации, чтобы предотвратить появление подобных коллизий у любых пользователей. Если форма открывается для выбора документа, установим программный сброс отбора по периоду.
Разберем пример кода для формы списка документов в обычных формах:
// В обработчике при открытии формы очищаем отбор по дате
Если ЭлементыФормы.ДокументСписок.Отбор.Найти("Дата") <> Неопределено Тогда
ЭлементыФормы.ДокументСписок.Отбор.Дата.Использование = Ложь;
КонецЕсли;
Для управляемых форм при работе с динамическим списком проанализируем управление отбором в событии ПриСозданииНаСервере:
// Отключение фильтрации по дате в динамическом списке при открытии формы
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ЭлементОтбора.Использование = Ложь;
Проанализируем еще один способ решения задачи. Если цель пользователя заключается не в выборе документа из журнала, а в непосредственном открытии и редактировании найденного в отчете документа, наилучшим решением является настройка прямого перехода к объекту (расшифровка отчета).
Вместо открытия промежуточного списка через кнопку выбора вызовем форму самого документа напрямую с помощью функции ОткрытьФорму, передав ссылку на документ в параметре Ключ:
ПараметрыОткрытия = Новый Структура("Ключ", ВыбраннаяСсылкаНаДокумент);
ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.ФормаОбъекта", ПараметрыОткрытия);
При таком подходе платформа не обращается к форме списка журнала и не накладывает сохраненные пользовательские фильтры по периоду, что гарантирует мгновенный доступ к нужной форме редактирования документа.