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