|
v7: событие по нажатию кнопки | ☑ | ||
---|---|---|---|---|
0
MixanM
20.01.12
✎
06:05
|
Народ, всех привествую, скажите как сделать что бы 1с реагировал на нажатие кнопки на форме - т.е. на морде расположены 3 кнопки("1","2","3"), и текст, текст показывает какую кнопку нажимать, и при нажатии на нужную кнопку, код ехал даальше, делал через Ф-ию вопрос:
вопр = Вопрос("Нажмите кнопку ""Да"" чтобы сделать тото, ""Нет"" чтобы сделать тото или ""Отмена"" чтобы сделать тото", 3); Если Вопр = 6 тогда ... ИначеЕсли Вопр = 7 тогда ... ИначеЕсли Вопр = 2 Тогда ... КонецЕсли Но сейчас мне надо уже 4 варианта, и хотел сделать уже все через элементы на форме, а не через ф-ию "Вопрос". Так вот, как этоо реализовать, в Делфях было проще но.. |
|||
1
ДенисЧ
20.01.12
✎
06:09
|
Своя обработка, открытая модально.
На ней кнопки. В кнопках в тексте горячие клавиши, вроде через & задаются. ТОчнее - в ЖКК |
|||
2
MixanM
20.01.12
✎
06:12
|
а как в коде реакцию на нажатую кнпку описать?
|
|||
3
Kookish
20.01.12
✎
06:18
|
В свойствах кнопки аднака. На вкладке "Дополнительно" в поле "Формула" прописываешь вызов нужной функции. Но это тебе не поможет, раз не научился смотреть глазами и думать головой.
|
|||
4
Erhov_egor
20.01.12
✎
06:20
|
пишешь процедуру или функцию в свойствах кнопки и в программном коде описываешь че должна делать
|
|||
5
big
20.01.12
✎
06:21
|
Форма.АктивныйЭлемент()
вернет идентификатор нажатой кнопки. (3) спокойнее, спокойнее, коллега. Постить такое в 3-ем посте - это моветон. |
|||
6
MixanM
20.01.12
✎
06:27
|
(4) самый простой способ - это для каждой кнопки написать функцию, просто я думал что можно сделать : что то вроде обработчика событий. Ну да ладно, так тоже работает, просто строк кода много - никакой оптимизации =)
|
|||
7
Kookish
20.01.12
✎
06:30
|
(6) См (5). Можно на все кнопки навесить одну функцию.
|
|||
8
MixanM
20.01.12
✎
06:36
|
(7) Сорри я когда свой пост добавлял этого еще не было, спасибо
|
|||
9
MixanM
20.01.12
✎
07:09
|
(7)чего то я ак и не понял как работает этот метод, написал так
Если (Форма.АктивныйЭлемент() = Форма.Кн1) Тогда возвращает ошибку: Кн1<<?>>() Процедура не обнаружена (Кн1) т.е. получается - мнен нужно написать функцию для этого элемента ? |
|||
10
ДенисЧ
20.01.12
✎
07:10
|
(9) Продам СП. Безумно дорого. Но там будет ответ на твой вопрос....
|
|||
11
Ковычки
20.01.12
✎
07:24
|
Если (Форма.АктивныйЭлемент() = "Кн1") Тогда
|
|||
12
1Сергей
20.01.12
✎
07:25
|
В первой кнопке пишешь ПоКнопке(1)
Во второй: ПоКнопке(2) В третьей: ПоКнопке(3) в модуле: Процедура ПоКнопке(НомерКнопки) Если НомерКнопки=1 Тогда //* Нажата первая кнопка ИначеЕсли НомерКнопки=2 Тогда //* Нажата вторая кнопка ИначеЕсли НомерКнопки=3 Тогда //* Нажата третья кнопка КонецЕсли; КонецПроцедуры |
|||
13
ДенисЧ
20.01.12
✎
07:26
|
(11) Ви, батенька, мине весь бузинесс поrтите...
|
|||
14
MixanM
20.01.12
✎
07:27
|
(13) я б, таки не купился)))
|
|||
15
1Сергей
20.01.12
✎
07:27
|
или я нифига не понял?
|
|||
16
Гефест
20.01.12
✎
07:27
|
(13) Кому какой толк от твоих СП?
1с купил, СП купил, читать не купил |
|||
17
MixanM
20.01.12
✎
07:27
|
(11)(13)(16) я пробовал как в (11) - не работает
|
|||
18
PuhUfa
20.01.12
✎
07:29
|
(13) так делиться просто надо -)
(16) ну так потом будет: "научу читать купленный у меня СП. дорого" -) |
|||
19
PuhUfa
20.01.12
✎
07:30
|
(17) отладчиком посмотри что возвращает Форма.АктивныйЭлемент()
ps чем тебя (12) не устраивает? |
|||
20
ДенисЧ
20.01.12
✎
07:31
|
(17) У меня работает... Так что тебе кроме сп нужно ещё две внешние компоненты купить, но уже не у меня...
|
|||
21
MixanM
20.01.12
✎
07:42
|
(20) я думаю их уже не купить,из за отсуствия этих компонент сослаться можно только на брак при производстве
|
|||
22
1Сергей
20.01.12
✎
07:44
|
(21) бугага :) Самокритично
|
|||
23
MixanM
20.01.12
✎
08:26
|
не могу отладчиком выцепить значение вот тут :
Если (Форма.АктивныйЭлемент() = "Кн1") Тогда ставлю точку останова, но значение пустое, т.к. программа одинэс отсановленна уже и я еще не передал сюда параметр по нажатию кнопик(ведь я же ее так и не нажал ), соотвесвенно показывает : "Недопустимое значение" в этом месте. Если просто запустить обраьботку, то доходя до : Если (Форма.АктивныйЭлемент() = "Кн1") Тогда она посто не реагирует на нажатия кнопки... отака фигня. з.ы. У кнопки Идентификатор "Кн1" |
|||
24
1Сергей
20.01.12
✎
08:27
|
(23) а теперь вопрос на миллион. Ты где этот код написал-то?
|
|||
25
MixanM
20.01.12
✎
08:34
|
(24) так понятно будет? или лучше полный листинг? :
СпрЕдиницыОЛЕ.ВыбратьЭлементы(0); Пока СпрЕдиницыОЛЕ.ПолучитьЭлемент() = 1 Цикл Иначе Если Условие1 Тогда ... Если условие2 Тогда Если Спр.ПометкаУдаления() = 1 Тогда ... Иначе Если Условие3 Тогда ... Если Условие 4 Тогда ... Иначе ... Если Услвие Тогда ... Иначе ... Если СпрОЛЕДляПоискаПоКоду2.ПометкаУдаления() = 1 Тогда Сообщить("В базе "+Розн+"такойэлемент помечен на удаление, проверяться не будет"); Иначе Если (Форма.АктивныйЭлемент() = "Кн1") Тогда |
|||
26
Mikeware
20.01.12
✎
08:41
|
(16) нееее..
1с укралЪ, СП укралЪ, читать - не укралЪ.... |
|||
27
MixanM
20.01.12
✎
08:44
|
(26) кто такой Сп ?
|
|||
28
MixanM
20.01.12
✎
08:44
|
всмысле в нем нифига не написано:
Форма.АктивныйЭлемент(); Синтаксис: Форма.АктивныйЭлемент() Назначение: Возвращает строковое значение - идентификатор активного элемента диалога. Замечание: Доступ к методу возможен только в контексте Модуля формы через атрибут Форма. |
|||
29
1Сергей
20.01.12
✎
08:45
|
(25) нет, не понятней. Что за процедура и откуда вызывается?
|
|||
30
MixanM
20.01.12
✎
08:45
|
(29) тогда вот :
Процедура ПоКнопке(НомерКнопки) Если НомерКнопки=1 Тогда //* Нажата первая кнопка ИначеЕсли НомерКнопки=2 Тогда //* Нажата вторая кнопка ИначеЕсли НомерКнопки=3 Тогда //* Нажата третья кнопка КонецЕсли; КонецПроцедуры Процедура Сформировать() ИмяФайла = "c:\rash.txt"; Файл = СоздатьОбъект("Текст"); Спр = СоздатьОбъект("Справочник.Номенклатура"); СпрЕдиницы = СоздатьОбъект("Справочник.Единицы"); БазаОле = СоздатьОбъект("V77.Application"); БазаОле2 = СоздатьОбъект("V77.Application"); ПользовательОле = "Admin"; ПарольОле = ""; ЗапускБезЗаставки = 1; Подключение = БазаОле.Initialize(БазаОле.RMTrade, "/DH:\trade_mag_Centr1\"+" /n"+ПользовательОле+" /p" +ПарольОле,"NO_SPLASH_SHOW"); Подключение2 = БазаОле2.Initialize(БазаОле.RMTrade, "/DH:\trade_mag_rozn2\"+" /n"+ПользовательОле+" /p" +ПарольОле,"NO_SPLASH_SHOW"); Если Подключение = 0 Тогда Сообщить("Коннект к 1 утерян "); Возврат; Иначе Сообщить("Подключились к 1"); КонецЕсли; Если Подключение2 = 0 Тогда Сообщить("Коннект к 2 утерян "); Возврат; Иначе Сообщить("Подключились к 2"); КонецЕсли; Опт = "База ОПТ"; ТЦ = "База Торговый Центр"; Розн = "База Розница "; Файл.Открыть(ИмяФайла); СпрЕдиницыОЛЕ = БазаОле.CreateObject("Справочник.Единицы"); СпрОЛЕ = БазаОле.CreateObject("Справочник.Номенклатура"); СпрЕдиницыОЛЕ2 = БазаОле2.CreateObject("Справочник.Единицы"); СпрОЛЕ2 = БазаОле2.CreateObject("Справочник.Номенклатура"); СпрОЛЕДляПоискаПоКоду2 = БазаОле2.CreateObject("Справочник.Номенклатура");//создал второй , ибо слетает курсор с первой rulf шарит по единицам СпрОЛЕ22 = БазаОле2.CreateObject("Справочник.Номенклатура"); СпрЕдиницы.ВыбратьЭлементы() ; Счетчик = 0; Всего = 0; СпрЕдиницыОЛЕ.ВыбратьЭлементы(0); Пока СпрЕдиницыОЛЕ.ПолучитьЭлемент() = 1 Цикл Всего = Всего +1; Состояние(Всего); ШК = СпрЕдиницыОЛЕ.ШтрихКод; ИмяОЛЕ = СпрЕдиницыОЛЕ.Владелец.Наименование; КодОЛЕ = СпрЕдиницыОЛЕ2.Владелец.Код; Если СпрЕдиницыОЛЕ.Владелец.Весовой = 1 Тогда Сообщить("Товар весовой - пропускаем"); Иначе Если ШК <> 0 Тогда Спр.ВыбратьЭлементы(); Если Спр.НайтиПоНаименованию(ИмяОЛЕ, 0) = 1 Тогда Если Спр.ПометкаУдаления() = 1 Тогда Сообщить("Помечен на удаление - пропускаем"); Иначе Если СпрЕдиницы.НайтиПоРеквизиту("ШтрихКОД", ШК, 1) = 1 Тогда ИмяСпр = СпрЕдиницы.ТекущийЭлемент().Владелец.наименование; КодСпр = СпрЕдиницы.ТекущийЭлемент().Владелец.Код; //Сообщить("кодСпр : "+КодСпр); СпрЕдиницыОЛЕ2.ВыбратьЭлементы(); СпрЕдиницыОЛЕ2.НайтиПоРеквизиту("ШтрихКод", ШК, 1 ); Если СпрЕдиницыОЛЕ2.НайтиПоРеквизиту("ШтрихКод", ШК, 1 ) = 0 Тогда ИмяОЛЕ2 = 0; КодОЛЕ2 = 0; Файл.Записать(ШК+" в базе "+Опт+" не найден"); Иначе ИмяОЛЕ2 = СпрЕдиницыОЛЕ2.Владелец.Наименование; КодОЛЕ2 = СпрЕдиницыОЛЕ2.Владелец.Код; СпрОЛЕ.НайтиПоНаименованию(ИмяОЛЕ, 0); Если СпрОЛЕ.ПометкаУдаления() = 1 Тогда Сообщить("В базе "+Опт+"такойэлемент помечен на удаление, проверяться не будет"); Иначе СпрОЛЕ22.НайтиПоНаименованию(ИмяОле2, 0); Если СпрОЛЕДляПоискаПоКоду2.ПометкаУдаления() = 1 Тогда Сообщить("В базе "+Розн+"такойэлемент помечен на удаление, проверяться не будет"); Иначе Если (ИмяСпр <> ИмяОЛЕ) или (ИмяСпр <> ИмяОЛЕ2) Тогда Счетчик = Счетчик+1; Форма.ТекстГл.Заголовок("Расхождение названия для шк : "+ШК +" Нажмите 1 чтобы использовать наименование из "+ТЦ +"или ""2"" для использования имени из "+Опт +",Или ""3"" для имени из "+Розн); Форма.ТекстТЦ.Заголовок("1 :"+КодСпр+" "+ИмяСПР+" *** - Это название из базы "+ТЦ); Форма.ТекстОпт.Заголовок("2 :"+КодОЛЕ+" "+ИмяОЛЕ+" *** - Это название из базы "+Опт); Форма.ТекстРозн.Заголовок("3 :"+КодОЛЕ2+" "+ИмяОЛЕ2+" *** - Это название из базы "+Розн); Если (Форма.АктивныйЭлемент() = "Кн1") Тогда |
|||
31
Mikeware
20.01.12
✎
08:50
|
(30) Процедура ПоКнопке - восхищает глубиной полета мысли....
|
|||
32
1Сергей
20.01.12
✎
08:50
|
(30) афигеть
|
|||
33
1Сергей
20.01.12
✎
08:51
|
(31) это я ему дал ещё в (12)
|
|||
34
1Сергей
20.01.12
✎
08:51
|
Видимо, зря
|
|||
37
MixanM
20.01.12
✎
10:52
|
(35) ну как бы, этот код был рабочий, если испольовалось так:
Процедура Сформировать() ИмяФайла = "c:\rash.txt"; Файл = СоздатьОбъект("Текст"); Спр = СоздатьОбъект("Справочник.Номенклатура"); СпрЕдиницы = СоздатьОбъект("Справочник.Единицы"); БазаОле = СоздатьОбъект("V77.Application"); БазаОле2 = СоздатьОбъект("V77.Application"); ПользовательОле = "Admin"; ПарольОле = ""; ЗапускБезЗаставки = 1; Подключение = БазаОле.Initialize(БазаОле.RMTrade, "/DH:\trade_mag_Centr1\"+" /n"+ПользовательОле+" /p" +ПарольОле,"NO_SPLASH_SHOW"); Подключение2 = БазаОле2.Initialize(БазаОле.RMTrade, "/DH:\trade_mag_rozn2\"+" /n"+ПользовательОле+" /p" +ПарольОле,"NO_SPLASH_SHOW"); Если Подключение = 0 Тогда Сообщить("Коннект к 1 утерян "); Возврат; Иначе Сообщить("Подключились к 1"); КонецЕсли; Если Подключение2 = 0 Тогда Сообщить("Коннект к 2 утерян "); Возврат; Иначе Сообщить("Подключились к 2"); КонецЕсли; Опт = "База ОПТ"; ТЦ = "База Торговый Центр"; Розн = "База Розница "; Файл.Открыть(ИмяФайла); СпрЕдиницыОЛЕ = БазаОле.CreateObject("Справочник.Единицы"); СпрОЛЕ = БазаОле.CreateObject("Справочник.Номенклатура"); СпрЕдиницыОЛЕ2 = БазаОле2.CreateObject("Справочник.Единицы"); СпрОЛЕ2 = БазаОле2.CreateObject("Справочник.Номенклатура"); СпрОЛЕДляПоискаПоКоду2 = БазаОле2.CreateObject("Справочник.Номенклатура");//создал второй , ибо слетает курсор с первой rulf шарит по единицам СпрОЛЕ22 = БазаОле2.CreateObject("Справочник.Номенклатура"); СпрЕдиницы.ВыбратьЭлементы() ; Счетчик = 0; Всего = 0; СпрЕдиницыОЛЕ.ВыбратьЭлементы(0); Пока СпрЕдиницыОЛЕ.ПолучитьЭлемент() = 1 Цикл Всего = Всего +1; Сообщить("Всего найденно "+Всего); ШК = СпрЕдиницыОЛЕ.ШтрихКод; ИмяОЛЕ = СпрЕдиницыОЛЕ.Владелец.Наименование; КодОЛЕ = СпрЕдиницыОЛЕ2.Владелец.Код; Если СпрЕдиницыОЛЕ.Владелец.Весовой = 1 Тогда Сообщить("Товар весовой - пропускаем"); Иначе Если ШК <> 0 Тогда Спр.ВыбратьЭлементы(); Если Спр.НайтиПоНаименованию(ИмяОЛЕ, 0) = 1 Тогда Если Спр.ПометкаУдаления() = 1 Тогда Сообщить("Помечен на удаление - пропускаем"); Иначе Если СпрЕдиницы.НайтиПоРеквизиту("ШтрихКОД", ШК, 1) = 1 Тогда ИмяСпр = СпрЕдиницы.ТекущийЭлемент().Владелец.наименование; КодСпр = СпрЕдиницы.ТекущийЭлемент().Владелец.Код; //Сообщить("кодСпр : "+КодСпр); СпрЕдиницыОЛЕ2.ВыбратьЭлементы(); СпрЕдиницыОЛЕ2.НайтиПоРеквизиту("ШтрихКод", ШК, 1 ); Если СпрЕдиницыОЛЕ2.НайтиПоРеквизиту("ШтрихКод", ШК, 1 ) = 0 Тогда ИмяОЛЕ2 = 0; КодОЛЕ2 = 0; Файл.Записать(ШК+" в базе "+Опт+" не найден"); Иначе ИмяОЛЕ2 = СпрЕдиницыОЛЕ2.Владелец.Наименование; КодОЛЕ2 = СпрЕдиницыОЛЕ2.Владелец.Код; СпрОЛЕ.НайтиПоНаименованию(ИмяОЛЕ, 0); Если СпрОЛЕ.ПометкаУдаления() = 1 Тогда Сообщить("В базе "+Опт+"такойэлемент помечен на удаление, проверяться не будет"); Иначе СпрОЛЕ22.НайтиПоНаименованию(ИмяОле2, 0); Если СпрОЛЕДляПоискаПоКоду2.ПометкаУдаления() = 1 Тогда Сообщить("В базе "+Розн+"такойэлемент помечен на удаление, проверяться не будет"); Иначе Если (ИмяСпр <> ИмяОЛЕ) или (ИмяСпр <> ИмяОЛЕ2) Тогда Счетчик = Счетчик+1; Вопр = Вопрос("Расхождение названия для шк : "+ШК+" Нажмите ""Да"" чтобы использовать наименование из "+ТЦ+", |или ""Нет"" для использования имени из "+Опт+", |Или ""Отмена"" для имени из "+Розн +Симв(13)+"1 :"+КодСпр+" "+ИмяСПР+" *** - Это название из базы "+ТЦ +Симв(13)+"2 :"+КодОЛЕ+" "+ИмяОЛЕ+" *** - Это название из базы "+Опт +Симв(13)+"3 :"+КодОЛЕ2+" "+ИмяОЛЕ2+" *** - Это название из базы "+Розн, 3); Если Вопр = 6 Тогда СпрОЛЕ.Наименование = ИмяСпр; СпрОЛЕ.ПолнНаименование = ИмяСпр; СпрОЛЕ.Записать(); СпрОЛЕ22.Наименование = ИмяСпр; СпрОЛЕ22.ПолнНаименование = ИмяСпр; СпрОЛЕ22.Записать(); Файл.ДобавитьСтроку("Использовали имя из : "+ТЦ+" "+ИмяСпр +" Код Наименование было Наименование стало" +"имя в "+Опт+" "+КодОЛЕ+" "+ИмяОЛЕ+"|"+ИмяСпр+" "+ШК +" имя в "+Розн+" "+КодОЛЕ2+" "+ИмяОЛЕ2+"|"+ИмяСпр+" "+ШК +"-----------------------------------------------------------------------------"); Файл.Записать(ИмяФайла); ИначеЕсли Вопр = 7 Тогда , то все работает, я же объяснил что надо 4ую кнопку прикрутить и незнаю как, но вы все -красавцы, код оценили(хотя об этом не просил), и то что я не знаю как доп кнопку прикрутить - освистали |
|||
38
1Сергей
20.01.12
✎
10:55
|
(37) используй СписокЗначений + ВыбратьЗначение()
|
|||
39
Дядя Васька
20.01.12
✎
10:58
|
Э... А про Вопрос() уже было?
|
|||
40
1Сергей
20.01.12
✎
10:59
|
(39) в вопросе слишком мало кнопок
|
|||
41
Дядя Васька
20.01.12
✎
11:01
|
Пардон, все ни асилил, но Вопрос("Расхождение названия для шк : "+ШК+" Нажмите ""Да"" чтобы использовать наименование из "+ТЦ+",
|или ""Нет"" для использования имени из "+Опт+", |Или ""Отмена"" для имени из "+Розн +Симв(13)+"1 :"+КодСпр+" "+ИмяСПР+" *** - Это название из базы "+ТЦ +Симв(13)+"2 :"+КодОЛЕ+" "+ИмяОЛЕ+" *** - Это название из базы "+Опт +Симв(13)+"3 :"+КодОЛЕ2+" "+ИмяОЛЕ2+" *** - Это название из базы "+Розн, 3); это пять :) |
|||
42
Эмбеддер
20.01.12
✎
11:01
|
(38) Хотел это же посоветовать. Во-первых, это в стиле 1С, а во-вторых удобно, когда пользователю надо работать быстро
|
|||
43
MixanM
20.01.12
✎
11:02
|
(38) простоя думал сдлеать макс удобно оператору, т.е увидела расхождение позиций - жмякнула какое имя выбрать, и дальше, а таак придется код немного переделать, но, черт возьми, как хорошо то было бы : "нажал кнпку - получил результат"...
|
|||
44
MixanM
20.01.12
✎
11:03
|
(41) а что дделать то? было оч мало времени и могли нагрянуть, очень большие пиз#$ли
|
|||
45
1Сергей
20.01.12
✎
11:06
|
(43) дык, списком удобнее
|
|||
46
Mikeware
20.01.12
✎
11:07
|
(43) любая задача имеет кучу решений... Но выбирать из кучи решений "самые такие" - это талант...
|
|||
47
Simod
20.01.12
✎
11:11
|
(30) Перед НайтиПоНаименованию()и НайтиПоРеквизиту() не надо использовать ВыбратьЭлементы(). Почитайте ЖКК ипосмотрите там примеры использования методов. Или здесь: http://mista.ru/tutor_1c/sprav.htm#find
Ну а вообще конечно: "Ад, треш и угар" |
|||
48
Дядя Васька
20.01.12
✎
11:15
|
В данном случае удобнее ТЗ и ВыбратьСтроку(), а не списком. В одну колонку имя базы, в другую элемент.
|
|||
49
MixanM
20.01.12
✎
11:15
|
(48) как раз так и делаю
|
|||
50
MixanM
20.01.12
✎
12:17
|
так, а теперь можете сказать, у меня выполняется процедура, потом она вызывает функцию фот так :
НомерКнопки = ПоКнопке(НомерКнопки); Если НомерКнопки =1 Тогда в этой функции вызывается вот это : Функция ПоКнопке(НомерКнопки) Если НомерКнопки=1 Тогда //* Нажата первая кнопка Сообщить("жмякнули 1"); ИначеЕсли НомерКнопки=2 Тогда //* Нажата вторая кнопка ИначеЕсли НомерКнопки=3 Тогда //* Нажата третья кнопка КонецЕсли; КонецФункции// ПоКнопке(НомерКнопки) и... всё, т.е. обработка замирает, а как мне процедуру продолжить? |
|||
51
1Сергей
20.01.12
✎
12:20
|
(50) это процедура нужна, если на форме несколько кнопок
|
|||
52
Mikeware
20.01.12
✎
12:21
|
(50) Ты, эттааа... праграммиста позови...
|
|||
53
MixanM
20.01.12
✎
12:49
|
моск уже замирает... как 6ля ее продожить то?
пробовал функцию обозвать процедурой, и вызываьт ее во второй процедуре вт так: НомерКнопки = 0; ПоКнопке(НомерКнопки); все равно не продолжается процедура |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |