Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) ПриВводеСтроки (число прочтений - 11954 )
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
ПриВводеСтроки
25. Сентября 2006 :: 10:30
Печать  
как в форме списка справочника в предопределенной процедуре ПриВводеСтроки определить что вводится группа или элемент справочника?

кто-нибудь что-то добавит к этому?
http://www.forum.mista.ru/topic.php?id=216090
  

1&&2&&3
Наверх
 
IP записан
 
alexqc
Junior Member
**
Отсутствует



Сообщений: 77
Местоположение: АР Крым, Симферополь
Зарегистрирован: 21. Июня 2006
Пол: Мужской
Re: ПриВводеСтроки
Ответ #1 - 28. Сентября 2006 :: 14:13
Печать  
trad писал(а) 25. Сентября 2006 :: 10:30:
кто-нибудь что-то добавит к этому?
http://www.forum.mista.ru/topic.php?id=216090


Там что, есть к чему добавлять? Проблему-то там и не решили...
По-моему, решить ее напрямую не удастся. Можно попробовать обойти:
1. Повесить на форму "невидимую" кнопку - не ту которая действительно невидимая, а которая лежит за пределами формы - тогда ее будет не видно, но действовать она будет. А при изменении размеров формы - тоже вылезет за ее пределы (из-за списка справочника). Задать ей какой-то извратный хоткей, который юзверь не нажмет. На ней будет процедура открытия нового элемента или группы (назовем ее ТвойВвод()).
2. Перехватывать не ввод строки, а начало редактирования - там уже все об вводимом элементе известно. Запоминаем нужную инфу. В дальнейшем эта инфа обработается в процедуре ТвойВвод().
3. И вот тут начинается сам процесс обхода. Засылаем "нажатия клавишь" ESC и <ТвойХоткей>. (через формэкс либо WSH). По эскейпу отменится ввод строки, по хоткею - вызовется ТвойВвод(), который по запомненной информации и сделает то что надо.

Конечно, элегантным решение не является (я сам не люблю нажатия клавишь эмулировать), но другого придумать не смог Печаль.
  

Везде - от моря Черного до снежной Колымы - мы трудностям показываем кукиш.
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ПриВводеСтроки
Ответ #2 - 29. Сентября 2006 :: 05:47
Печать  
Спасибо, твоя идея понятна.
Получается, что штатно не получиться.
  

1&&2&&3
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПриВводеСтроки
Ответ #3 - 29. Сентября 2006 :: 07:08
Печать  
отлично работает на форме списка сл. конструкция
Код
Выбрать все
Процедура ПриРедактированииНовойСтроки()
	ЭтоГр=ЭтоГруппа();
КонецПроцедуры 


т.е. определяет группа это или нет... может я конечно не понял в чем суть впороса?
ЗЫ как обещал, порпобовал, на тестирование потратил всего 5 мин.
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ПриВводеСтроки
Ответ #4 - 29. Сентября 2006 :: 07:20
Печать  
Цитата:
отлично работает на форме списка сл. конструкция
Код
Выбрать все
Процедура ПриРедактированииНовойСтроки()
	ЭтоГр=ЭтоГруппа();
КонецПроцедуры 


т.е. определяет группа это или нет... может я конечно не понял в чем суть впороса?
ЗЫ как обещал, порпобовал, на тестирование потратил всего 5 мин.


в этом случае определить группу ты сможешь, но ведь задача - открыть форму нового элемента (группы) в случае ввода новой строки - как ты это сделаешь из этой процедуры? можно поизвращаться со СтатусомВозврата(0), но и тут есть ограничения - нужно чтобы сначала отработала отмена ввода строки, а потом - ввод Нового элемента справочника, для этого тут и эмулируется ввод клавиатуры
  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПриВводеСтроки
Ответ #5 - 29. Сентября 2006 :: 07:29
Печать  
я или тупой или одно из двух... почитав ветку в которую "нечего добавить" я так понял что редактирование в списке, если в диалоге тогда ваще не понимаю в чем сложность штатно определить что это группа или элемент...
я наверное не совсем понимаю хитрого хода мыслей... может не стоит усложнять настолько задачу?
ведь смотри новые объекты в спарвочник, группа это или элемент можно ввести только одним способом, либо в списке, либо диалогом, ни в том ни в другом случае не вижу проблемы определить шатано что вводиться, группа или элемент...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ПриВводеСтроки
Ответ #6 - 29. Сентября 2006 :: 07:38
Печать  
Цитата:
отлично работает на форме списка сл. конструкция
Код
Выбрать все
Процедура ПриРедактированииНовойСтроки()
	ЭтоГр=ЭтоГруппа();
КонецПроцедуры 


т.е. определяет группа это или нет... может я конечно не понял в чем суть впороса?
ЗЫ как обещал, порпобовал, на тестирование потратил всего 5 мин.

