1с получить значение поля формы
Есть документ, на форму я добавил "Поле ввода", значение берется из перечислений..
В модуле объекта по нажатию на кнопку "Рассчитать" ведется много расчетов.
Как мне в модуле объекта, получить значение моего поля? В зависимости от этого значения меняется расчет.
(6) связать надо, в поле на форме (второй скрин) "Путь к данным" - надо выбрать тот реквизит, что создали на первом скрине.
А в модуле объекта, если вы выбрали значение поля на форме и записали документ (т.е. данные попали в таблицы базы данных), можно писать просто имя созданного реквизита.
Например проверка на значение поля "Содержимое":
При нажатии на кнопку "Рассчитать" вы выполняете обработку нажатия - процедуру в форме. В этой форме вы вызываете процедуры модуля объекта. Передавайте значение вашего поля ввода в качестве параметра при вызове процедуры модуля объекта.
Если вы добавили реквизит документа, и записали документ, то можно обратиться через ЭтотОбъект.ВашеПоляВвода или просто имя реквизита "ВашеПоляВвода".
Если добавили реквизит формы, то передавать как параметр из модуля формы в модуль объекта. Или поместить во временное хранилище - это на крайний случай.
Какой реквизит "Поле ввода" добавили? формы или объекта?
Если вы добавили реквизит документа, и записали документ, то можно обратиться через ЭтотОбъект.ВашеПоляВвода.
Если добавили реквизит формы, то передавать как параметр из модуля формы в модуль объекта. Или поместить во временное хранилище - это на крайний случай.
Какой реквизит "Поле ввода" добавили? формы или объекта?
Я новичок в 1С, не ругайте. )
Я добавил на форму "поле ввода" и привязал его к перечислению.
Теперь хочу в модуле объекта где ведется расчет добавить условие, которое зависит от выбранного значения. не могу понять как.
(6) связать надо, в поле на форме (второй скрин) "Путь к данным" - надо выбрать тот реквизит, что создали на первом скрине.
А в модуле объекта, если вы выбрали значение поля на форме и записали документ (т.е. данные попали в таблицы базы данных), можно писать просто имя созданного реквизита.
Например проверка на значение поля "Содержимое":
Итак, что же такое параметр?
Параметр – это значение, передаваемое в форму при открытии. Параметр может иметь любой тип и принимать любое значение.
Зачем нужен параметр?
Параметр нужен для передачи в форму дополнительных значений. Например: откуда открыта форма.
Как передать параметр?
Параметр передается в форму при открытии. Например:
Как получить параметр в открывшейся форме?
Получить параметр, переданный в форму, мы можем таким образом:
Как передать несколько значений?
Поскольку параметр может принимать любое значение, он может принимать значение типа Список. Пример
Пример обработки его в открывшейся форме:
Что такое контекст формы?
Контекст – это идентификатор формы, что-то вроде ее имени. Он используется для того, чтобы точно указать программе, к какой форме вы обращаетесь. То есть с помощью контекста можно обращаться к одной форме из другой.
Как работать с контекстом?
Все довольно просто. Для того, чтобы с контекстом работать, его надо сначала передать.
Передается он с помощью параметра. Например:
Но правильнее будет воспользоваться такой процедурой в глобально модуле:
использовать ее нужно так:
Для закрепления полученных знаний приведем практический пример.
Создадим тестовую обработку, и назовем ее Пример. Добави на нее кнопку Закрыть для закрытия формы. Теперь добавим на нее Текстовый реквизит и пропишем ему в поле Формула ТР. Также в модуле формы пропишем:
Теперь откроем форму списка справочника Номенклатура и добавим туда кнопку. В формуле кнопки напишем
Запустите 1С, откройте справочник номенклатуры, нажмите кнопку. Откроется форма и там будет наименование выбранной номенклатуры. Мы передали параметр.
Теперь передадим несколько значений. У кнопки поменяем формулу на ОткрытьПример(). Опишем процедуру:
В обработке перепишем:
Пробуем. В зависимости от того, группа или нет, текущий элемент, в обработке пишется полное наименование или обычное.
Теперь поработаем с контекстом. Перепишем процедуру ОткрытьПример:
Изменим и обработку:
В текстовом реквизите на обработке в формулу пропишем Надпись() и приделаем туда еще одну кнопку Обновить у которой в формулу пропишем Форма.Обновить()
Запускаем. При открытии в текстовом реквизите высвечивается текущий элемент справочника, но при его смене надпись не меняется, а меняется она только после нажатия кнопки Обновить. То есть текстовый реквизит на форме не обновляется. Незадача? Давайте решим и ее. Оказывается, при открытии формы можно получить и ее контекст из места открытия. В форме списка справочника объявим переменную ПримерКонт. Перепишем процедуру ОткрытьПример:
Теперь в функции какого-нить текстового реквизита (например ИнформационнаяНадпись()), пропишем такие строки:
В обычном приложении у элемента формы 1С 8.3 было свойство "Значение", доступное как для чтения, так и для записи. Какой аналог в управляемом приложении?
Элементы формы 1С 8.3 могут содержать реквизиты двух видов: реквизиты объекта 1С и реквизиты формы.
Красным помечен реквизит объекта 1С Контрагент, а зеленым – реквизит формы в 1С.
Интерактивно выберем эти элементы в пользовательском режиме 1С и попробуем прочитать их «программно» кнопкой «Прочитать».
Если читать значения реквизитов в клиентской процедуре, то код для 1С Предприятия будет следующий:
Все бы хорошо: мы получили на клиенте значения реквизитов объекта 1С и формы, но – не значения элементов формы 1С. На клиенте значение элементов формы 1С получить нельзя.
2. Как получить значения из элементов формы 1С
Чтобы получить значения из элементов формы 1С, нам потребуется серверный вызов:
Именно на сервере у элемента формы 1С 8.3 становится доступно свойство ПутьКДанным, по которому его можно извлечь либо из Объекта, который имеет тип ДанныеФормыСтруктура:
…либо из Формы, которая имеет тип ФормаКлиентскогоПриложения:
Форма и ее элементы не видны на сервере без контекста. То есть код для 1С:Предприятия выдаст множество ошибок.
Также Форму нельзя передать как параметр в процедуру и функцию на сервер или в общий модуль.
Еще хочется разобрать момент, когда нам возможно увидеть состояние различающихся значений в элементе форме 1С и в объекте. Это возможно в событии элемента ОбработкаВыбора.
Например, при значении поля Контрагент - Ассоль, мы выбрали контрагента Бакалея:
Новое значение доступно как параметр процедуры ВыбранноеЗначение.
Система дает шанс что-то сделать в этой ситуации.
Специалист компании ООО «Кодерлайн»
Вас могут заинтересовать следующие статьи:
94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->
Вас могут заинтересовать следующие вебинары:
В обычном приложении у элемента формы 1С 8.3 было свойство "Значение", доступное как для чтения, так и для записи. Какой аналог в управляемом приложении?
Элементы формы 1С 8.3 могут содержать реквизиты двух видов: реквизиты объекта 1С и реквизиты формы.
Красным помечен реквизит объекта 1С Контрагент, а зеленым – реквизит формы в 1С.
Интерактивно выберем эти элементы в пользовательском режиме 1С и попробуем прочитать их «программно» кнопкой «Прочитать».
Если читать значения реквизитов в клиентской процедуре, то код для 1С Предприятия будет следующий:
Все бы хорошо: мы получили на клиенте значения реквизитов объекта 1С и формы, но – не значения элементов формы 1С. На клиенте значение элементов формы 1С получить нельзя.
2. Как получить значения из элементов формы 1С
Чтобы получить значения из элементов формы 1С, нам потребуется серверный вызов:
Именно на сервере у элемента формы 1С 8.3 становится доступно свойство ПутьКДанным, по которому его можно извлечь либо из Объекта, который имеет тип ДанныеФормыСтруктура:
…либо из Формы, которая имеет тип ФормаКлиентскогоПриложения:
Форма и ее элементы не видны на сервере без контекста. То есть код для 1С:Предприятия выдаст множество ошибок.
Также Форму нельзя передать как параметр в процедуру и функцию на сервер или в общий модуль.
Еще хочется разобрать момент, когда нам возможно увидеть состояние различающихся значений в элементе форме 1С и в объекте. Это возможно в событии элемента ОбработкаВыбора.
Например, при значении поля Контрагент - Ассоль, мы выбрали контрагента Бакалея:
Новое значение доступно как параметр процедуры ВыбранноеЗначение.
Система дает шанс что-то сделать в этой ситуации.
Специалист компании ООО «Кодерлайн»
Вас могут заинтересовать следующие статьи:
94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->
Вас могут заинтересовать следующие вебинары:
Подскажите, пожалуйста, как мне добраться из общего модуля до значений полей ввода формы?
Мой код в общем модуле:
ФормаSQL.ЭлементыФормы -- после точки (ФормаSQL.ЭлементыФормы) выдается список методов Добавить(), Количество(), Найти() а как добраться то до поля ввода?
Также через точку. Например если элемент называется Элемент1 то
запустите отладку, поставьте точку останова после получения формы, выделите мышью "ФормаSQL.Элементы" и нажмите Shift+F9
(1) а откуда там значениям взяться ? вы получили там пустую форму, в которой ничего не введено.
Значения, должны где-то сохраняться, вот оттуда и нужно их брать.
Либо, если ваша функция вызывается пользователем из формы, то значения нужно передать в функцию параметрами.
и кстати,
ЭтотОбъект.ПолучитьФорму - ОТкуда в общем модуле взялся ЭтотОбъект ?
Уточните лучше ситуацию, что у вас за Объект, что за форма, что все это делает, и зачем общий модуль ?
(2) Ну в общем есть форма FRM_SQL (предназначена для настроек соединения с БД). В полях этой формы задаются параметры: ИмяСервераSQL, ПользовательSQL, ПарольSQL и т.д.
Функция общего модуля fnc_search_1C_SQL(a_table, a_value) выполняет SQL запрос к БД c параметрами a_table, a_value (просто я не стал писать сам текст запроса и его обработку здесь). Перед запросом устанавливается соединение с БД с параметрами ИмяСервераSQL, ПользовательSQL, ПарольSQL .
Идея была получать в общем модуле указанные параметры из полей формы FRM_SQL используя что-то вроде ЭлементыФормы.ПолеИмяСервераSQL.Значение и т.д. и т.п.
вызов функции из самой формы происходит ?
Тогда добавь в форму, в момент нажатия кнопки , или что там у тебя..третий параметр. например Структуру, где будет хранится пароль, имя и т.д.
Функция общего модуля fnc_search_1C_SQL(a_table, a_value) выполняет SQL запрос к БД c параметрами a_table, a_value (просто я не стал писать сам текст запроса и его обработку здесь). Перед запросом устанавливается соединение с БД с параметрами ИмяСервераSQL, ПользовательSQL, ПарольSQL .
Идея была получать в общем модуле указанные параметры из полей формы FRM_SQL используя что-то вроде ЭлементыФормы.ПолеИмяСервераSQL.Значение и т.д. и т.п.
Идея хорошая. А кто призывает функцию общего модуля fnc_search_1C_SQL?
скорее всего на форме хранятся данные о подключении ИмяСервераSQL, ПользовательSQL и т.д.
если вызов идет с модуля объекта на котором в данный момент хранятся значения то можно и просто обратиться Объект.ИмяРеквизитаФормы
если вызов идет с модуля объекта на котором в данный момент хранятся значения то можно и просто обратиться Объект.ИмяРеквизитаФормы
Нет. В этом то и вопрос. Значения хранятся в модуле формы, а обращение происходит из общего модуля.
да не могут значения хранится в модуле формы .
Любые значения хранятся в реквизитах какого-либо объекта. Справочника, документа. в константах, или регистрах сведений.
Форма, сама по себе, является просто телевизором для пользователя. И данные в ней существуют ровно тогда, когда их видит сам пользователь. Закрыл форму - и все. никаких данных там нет. Данные должны сохранится в этот момент, в каком-то объекте базы.
(6) ФормаSQL.ЭлементыФормы -- после точки (ФормаSQL.ЭлементыФормы) выдается список методов Добавить(), Количество(), Найти() а как добраться то до поля ввода?
ФормаSQL.ЭлементыФормы -- после точки (ФормаSQL.ЭлементыФормы) выдается список методов Добавить(), Количество(), Найти() а как добраться то до поля ввода?
Также через точку. Например если элемент называется Элемент1 то
запустите отладку, поставьте точку останова после получения формы, выделите мышью "ФормаSQL.Элементы" и нажмите Shift+F9
Читайте также: