Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Как перехватить ввод данных в ячейку, чтобы например сделать выбор значения из списка?

v7: Как перехватить ввод данных в ячейку, чтобы например сделать выбор значения из списка?
Я
   Chai Nic
 
08.09.21 - 10:03
Есть справочник, редактируемый в форме списка. В нем есть строковый реквизит. Нужно, чтобы при входе в этот реквизит не входить в режим редактирования текста, а вывести список, из которого бы пользователь выбрал значение.

Как это сделать, подскажите?
   Злопчинский
 
1 - 08.09.21 - 10:06
отказаться от редактирования в списке. это зло. применять его только для простейшего ввода.
   Guk
 
2 - 08.09.21 - 10:12
(0) реквизит делаешь недоступным. на морду кидаешь невидимый реквизит. в формулу реквизита функцию. в функции анализируешь текущую колонку списка и выводишь все что тебе надо...
   Guk
 
3 - 08.09.21 - 10:12
+(2) вроде как-то так было. и как только я вспомнил это говно мамонта...
   Mikeware
 
4 - 08.09.21 - 10:16
А что, ПриНачалеРедактированияСтроки() отменили?
   Злопчинский
 
5 - 08.09.21 - 10:22
(2) не, так не получится, сработает после энтера в строке.
   Злопчинский
 
6 - 08.09.21 - 10:23
(4) это-то да, но если ввод по строке и новая строка и в этот реквизит попадаем поле ввода какого-то предыдущего реквизита...
   Guk
 
7 - 08.09.21 - 10:36
(5) в смысле?...
   Злопчинский
 
8 - 08.09.21 - 11:04
(7) в прямом. существующий элемент справочника. жмакаем в реквизит (например, строковый). поле активизируется, двигай там кусором и исправляй что хошь. а вот когда завершишь редактирование энтером - тогда и выскакивает спсиок
   Garykom
 
9 - 08.09.21 - 11:05
(1) +1
когда кодил на 77 всегда делал форму элемента
   Злопчинский
 
10 - 08.09.21 - 11:10
как в (4) написал Макивара - сработает, но это только на существующий элемент ссправочника. а при вводе нового элемента если редактируемый реквизит не первый - все равно вывалиться первым. плюс к этому будет еще трабла с блокировкой.
.
вывернуться конечно можно, но это извращения будут.
   ДенисЧ
 
11 - 08.09.21 - 11:11
Майк, он тебя доской назвал...

))
   Guk
 
12 - 08.09.21 - 11:17
(8) мы ж его недоступным сделали. ну можно еще запретить редактирование. жаль проверить не на чем...
   Василий Алибабаевич
 
13 - 08.09.21 - 11:20
(0)
1. В свойствах реквизита "запретить редактирование" установить. "Сделать недоступным" не устанавливать.
2. На закладке "дополнительно" выставить фишку "имееет кнопку выбора"
3. В модуле формы прописать процедуру ПриНачалеВыбораЗначения
   JeHer
 
14 - 08.09.21 - 11:24
(0) А нах... зачем строковый реквизит, если его всё равно заполняешь какими-то предопределенными значениями?
   Злопчинский
 
15 - 08.09.21 - 12:00
(13) не выйдет так
   Злопчинский
 
16 - 08.09.21 - 12:09
"наименование" не реагирует на такую штуку, педали не появляется.
другие реквизиты - норм.
   Злопчинский
 
17 - 08.09.21 - 12:12
плюс по педали - если ввод нового - при переходе на реквизит с педалью - список автоматом не вывалится, надо педаль/ф4 жать.
я как-то извращался - при окончании редактирования предыдущего реквизита эмулировал нажатие Ф4, вроде срабатывало (хотя может вру, стараюсь избегать таких извращений)
   Злопчинский
 
18 - 08.09.21 - 12:13
даже реадактировать существующую строчку - по двойному клику активизируется только, появляется педаль, все равно приходится дополнительно педаль жмакать.
   Guk
 
19 - 08.09.21 - 13:30
из-за вас, засранцев, пришлось в клюшки лезть ;)
в (2) абсолютно рабочий вариант.
на морде формы кидаем текст, делаем его невидимым. в формуле текста прописываем функцию ВыделениеКолонки(). в модуле формы списка
Функция ВыделениеКолонки()
           Если Форма.ТекущаяКолонка() = "Наименование" Тогда
        спис = СоздатьОбъект("СписокЗначений");
        спис.ДобавитьЗначение(1, "Значение1");
        спис.ДобавитьЗначение(2, "Значение2");
        спис.ДобавитьЗначение(3, "Значение3");
        спис.ТекущаяСтрока(1);
        Зн = 0;
        Если спис.ВыбратьЗначение(Зн,,,,1) = 1 Тогда
            Спр = СоздатьОбъект("Справочник.Номенклатура");
            Спр.НайтиЭлемент(ТекущийЭлемент());        
            НовоеНаименование = "";
            спис.ПолучитьЗначение(Зн, НовоеНаименование);
            Спр.Наименование = НовоеНаименование;
            Спр.Записать();
        КонецЕсли;    
    КонецЕсли;
КонецФункции

работает как в постанове автора топика...
   Mikeware
 
20 - 08.09.21 - 14:07
(11) причем "для битья"
   Mikeware
 
21 - 08.09.21 - 14:08
(10) новый, емнип - ПриРедактированииНовойСтроки()
   Злопчинский
 
22 - 08.09.21 - 14:10
(19) ну, это только если именно наименование майсрячить так (на нем педалька штатная не срабатывает).
а так - проще ПриНачалеРедактирвоанияЗначения(ИД,ФСО)
   Злопчинский
 
23 - 08.09.21 - 14:10
(22) в этом слуыае даже позиционироваться не надо через НайтиЭлемент
   Mikeware
 
24 - 08.09.21 - 14:16
Вообще, если делать красиво - то надо как в классах КоллекцияПолейВыбораЗначения/полеВыбораЗначения:  атрибут, задвигается подальше с глаз долой, при вводе данных в поле - передвигается формексом на его координатты поверх него, ну и там уже выбовы всякие, всё что угодно
   Злопчинский
 
25 - 08.09.21 - 14:19
(24) ну, так сделан класс РедакторТЗ.
только он, холера, не понимает, когда на ТЗ повешен шрифт, отличающийся от шрифта формы, и поле задвигает для ввода со шрифтом формы ;-) получается некузяво...
   Mikeware
 
26 - 08.09.21 - 14:37
(25) принципиальных ограничений исправлять шрифт - не вижу. хотя и не пользовал
   Mikeware
 
27 - 08.09.21 - 14:38
а вообще, наверное самое удобное решение - вставить эти классы в конфу - получит не только хотелку, но и плюшки типа автоподбора по подстроке...
но не самое простое, конечно


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.