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