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