Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 сен 2024, 03:12

Добовление реквизитов на форму из встроенного языка.

Автор |R|U|D|E|N, 07 фев 2011, 16:13

0 Пользователей и 1 гость просматривают эту тему.

Klyacksa

xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

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

|R|U|D|E|N

Извините меня за кучу мелких вопросов) я начинающий 1с програмист, книги читаю, в языку по техоньку разбераюсь но сейчас срочно необходимо создать одну форму поэтому на книги нет времени. Собственно приходится писать в форум...

Вот разместил я в процедуре формы "ПередОткрытием" описание необходимого мне поля ввода. При открытии формы все красиво и на своих местах.

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
//Объавление переменных///////////////////////////////////////////////
НаСклад = Перечисления.ТипОтгрузки.НаОсновнойСклад;
Клиенту = Перечисления.ТипОтгрузки.ОтгрузкаКлиенту;
Поставщику  = Перечисления.ТипОтгрузки.ОтправкаПоставщику;

    //////////////////////////////////////////////////////////////////////

//При открытии формы кнопка "назад" не доступна.
ЭлементыФормы.Назад.Доступность = Ложь;

//Заполнение секции вопросов
ЭлементыФормы.СтрокаВопрос.Значение = "Куда отгружаем оборудование?";
ЭлементыФормы.СтрокаПодсказкаКВопросу.Значение = "Необходимо выбрать вариант отгрузки. В зависимости от выбранного вариант необходимо будет указать различные данные.";
//Создаем реквизиты для ответов
//Создаем надпись для поля ввода
НадписьОтгрузкаНа = ЭлементыФормы.Добавить(Тип("Надпись"), "СтрокаОтгрузкаНа", Истина);
НадписьОтгрузкаНа.Лево = 20; НадписьОтгрузкаНа.Верх = 200;
НадписьОтгрузкаНа.Ширина = 500; НадписьОтгрузкаНа.Высота = 20;
НадписьОтгрузкаНа.Видимость = Истина;
НадписьОтгрузкаНа.Значение = "Отгрузка на:";
//Создаем поле ввода для ответа на вопрос
ПолеВводаОтгрузкаНа = ЭлементыФормы.Добавить(Тип("ПолеВвода"), "НаправлениеОтгрузки", Истина);
ПолеВводаОтгрузкаНа.КнопкаВыбора = Истина;
ПолеВводаОтгрузкаНа.КнопкаОчистки = Истина;
    ПолеВводаОтгрузкаНа.ВыбиратьТип = Ложь;
ПолеВводаОтгрузкаНа.ТипЗначения = Новый ОписаниеТипов("ПеречислениеСсылка.ТипОтгрузки");
ПолеВводаОтгрузкаНа.Лево = 90; ПолеВводаОтгрузкаНа.Верх = 200;
ПолеВводаОтгрузкаНа.Ширина = 400; ПолеВводаОтгрузкаНа.Высота = 20;
ПолеВводаОтгрузкаНа.Видимость = Истина;



КонецПроцедуры



А теперь из другой процедуры "ДалееКнопкаНажатие" мне надо получить значение созданного в процедуре выше табличного поля. Тойсть те данные которые ввели в поле ввода мне надо получить, записать в переменную. Но когда я обращаюсь к этому полю ввода из другой процедуры, выходит сообщение о том что такого элемента нет или переменная не определенна.


Вот код процедуры "ДалееКнопкаНажатие"

Процедура ДалееНажатие(Элемент)

ОтветОтгрузкаНа = ПолеВводаОтгрузкаНа.Значение;
Если ОтветОтгрузкаНа = НаСклад Тогда
ОтгрузкаНаСклад()
ИначеЕсли  ОтветОтгрузкаНа = Клиенту Тогда
ОтгрузкаКлиенту()
ИначеЕсли  ОтветОтгрузкаНа = Поставщику Тогда
ОтгрузкаПоставщику();

КонецЕсли;


КонецПроцедуры



Что я делаю не так??Как обратится к реквизитам фомы созданным средствами встроенного языка из другой процедуры?





Klyacksa

ПолеВводаОтгрузкаНа = ЭлементыФормы.Добавить(Тип("ПолеВвода"), "НаправлениеОтгрузки", Истина);


в этом случае, "ПолеВводаОтгрузкаНа" - это просто переменная, а сам добавленный элемент называется "НаправлениеОтгрузки".
И к нему нужно обращаться
ЭлементыФормы.НаправлениеОтгрузки.Значение
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

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

cska-fanat-kz

Эх, опередили ;))

ЭлементыФормы (Controls)
Добавить (Add)
Синтаксис:
Добавить(<Тип>, <Имя>, <Видимость>, <Поместить на>)
Параметры:
<Тип> (обязательный)
Тип: Тип. Тип добавляемого элемента управления
<Имя> (обязательный)
Тип: Строка. Имя создаваемого элемента управления. Имя должно быть указано в соответсвии с правилами написания имен системы 1С:Предприятие 8. В противном случае выполнение метода вызовет исключение.
<Видимость> (необязательный)
Тип: Булево. Определяет, создавать новый элемент управления формы видимым или нет. Истина - элемент создается видимым.
Значение по умолчанию: Истина
<Поместить на> (необязательный)
Тип: Панель, ПолеТабличногоДокумента. Определяет, какой панели формы или какому табличному документу принадлежит создаваемый элемент. Если указана панель, то добавляемый элемент размещается на текущей странице панели. Если не указан, создаваемый элемент будет принадлежать непосредственно форме.
Возвращаемое значение:
Элемент управления формы.

Вообще-то у вас ИМЯ ЭЛЕМЕНТА = НаправлениеОтгрузки
Поэтому попробуйте значение нового поля ввода получить так:
ЭлементыФормы.НаправлениеОтгрузки.Значение
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

|R|U|D|E|N

Спасибо Вам, уже в какой раз меня здорово выручаете!

Я чето этот момент упустил. Спасибо что ткнули носом)

|R|U|D|E|N

Надеюсь, что по этой теме пишу в последний раз)

Не могли бы Вы мне подсказать как из встроенного языка проверить существование того или иного элемента формы?

Тойсть создал я из встроенного языка поле ввода, а потом мне нужно проверить, если оно уже созданно то не пытаться его создавать дабы избежать ошибки - "реквизит с указанным именем уже существует"

Делаю так:

Если ЭлементыФормы.ПолеВвода1.Доступность = Истина Тогда

В таком случае если это поле существует то все протекает как мне надо, а вот если не существует то вылазет ошибка "элемент формы не найден" а мне такая ошибка совсем не нужна....

cska-fanat-kz

Цитата: |R|U|D|E|N от 09 фев 2011, 11:20
Надеюсь, что по этой теме пишу в последний раз)

Не могли бы Вы мне подсказать как из встроенного языка проверить существование того или иного элемента формы?

Тойсть создал я из встроенного языка поле ввода, а потом мне нужно проверить, если оно уже созданно то не пытаться его создавать дабы избежать ошибки - "реквизит с указанным именем уже существует"

Делаю так:

Если ЭлементыФормы.ПолеВвода1.Доступность = Истина Тогда

В таком случае если это поле существует то все протекает как мне надо, а вот если не существует то вылазет ошибка "элемент формы не найден" а мне такая ошибка совсем не нужна....

Перебирайте коллекцию элементов формы

Для каждого ТекЭлементФормы Из ЭлементыФормы Цикл
     Если ТекЭлементФормы.Имя = <<ИмяЭлемента>> Тогда
           Сообщить("Элемент уже есть");
     КонецЕсли;
КонецЦикла;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Klyacksa

Так зачем же перебирать все элементы формы, когда нужно проверить существование одного конкретного?))

Если ЭлементыФормы.Найти("ИмяЭлемента")=Неопределено тогда
       Сообщить("Элемента на форме нет");
иначе Сообщить("Элемент на форме есть");
конецесли
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

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

cska-fanat-kz

Снимаю шляпу ))

Действительно, можно и так.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

|R|U|D|E|N

Блин, ну Вы молодци)

Надеюсь, когда то и я буду знать все это на отлично, как и Вы.

Спасибо.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск