УстановитьДействие — что не так сделал?
1С. Управляемое приложение. В форме документа в ПриСозданииНаСервере вызывается моя функция из общего модуля, на котором установлен флажок «Сервер». В этой функции на рождающуюся форму добавляются программно ряд полей ввода.
Так же в конфигурации есть модуль, имеющий флажок «Клиент». В данном модуле используется функция-обработчик работающая при нажатии на элемент, добавленный программно.
Обработчик устанавливается в серверном модуле таким образом:
Для каждого ДР из ТЗГДР Цикл
// а теперь добавим элемент формы под ранее созданный реквизит
Элемент = ЭлементыФормы.Добавить(«до_эф_»+ДР.Заголовок, Тип(«ПолеФормы»), до_ГДР);
//Элемент.Родитель = до_ГДР;
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Элемент.Видимость = Истина;
Элемент.Гиперссылка = Истина;
Элемент.Доступность = Истина;
Элемент.ПутьКДанным = «до_»+ДР.Заголовок;
Если ДР.Значение = » » Тогда
Элемент.ЦветТекста = Новый Цвет(255, 0, 0);
КонецЕсли;
// Надо исправить
Элемент.УстановитьДействие(«Нажатие», «до_ФункцииФормыКлиент.до_ОбработкаГиперссылкиДРКлиент»);
КонецЦикла;
Но вот что-то ни хрена не срабатывает оный обработчик. Что делаю не так?
(1) потому что так написано в кривом СП
ЭлементыФормы (FormItems)
Элементы коллекции:
ГруппаФормы, ТаблицаФормы, ПолеФормы, КнопкаФормы
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются .
Возможно обращение к коллекции посредством оператора [. ]. В качестве аргумента передается имя элемента.
Содержит коллекцию подчиненных элементов управляемой формы.
Тонкий клиент, веб-клиент, сервер, толстый клиент.
См. также:
ТаблицаФормы, свойство ПодчиненныеЭлементы
Источник
Не срабатывает УстановитьДействие(«Нажатие», «МояПроцедура»);
Всем доброго дня пытаюсь сделать рабочий стол кассира для точек продажи кофе
нужно выводить с ночало группы элементов спр.Номенклатуры а при наатии на одну из них удалять реквизиты и встовлять новые но уже элементы
так вот вывести группы удалось картинки то же удалось рабочий облась получилась довольно красивой в вот реакции на нажатие нет что елать или что я не так делаю?
#Область ДобавлениеРеквизитов
МассивДобавляемыхЭлементов = Новый Массив;
МассивДобавляемыхЭлементов.Добавить(Новый РеквизитФормы(«ВторойРеквизит»+аа, Новый ОписаниеТипов(«Строка»), «», «Второй реквизит»+аа));
ИзменитьРеквизиты(МассивДобавляемыхЭлементов);
НовыйЭлемент = Элементы.Вставить(«ВторойРеквизит»+аа, Тип(«ПолеФормы»), Элементы.Группа5);
НовыйЭлемент.Заголовок = СОКРЛП(Спр.Наименование);
НовыйЭлемент.Видимость = Истина;
НовыйЭлемент.Гиперссылка = Истина;
НовыйЭлемент.Доступность = Истина;
НовыйЭлемент.ПутьКДанным = «ВторойРеквизит»+аа;
НовыйЭлемент.Вид = ВидПоляФормы.ПолеКартинки;
//НовыйЭлемент.Вид = ВидКнопкиФормы.Гиперссылка;
НовыйЭлемент.РастягиватьПоГоризонтали = Истина;
НовыйЭлемент.РастягиватьПоВертикали = Ложь;
НовыйЭлемент.Ширина = 0;
НовыйЭлемент.Высота = 12;
НовыйЭлемент.ШрифтЗаголовка = Новый Шрифт(,15,Истина);
//отображение картинки при открытии формы справочника
Если аа = 1 Тогда
ЭтаФорма.ВторойРеквизит1 = ПолучитьНавигационнуюСсылку(Спр.Картинка.Ссылка, «Файл»);
КонецЕсли;
//отображение картинки при открытии формы справочника
Если аа = 2 Тогда
ЭтаФорма.ВторойРеквизит2 = ПолучитьНавигационнуюСсылку(Спр.Картинка.Ссылка, «Файл»);
КонецЕсли;
Если аа = 3 Тогда
ЭтаФорма.ВторойРеквизит3 = ПолучитьНавигационнуюСсылку(Спр.Картинка.Ссылка, «Файл»);
КонецЕсли;
Если аа = 4 Тогда
ЭтаФорма.ВторойРеквизит4 = ПолучитьНавигационнуюСсылку(Спр.Картинка.Ссылка, «Файл»);
КонецЕсли;
//устанавливаем автомасштаб для картинки
//НовыйЭлемент.РазмерКартинки
Если аа = 1 Тогда
Элементы.ВторойРеквизит1.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецЕсли;
Если аа = 2 Тогда
Элементы.ВторойРеквизит2.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецЕсли;
Если аа = 3 Тогда
Элементы.ВторойРеквизит3.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецЕсли;
Если аа = 4 Тогда
Элементы.ВторойРеквизит4.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецЕсли;
#Область ИзменениеРасположенияРеквизитов
#КонецОбласти
#Область ДобавлениеСтраницИТаблиц
#КонецОбласти
#Область ДобавлениеКоманд
#КонецОбласти
Конецесли;
КонецЦикла;
Для каждого ТекЭлУпр Из Элементы.Группа5.ПодчиненныеЭлементы Цикл
ТекЭлУпр.УстановитьДействие(«Нажатие», «МояПроцедура»);
КонецЦикла;
так же пытался создать поле ввода типа картинка на форме после создал для нее событие типа нажатие после запустил нажал а реакции 0(
то есть эта проблем а не от того что реквизиты создаются программно тогда от чего?
Ну так что ни кто не знает как установить действие на картинку что бы при нажатии на нее срабатывала функция или как программно добавить картинку на кнопку
вот новый код вывода кнопок в место картинок но теперь проблема с добавлением картинок к кнопке
Источник
Как через УстановитьДействие() использовать процедуру общего модуля?
Как в качестве обработчика действия через УстановитьДействие можно установить свой обработчик для элемента формы. Если эта процедура должна быть расположена в модуле формы, то это не интересно, так как в каждой форме надо плодить всякие обработчики.
При этом из модуля формы видно процедуры общих глобальных (точку в имени обработчика нельзя использовать) модулей, а в качестве обработчиков событий их назначить нельзя.
УстановитьДействие( , )
Примечание:
Процедура должна быть экспортируемой и располагаться в модуле формы, при этом количество параметров должно совпадать с необходимым количеством параметров события, инициирующего вызов действия.
Действие (Action)
Описание:
Предназначен для получения действия, которое можно назначить в качестве обработчика события элемента управления или команды пользовательского интерфейса.
Для обработки события может быть вызвана процедура или функция модуля формы, модуля приложения или общего модуля, имя которой задано в конструкторе.
А в вот в качестве обработчика события почему нельзя? Её же (процедуру) видно из модуля формы.
Видил как Гений1С встраивает формы одну в другую, но в данном случае это на крайний случий.
Кто с этим боролся, как и каков результ?
(11) Зачем ЭУ (элементу управления) иметь свойство родитель?
Зачем получать экземпляр формы?
Достаточно перед открытием формы было бы прописать события к элементам и все.
Если события случаенно разные для одного и того же по наименованию элемента формы но в разных формах, то можно привязать разные событийные процедуры или по разному называть реквизиты. Если реквизиты по сути разные, то называть надо их по разному (одинаковые должны вести себя одинаково) или . я думаю что много разных вариантов можно придумать.
Смысл в чем при привязке к событию процедура ищется только в модуле формы. Жаль что нельзя передать в событийную процедуру имя самого события.
Можно было бы нарисовать мультиплексную процедуру ко всем элементам, которая бы перенаправляла бы на нужную процедуру. Т.е. не много разных объявлять, а одну в которой одна строчка вызова процедуры общего модуля. А в процедуре перед открытием назначать на эту мультиплексную процедуру модуля формы натравливать все необходимые события всех необходимых реквизитов. Ну вот такой бы изврат можно было бы придумать, но имя события не получишь.
Т.е. единственное что отработает, так это одна процедура на каждое событие для всех необходимых элементов. По имени элемента соответственно свой конечный обработчик. Т.е. не одна мультиплексная процедура, а столько сколько вариантов событий (ПриИзменении, При..).
Источник
8.3 Выполнить действие/вызвать событие элемента формы без Выполнить()
Доброго времени суток.
На форме переназначаю элементу типовое действие(событие) «ПриИзменении», связку элемент+имя типового метода предварительно сохраняю при помощи ПолучитьДействие(«ПриИзменении»).
После выполнении нетипового действия для элемента нужно вызвать типовой метод.
Очень просится использовать Выполнить( ), но в синтаксис-помощнике имеется грустный повод этого не делать:
Примечание:
В режиме запуска веб-клиент оператор не поддерживается, при его вызове будет сгенерировано исключение.
Расширения использовать не могу по условиям задачи.
Что же делать-то?
возможно, существует какой-то хитрый способ?
(7) Согласен. Жесткое расположение кода обработчика — отдельная неприятная песня.
Что означает Экспорт + ЭтотОбъект.Обработчик(. )?
(6) По условиям задачи я могу модифицировать код формы, но только добавляя новые методы, не модифицируя типовые.
(13)Вы забываете, что методы реализации конкретной прикладной задачи программистом бывают ограничены постановкой. У вас не так? Вы рубите что хотите? Сочувствую вашим клиентам.
И, что бы закончить вашу неконструктивную ветку, ежу понятно что оптимумом было бы использование расширений.
Теперь о том, как решается такая задача при помощи Выполнить().
Собственно, осталось совсем немножко подумать.
Предложение Cyberhawk сработало бы, будь у метода ПриИзменении(Элемент) два параметра (если закрыть глаза на то, что придет в параметр «Элемент» вместо элемента).
Например ПоказатьПредупреждение() требует в описании оповещения процедуры с одним параметром, но оно выводит что-то на экран, к сожалению.
Вот если бы можно было бы как-то дернуть определенное интерактивное событие определенного элемента программно, всё бы получилось.
(14) Универсализм — говно. На тебе сценарий — в одном из обновлений приезжает:
Процедура ПодразделениеПриНачалеВыбора(.
КонецПроцедуры
Гениальный код тихо курит в сторонке, печатаются документы, предприятие работает. И через полгодика выясняется, что что-то не так.
Измененный код падает сразу, на вызове несуществующего, вызывается специалист, выписывается животворящий, и все снова работает.
Не надо закладывать теракт. «Сочувствую вашим» и дальше по тексту.
Источник
Обработчик ПриИзменении для ячейки, созданной программно
Нужно, чтобы при изменении ячейки с единицей измерения выбирались только те элементы справочника ЕдиницыИзмерения, владельцем которых выступает определённый элемент справочника номенклатура.
Я не тем путём иду?
вот код (примерно), индексы чтобы понятно было:
как сделать так, чтобы в колонке с единицей измерения при изменении в списке подбора были только те элементы справочника ЕдиницыИзмерения, у которых владелец — тот, что в нулевой колонке?
(26) Попытка номер 2.
что написано в поле «Данные» свойств табличного поля?
(30) при выборе в элементе управления, конечно, я неправильно в (24) выразился.
короче, при изменении в ячейке.
(40) хм, а в чём радость?
нужен выбор единицы измерения по владельцу при изменении именно в ячейке .ЕдиницаИзмерения
у тебя получается, что при изменении номенклатуры загружается только его базовая единица.
(43) таблица установки цен:
| Магазин 1 | Магазин 2 |
Номенклатура | Цена | Ед. изм. | Цена | Ед. изм. |
—————+——+———-+——+———-+
Marlboro | 32 | пачка | 34 | пачка |
Marlboro | 640 | блок | 680 | блок |
Яйца 1 кат. | 20 | 1 дес. | 21 | 1 дес. |
Яйца 1 кат. | 60 | 3 дес. | 63 | 3 дес. |
Нужно, чтобы когда пользователь выбирает единицу измерения в ячейке, то выбирались только те элементы справочника ЕдиницыИзмерения, у которых владелец — элемент номенклатуры в первой колонке. Т.е. чтобы для яиц не выбралась единица «блок» и т.д.
Сразу по (46): нельзя описать колонки заранее, они формируются динамически (для каждой структурной единицы), структурных единиц много, поэтому пользователь вначале при запуске обработки выбирает, для каких структурных единиц ему нужно установить/изменить/удалить цены, формируются колонки, получаются текущие цены из регистра и выводятся в таблицу.
можно ещё сделать свои формы добавления и редактирования строки табличного поля (чтобы не прямо в поле редактировать), но тоже некрасиво
но так наверное и сделаю как ты посоветовал.
Использование:
Только чтение.
Описание:
Номер элемента объекта, с которым связано по типу поле ввода. Например, если поле ввода связано со ссылкой на счет, то номер элемента будет обозначать номер вида субконто, из которого будет взят тип для отработки связи.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Примечание:
Нумерация начинается с 1.
(51) да это всё равно не то.
а как по данной строке объекта ТаблицаЗначений получить соответствующую строку в объекте ТабличноеПоле?
Источник