1с как обратиться к элементу формы

Обновлено: 06.07.2024

Q1: Как обратиться к объекту формы?
Q2: Как обратиться к объекту формы, имя которого вычисляется на лету или содержит специальные символы?
Q3: Как обратиться к объекту подчиненной формы?
Q4: Обращение к объекту формы из контекста этой формы.

Чтобы прочитать или изменить содержимое или свойство объекта формы, в первую очередь надо составить выражение, позволяющее однозначно определить ссылку именно на этот объект.

Q1. Обращение к объекту формы

Выражение, определяющее ссылку на свойство .Value (значение) объекта формы, в общем виде выглядит так:

Обратите внимание, что операторы "!" и "." идут через один. Чередуются имена коллекций и их элементов, причем оператор "!" означает, что справа от него указан элемент коллекции, а оператор "." служит для обращения к свойству этого элемента (см. пп. 3.5 и 3.6).

Квадратные скобки ([] - в русифицированной версии Access они называются "прямыми") следует использовать, если имя элемента содержит внутренние пробелы или другие специальные символы (кроме, соответственно, "]" и "["), иначе их наличие не обязательно.

Серым цветом здесь и далее выделены коллекции и свойства, используемые Access'ом по умолчанию. Их также можно опускать, если при этом не возникнет двусмысленности. То есть выражение (1) может быть записано по-другому:

Будьте внимательны, если пользуетесь подобными сокращениями. В случае, когда форма содержит одноименные элементы различных коллекций, пропуск идентификатора коллекции может повлечь за собой неверную работу вашей программы (см. п. 3.6). Хороший способ избегать подобных "совпадений" - использовать префиксы в именах, например, поле "Поле1" в форме переименовать в "пфПоле1" и т.п.

Q2. Обращение к объектам, имена которых вычисляются "на лету" или не соответствуют "соглашению об именах"

В выражении (1), разделенные оператором ".", перечисляются связки типа


Любую из этих связок можно переписать в виде

Коллекция.Item("Строка - имя элемента")


где в качестве аргумента может быть указано любое выражение, возвращающее значение типа String, соответствующее имени существующего элемента коллекции, а также


где ПорядковыйНомерЭлементаВКоллекции - выражение, возвращающее целое число (нумерация элементов в коллекции начинается с 0). При изменении состава коллекции (например, при удалении или добавлении поля в форму) нумерация элементов может измениться. Поэтому, прежде чем использовать выражение (4), следует убедиться, что элемент с данным порядковым номером действительно является тем элементом, к которому вы хотите обратиться. Выражение (4) можно использовать, например, если требуется в цикле перебрать все элементы коллекции.

Q3. Обращение к объекту подчиненной формы

Корректная ссылка на свойство подчиненной формы или отчета требует указания полного идентификатора формы c использованием свойства Form элемента управления - подчиненная форма:


В данном примере:

является ссылкой на элемент управления, в котором выводится подчиненная форма. А

является ссылкой на саму подчиненную форму. Указание свойства Form для ссылки на подчиненную форму или на ее свойства является обязательным для MS Access версии 97 и желательным для версий 2000-2003.

Аналогичным образом, с помощью вставки выражений типа

), строятся выражения для подчиненных форм третьего и далее уровней вложености.

Q4. Обращение к объекту формы из контекста этой формы

Для ссылки на текущий экземпляр объекта, в котором в данное время выполняется программа, рекомендуется использовать ключевое слово Me. Все процедуры, связанные с текущим объектом, имеют доступ к объекту, указываемому с помощью слова Me. Пример использования слова Me в модуле формы, содержащей поле Поле1:

2. Некоторые построители выражений обособляют все названия полей и форм, а также ключевые слова квадратными скобками, например так:


В принципе, их использование необходимо только для элементов, чьи имена содержат внутренние пробелы или другие специальные символы (за исключением самих квадратных скобок - тогда надо пользоваться выражениями типа (3) или (4)).

3. В Соглашении об именах полей, элементов управления и объектов сказано, что имя может включать любую комбинацию букв, цифр, пробелов и специальных символов за исключением точки (.), восклицательного знака (!), надстрочного символа (`), квадратных скобок ([ ]) и управляющих символов (с кодами ASCII от 0 до 31), а также не должно начинаться с символа пробела. Однако вы легко сможете создать объект, имя которого нарушает эти правила. Если вы решили спорить с программистами Microsoft, то следует быть готовым к тому, что, например, Пробелы в именах могут при некоторых обстоятельствах вызывать конфликты в программах Visual Basic .

4. Обратите внимание: название формы, под которым она хранится в файле базы данных, и имя (Name) объекта .Control, содержащего эту подчиненную форму, которое и следует использовать в ссылках, не одно и то же!

Из системы помощи Microsoft Access 97
Операторы ! и . (точка) в идентификаторах указывают тип элемента, стоящего справа от оператора.
Оператор ! указывает, что следующий за ним элемент является элементом, определяемым пользователем (элементом семейства). Например, с помощью оператора ! определяют ссылку на открытую форму, отчет или элемент управления в открытой форме или отчете. (Forms![Заказы]![КодЗаказа])
Оператор . (точка) обычно указывает, что следующий за ним элемент определен в Microsoft Access. Например, оператор . (точка) используется для ссылок на свойства форм, отчетов и элементов управления. Допускается также использование оператора . (точка) для ссылок на значение поля в инструкции SQL, метод Visual Basic for Application или семейство. Например, идентификатор Forms![Заказы].Controls представляет ссылку на семейство Controls формы Заказы.

6. Совпадающие наименования полей, переменных, полей данных.

В системе помощи Microsoft Access описаны довольно обширные правила наименования объектов, суть которых сводится к рекомендации давать уникальные имена полям таблиц, самим таблицам, формам, переменным, функциям и пр. Причем имена не должны совпадать с длинным перечнем зарезервированных слов. Эти правила можно нарушить, но тогда вы будете действовать на свой страх и риск.

Несмотря на вышеуказанные правила, встроенные мастера создания форм создают поля с именами, совпадающими с именами соответствующих полей таблицы - источника данных. В этом случае следует использовать полный синтаксис обращения к объектам.

7. Ускорение работы программ.

При построении выражений, определяющих ссылки на объект, следует иметь в виду, что:
программа, использующая ключевое слово Me, выполняется быстрее, чем использующая полный синтаксис имени объекта. Причем чем больше уровень вложенности подчиненной формы, тем больший выигрыш в скорости вы получите, используя слово Me.
если вам требуется обратиться к свойству .Value (значение) объекта, ключевое слово .Value лучше опустить.
выражение типа (3) выполняется медленнее, чем (2) и (4).

Кроме того, если в некотором фрагменте кода встречаются две и более ссылок на некоторый объект, присвойте его объектной переменной или используйте блок With. Каждый раз, когда вы ссылаетесь на объект, Access'у приходится выяснять, к какому объекту относится ссылка, что приводит к выполнению лишней работы. Но если, например, присвоить ссылку на объект переменной, Access ищет объект всего один раз и кэширует ссылку на него в памяти.

Имейте в виду, что в случае с объектной переменной после окончания использования ее следует очистить:

Set objVar = nothing


8. Вместо инструкции .Value, использованной в большинстве примеров, может быть указано любое доступное свойство или метод объекта формы, например, .Name, .Width, .Enabled, .Tag и т.д. Если требуется прочитать или изменить именно содержимое объекта, то инструкцию .Value можно не использовать.

9. Все вышесказанное в равной мере относится и к отчетам, если заменить все вхождения ключевых слов Form и Forms на Report и Reports.

Допустим, есть форма [Главная], содержащая подчиненную форму [Подчиненная]. Приведу несколько способов обращений к полям и свойствам подчиненной формы.

Еще раз напомню, что название контрола главной формы может отличаться от имени формы (которое видно в окне базы данных). Узнать название контрола можно, один раз щелкнув по нему в конструкторе главной формы правой кнопкой мыши (при этом должна выделиться вся подформа, а не какой-либо из ее элементов, как может делать Access 2000 и более поздних версий), и выбрав пункт меню свойства - имя контрола будет показано в заголовке появившегося окна свойств, а имя формы в поле "Объект-источник" вкладки "Данные". Обращаться к объектам подчиненной формы можно только по названию контрола, содержащего ее в главной форме.

1. Значение поля [Поле1]

Forms(i)(j).Form(k).Value ' Где i, j, k - числовые переменные типа integer с заранее известными и заполненными значениями

Извиняюсь за дурацкий вопрос, но я что-то не могу понять как получить доступ к реквизиту существующего справочника из модуля обработки события "ПриИзменении" элемента формы документа, подскажите как правильно это сделать?

Добавлено через 6 минут
версия 1С 8.2.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь


Как реквизит справочника подставить реквизиту документа
Всем привет. Начал изучать 1С нужно сделать чтобы при выборе сотрудника в ДокументеНаряд его.


Доступ к доп.реквизиту документа
8.2 Управляемое приложение Управление небольшой фирмой Опять аналогичная мини проблема с.

Форму выбора справочника с отбором по реквизиту
Документ Допуски Создан Реквизит Должность, тип Справочник Должность Создана ТЧ с реквизитом.

как можно обратиться к реквизиту справочника из модуля документа?
я пытаюсь вот таким образом: &НаКлиенте Процедура ПробегПриИзменении(Элемент).

честно говоря не знаю обычное оно или управляемое, ну в документе есть табличная часть, в этой табличной части есть реквизит и вот модуль вызывается при изменении реквизита табличной части документа, необходимо реализовать что-то типо авто рассчета. К данным нельзя обращаться на клиенте, перенеси процедуру получения реквизита на сервер

теперь не работает, не заполняет поле Сумма, но ошибки не выдает

Добавлено через 17 минут
сделал вот так вот:

Создал общий модуль
ПолучениеРеквизита
вот содержимое его:
при изменении количество часов выпригивает ошибка " Метод объекта не обнаружен (ПолучитьРеквизит)" что я напортачил ? " Метод объекта не обнаружен (ПолучитьРеквизит)" что я напортачил ?

Это потому что ты галочку у модуля не поставил (вызов сервера)

Добавлено через 28 секунд

То что у вас написано вряд ли вообще работать будет.

Добавлено через 8 минут

а что делает функция Сообщить ? зачем она ? и в качестве форматного параметра можно передовать строковую константу если мне всегда необходимо для 1 сотрудника рассчитывать ?

Добавлено через 48 секунд
эти обе функции в одном модуле изменения описать ?

вот единственно: на сервере не работает. А так: сообщает. Синт.пом глядим, да?

и почему пропущено имя справочника ? при получении ссылки

Добавлено через 10 минут
все заработало, спасибо)


Как присвоить реквизиту ТЧ документа значение реквизита справочника?
Есть справочник "Номенклатура" в нем реквизит РозничнаяЦена, Документ "ПриходнаяНакладная" с.

Как присвоить реквизиту ТЧ документа значение реквизита справочника
Есть справочник Номенклатура, в котором реквизит "Дата выхода" типа Дата И документ "Прием.


Обращение к реквизиту справочника программно
Здарова. Ситуация: создал справочник, в нём реквизиты. В справочнике ФормаЭлемента создал команду.


Ошибка при обращении к реквизиту справочника.
есть справочник ЕдиницыИзмерения с реквизитом КоличествоВШтуках. В приходной накладной в табличной.

В обычном приложении у элемента формы 1С 8.3 было свойство "Значение", доступное как для чтения, так и для записи. Какой аналог в управляемом приложении?

Элементы формы 1С 8.3 могут содержать реквизиты двух видов: реквизиты объекта 1С и реквизиты формы.



Красным помечен реквизит объекта 1С Контрагент, а зеленым – реквизит формы в 1С.

Интерактивно выберем эти элементы в пользовательском режиме 1С и попробуем прочитать их «программно» кнопкой «Прочитать».



Если читать значения реквизитов в клиентской процедуре, то код для 1С Предприятия будет следующий:






Все бы хорошо: мы получили на клиенте значения реквизитов объекта 1С и формы, но – не значения элементов формы 1С. На клиенте значение элементов формы 1С получить нельзя.

2. Как получить значения из элементов формы 1С

Чтобы получить значения из элементов формы 1С, нам потребуется серверный вызов:



Именно на сервере у элемента формы 1С 8.3 становится доступно свойство ПутьКДанным, по которому его можно извлечь либо из Объекта, который имеет тип ДанныеФормыСтруктура:



…либо из Формы, которая имеет тип ФормаКлиентскогоПриложения:




Форма и ее элементы не видны на сервере без контекста. То есть код для 1С:Предприятия выдаст множество ошибок.

Также Форму нельзя передать как параметр в процедуру и функцию на сервер или в общий модуль.




Еще хочется разобрать момент, когда нам возможно увидеть состояние различающихся значений в элементе форме 1С и в объекте. Это возможно в событии элемента ОбработкаВыбора.
Например, при значении поля Контрагент - Ассоль, мы выбрали контрагента Бакалея:

Читайте также: