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