10. Интерфейсные механизмы
#76

Готовишься к экзамену?

Полнофункциональный тренажер @bot_1cnik_bot с полноценным обучением, режимом экзамена и подробной статистикой.

Перейти в бота

Когда к обычной форме 1С обращаются «извне» (из другого модуля/обработки) и нужно прочитать данные, откуда корректнее брать значения?

Всегда читать значения только через элементы управления формы (поля ввода, таблицы, табличный документ и т. п.).
Неправильно: элементы управления действительно хранят «контекст интерфейса» (например, где стоит фокус и какая строка сейчас выбрана), но для большинства данных формы правильнее и проще читать реквизиты формы/данные объекта, а к элементам обращаться только тогда, когда нужное значение существует именно на уровне элемента.
Всегда читать значения только через реквизиты формы и параметры/свойства, которыми форма расширяет свои данные.
Неправильно: реквизиты формы подходят для хранения и обмена данными, но не во всех случаях они отражают то, что пользователь выбрал прямо сейчас на экране (например, текущую строку в табличном документе или положение курсора). В таких ситуациях приходится обращаться к элементам формы.
Передавать нужные данные через экспортные переменные общих модулей.
Неправильно: экспортные переменные - это отдельный способ обмена состоянием, но он не является обязательным и обычно не используется как «нормальный» механизм чтения данных открытой формы. Данные формы читают из реквизитов/параметров формы или из элементов управления, если это интерфейсный контекст.
Выбор зависит от того, что именно читаем: иногда нужно обратиться к элементу управления, а иногда - к реквизитам формы/параметрам формы.
Правильно: если значение связано с интерфейсом (например, выбранная пользователем строка в таблице/табличном документе, текущая область или фокус), его получают через соответствующий элемент управления формы. Если же это «данные формы» (поля, таблицы значений, объект формы, параметры), то корректнее обращаться к реквизитам формы и параметрам/свойствам, через которые форма хранит и отдает данные.
Можно использовать любой из перечисленных способов - результат будет одинаково корректным.
Неправильно: способы не равнозначны. Например, обмен через экспортные переменные общих модулей не обязателен и часто считается плохой практикой для чтения данных формы, а чтение только через реквизиты формы не поможет получить чисто интерфейсные вещи вроде текущей строки/фокуса, где нужно обращаться к элементу управления.

Пояснение

Развернутая подсказка (с примерами и привязкой к практике 1С): 1) Почему нельзя выбрать «всегда только реквизиты» или «всегда только элементы» - Реквизиты формы предназначены для хранения данных, с которыми работает форма: то, что выводится, редактируется и что можно безопасно читать/передавать наружу. - Элементы управления - это визуальная часть. У них есть свойства, связанные с интерфейсом: фокус, текущая строка, текущая область табличного документа, выделение и т. п. Эти сведения часто существуют только на уровне элемента, и реквизиты формы их не отражают автоматически. 2) Когда читать через реквизиты формы и параметры Чаще всего «извне» нужно получить именно данные: - значения полей, которые связаны с реквизитами формы; - данные объекта формы (например, если форма объекта держит основной реквизит, через который доступны реквизиты документа/справочника); - параметры формы, переданные при открытии (они часто используются как фильтры/настройки). 3) Когда читать через элемент управления Если вам нужно то, что зависит от текущего действия пользователя: - какая строка сейчас выбрана в таблице на форме; - на какой строке/области стоит курсор в табличном документе; - что выделено, какие колонки/ячейки активны. В таких случаях обращение к реквизитам формы может вернуть «просто данные», но не ответит на вопрос «что выбрал пользователь прямо сейчас». 4) Практический мини-сценарий про «Ведомость в кассу» и автозаполнение (как это помогает в реальной жизни) - Автозаполнение документа «Ведомость в кассу» обычно запускают командой «Заполнить» при корректно заданных параметрах (организация, месяц/период, вид выплаты) и при настроенном у сотрудников способе выплаты через кассу. - Если вы делаете диагностическую обработку/отладочную форму для проверки, почему ведомость не заполняется, то «извне» чаще читают именно реквизиты формы (период, организация, вид выплаты, включенные отборы). - Но если пользователь кликает в таблице списка сотрудников или в табличном документе и вы хотите узнать, на какой строке он стоит (например, чтобы показать подсказку «почему именно этот сотрудник не попал в заполнение»), тогда нужно читать данные через элемент управления, потому что там хранится текущий интерфейсный контекст. 5) Запомнить легко - «Данные формы» (что хранит форма) → реквизиты/параметры. - «Контекст пользователя» (что выбрано на экране) → элементы управления.