Дело в том, что мне нужно вместо редактирования новой строки открыть форму нового элемента или группы
А если мы уже дошли до процедуры ПриРедактированииНовойСтроки (где уже имеет смысл смотреть ЭтоГруппа()), то штатно отменить это редактировании нельзя.
Поэтому есть желание решить вопрос на ранней стадии, в процедуре ПриВводеСтроки, где можно еще отменить непосредственный ввод строки, но, к сожалению, не известен способ определения что вводится: группа или элемент.

PS
надеюсь так понятней. разумеется перед тем как постить я потратил более пяти минут на тестирование.
  

1&&2&&3
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПриВводеСтроки
Ответ #7 - 29. Сентября 2006 :: 07:42
Печать  
да, так понятней, но зачем "держать" справочник в режиме "редактирование в списке" и потом изгаляться чтобы открыть форму группы или элемента, не понятно... ведь с этой задачей прекрасно справляется "редактирование в диалоге"...
надеюсь мое непонимание тоже понятно?
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ПриВводеСтроки
Ответ #8 - 29. Сентября 2006 :: 07:49
Печать  
Цитата:
надеюсь мое непонимание тоже понятно?
понятно.
Поэтому еще поясню.
Редактирование нужно либо в строке либо в диалоге (зависит от выбора/предпочтения пользователя) поэтому режим редактирования у формы списка - смешанный.
А ввод нового только в диалоге.
  

1&&2&&3
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ПриВводеСтроки
Ответ #9 - 29. Сентября 2006 :: 09:23
Печать  
trad писал(а) 29. Сентября 2006 :: 07:49:
Цитата:
надеюсь мое непонимание тоже понятно?
понятно.
Поэтому еще поясню.
Редактирование нужно либо в строке либо в диалоге (зависит от выбора/предпочтения пользователя) поэтому режим редактирования у формы списка - смешанный.
А ввод нового только в диалоге.

Вот так пойдет?
Код
Выбрать все
Перем МожноЗакрыть;

Процедура ПриЗакрытии()
	Если МожноЗакрыть=0 Тогда
		МожноЗакрыть=1;
	    СтатусВозврата(0);
		ОткрытьФорму(ТекущийЭлемент());
	КонецЕсли;
КонецПроцедуры

Процедура ПриВводеСтроки()
МожноЗакрыть=0;
Форма.Закрыть(0);
КонецПроцедуры

МожноЗакрыть=1;
 



Недостаток в том, что новый элемент сразу запишется, но в форме списка он будет без наименования, что достаточно наглядно.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ПриВводеСтроки
Ответ #10 - 29. Сентября 2006 :: 09:28
Печать  
2 vip
нет не пойдет.
если я нажму ctrl+F9 что откроется?
  

1&&2&&3
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ПриВводеСтроки
Ответ #11 - 29. Сентября 2006 :: 09:29
Печать  
trad писал(а) 29. Сентября 2006 :: 09:28:
2 vip
если я нажму ctrl+F9 что откроется?

Форма группы, конечно.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ПриВводеСтроки
Ответ #12 - 29. Сентября 2006 :: 09:31
Печать  
Спасибо. Твой вариант тоже понятен. Но такое решение с записью не приемлемо
  

1&&2&&3
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ПриВводеСтроки
Ответ #13 - 29. Сентября 2006 :: 10:14
Печать  
trad писал(а) 29. Сентября 2006 :: 09:31:
Спасибо. Твой вариант тоже понятен. Но такое решение с записью не приемлемо

А так?
В модуле формы списка.
Код
Выбрать все
Перем МожноЗакрыть;


Процедура ПриЗакрытии()
	Если МожноЗакрыть=0 Тогда
		МожноЗакрыть=1;
	    СтатусВозврата(0);
		ОткрытьФорму(ТекущийЭлемент(),"ЭтоНовый");
	КонецЕсли;
КонецПроцедуры


Процедура ПриВводеСтроки()
МожноЗакрыть=0;
Форма.Закрыть(0);
КонецПроцедуры

МожноЗакрыть=1;
 



В модуле формы элемента или группы
Код
Выбрать все
Процедура ПриЗакрытии()
	Если Форма.Параметр="ЭтоНовый" Тогда
	    Если Вопрос("Сохранить элемент?",4,10)<>6 Тогда
	    Сервис.ВнешнееСобытие("Справочник."+Вид(),"Удалить",ПолныйКод());
	    КонецЕсли;
	КонецЕсли;
КонецПроцедуры
 


В глобальнике
Код
Выбрать все
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)

Если Событие="Удалить" Тогда
Т=СоздатьОбъект(Источник);
    Если Т.НайтиПоКоду(Данные,2)=1 Тогда
    Т.Удалить();
    КонецЕсли;
КонецЕсли;
КонецПроцедуры
 


В силу своей асинхронности внешнее событие корректно отрабатывает удаление только что введенного элемента.
Проверяй Улыбка
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ПриВводеСтроки
Ответ #14 - 29. Сентября 2006 :: 10:41
Печать  
Цитата:
В модуле формы элемента или группы
Процедура ПриЗакрытии()
тут наверно ПриОткрытии?
  

1&&2&&3
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать