Имя: Пароль:
1C
1C 7.7
v7: Быстрый выбор строкового значения из тч документа
,
0 Zhuravlik
 
25.01.13
12:12
Здравствуйте. В тч документа есть строковый реквизит, в свойствах указано - имеет кнопку выбора. В процедуре "ПриНачалеВыбораЗначения" написан спец. обработчик (значение может быть либо наименованием элемента справочника - и тогда я пользуюсь методом "Выбрать", пользователь выбирает элемент из справочника и его наименование я подставляю в реквизит тч, либо вбиваться вручную). Как при вводе новой строки вызвать этот обработчик, когда ячейка тч в фокусе?
Пробовал все процедуры для работ со строками документа, ничего не выходит.
1 Ёпрст
 
25.01.13
12:17
автовыбо воткнуть в свойство ячейки вестимо
2 Zhuravlik
 
25.01.13
12:19
(1) Нет там такого свойства... Реквизит строковый - не справочник. А я хочу, чтобы по-умолчанию работала моя подстановка, пользователь может отказаться от выбора и ввести вручную.
3 Zhuravlik
 
25.01.13
12:27
В голову приходит только воткнуть табличное поле вместо стандартной тч, не хотелось бы так возиться из-за такой ерунды(
4 monsterZE
 
25.01.13
12:40
а почему не сделать отдельный диалог и из него добавлять новый элемент в справочник и выбирать?
5 Zhuravlik
 
25.01.13
13:16
(4) "добавлять новый элемент в справочник" - если пользователь вводит значение вручную, в справочнике не создается новый элемент. Просто иногда услуга оказывается сторонними силами, чтобы не загаживать справочники я ввел в тч строковый реквизит. В основном - там будут наименования из справочника, но если потребуется можно вбить и другое.
6 oslokot
 
25.01.13
13:18
(5) у меня та же песня есть, как у тебя. Не задумывался об автовыборе.
Хм, значит надо сначала отловить событие когда ячейка получает фокус. Думаю формекс поможет.
7 Ёпрст
 
25.01.13
13:19
в ПриНачалеРедактированиястроки делай че хочешь или в ПриРедактированииНовойСтроки
8 Ёпрст
 
25.01.13
13:20
там всё без формекса делается
9 oslokot
 
25.01.13
13:23
(0) Неясно, когда разворачивать список. При начале ввода  строки, или при обходе ячеек, когда нужная получает фокус?
10 Zhuravlik
 
25.01.13
13:29
(7) Я пробовал сначала "ПриНачалеРедактированияСтроки()", если Форма.ТекущаяКолонка = МояКолонка тогда выбор. Ноль реакции. Потом В ПриВводеСтроки сразу открываю свой выбор, запоминаю переменную, и в ПриНачалеРедактирования подставляю, тоже не сработало.
(9) При обходе ячеек, в новой строке)
11 Aleksey
 
25.01.13
13:30
(10) Список значений
12 Zhuravlik
 
25.01.13
13:30
+ "Ноль реакции" - в смысле когда ячейка получала фокус выбор не срабатывал. Только если нажать, может опять ентер проэмулировать...
13 Aleksey
 
25.01.13
13:31
ВыбратьЗначение(<?>,,,,)
Синтаксис:
ВыбратьЗначение(<Значение>,<Заголовок>>,<Позиция>,<Таймаут>,<СпособВыбора>)
Назначение:
Открыть окно для интерактивного выбора значения из списка.

<СпособВыбора> - необязательный параметр. Число, значение которого задает способ выбора значения. 0 - в виде диалога; 1 - выбор производится в виде меню, которое подстраивается по месту текущего элемента диалога или ячейки таблицы; 2 - выбор маленьким списком (список похож на выбор значения перечисления), также привязанным к позиции элемента диалога
14 oslokot
 
25.01.13
13:32
(10) ясно, врят-ли штатно получится
15 oslokot
 
25.01.13
13:33
(11) (13) при чем тут это? у него и так список подстроен. Просто не вываливается при активизации этой ячейки для новой строки
16 Zhuravlik
 
25.01.13
13:40
(14) Я не допру, как формекс может помочь? Если я даже имя колонки не могу получить... Все в принципе-то в это и утыкается. Как получить имя колонки ТЧ при вводе новой строки, если она НЕ первая?
Вот такой код:

Процедура ПриРедактированииНовойСтроки()
 Сообщить(Форма.ТекущаяКолонка());
КонецПроцедуры // ПриРедактированииНовойСтроки

Сообшает только имя первой колонки (НомерСтроки), т.е если мне мое поле туда поставить должно сработать. Попробую сейчас...
17 oslokot
 
25.01.13
13:44
(16) формекс поможет эмулировать "F4" когда дойдешь до своей ячейки
18 Zhuravlik
 
25.01.13
13:45
(17) А как мне понять, что я до нее дошел?
19 oslokot
 
25.01.13
13:45
(18) незнаю, сам думаю )))
20 Zhuravlik
 
25.01.13
13:48
(19) )
+ Сейчас попробовал так: Убрал из тч поле НомерСтроки, сделал первым поле строкового реквизита, в ПриРедактированииНовойСтроки() прописал выбор из справочника - работает. Но:
- Нет колокни НомерСтроки (если вставляю текстовик с формулой - при вводе все останавливается на нем, если вставить реквизит "НомерСтроки" - то выбор не происходит, хотя в "НомерСтроки" стоит галка - пропускать при вводе)
- Это не единственной поле, в котором мне надо сделать такую шнягу.
Может текст на форму повесить, с формулой?
21 oslokot
 
25.01.13
13:54
(18)
Процедура ПриНажатииЛевойКнопки(сост, х, у)
   Сообщить(Форма.ТекущаяКолонка());
КонецПроцедуры

Процедура ПриНажатииКнопкиКлавиатуры(конт, код, _а, _ш, _к)
   Сообщить(Форма.ТекущаяКолонка());
КонецПроцедуры

Вот мы и получили имя колонки. Можно эмулировать F4
22 Zhuravlik
 
25.01.13
15:33
(21) Извините, отвлекся
Точно) Только надо флаг новой строки держать в форме. В ПриНачалеРедактированияНовойСтроки() ставить его в 1, в ПриОкончании... - в 0, и в ПриНажатииКнопки... смотреть, если он - 1 - значит пользователь подтвердил выбор текущей колонки, и фокус передался на следующую.
Позже попробую, спасибо)
23 oslokot
 
25.01.13
15:35
(22) пробуй, у меня получилось
24 Zhuravlik
 
25.01.13
18:04
(23) Получилось))))
25 Zhuravlik
 
28.01.13
18:40
(23) Поюзал вот, криво как-то работает, через раз. Делаю так:



Перем флНоваяСтрока;

//======================================================================
Процедура ПриОтжатииКнопкиКлавиатуры(Код, Альт, Шифт, Кнтрл, Сим, ФСО)

   Если (флНоваяСтрока = 1) Тогда        
       Кол = Форма.ТекущаяКолонка();
       Если    (Кол = "МоеЗначение")
           и    (Код = 13)
       Тогда
           Если ПустоеЗначение(МоеЗначение) = 1 Тогда
               гСервис.ЭмулироватьКлавиатуру("{F4}");        
           КонецЕсли;
       КонецЕсли;        
   КонецЕсли;

КонецПроцедуры // ПриНажатиКнопкиКлавиатуры

//======================================================================
Процедура ПриРедактированииНовойСтроки()
   флНоваяСтрока = 1;
КонецПроцедуры

//======================================================================
Процедура ПриОкончанииРедактированияСтроки(НовСтр)
   флНоваяСтрока = 0;    
КонецПроцедуры // ПриОкончанииРедактированияСтроки






У вас сбоев не наблюдалось?
26 Zhuravlik
 
28.01.13
18:54
+ "Криво" - в смысле не всегда происходит эмуляция F4.
27 oslokot
 
29.01.13
09:37
(26) у меня нет, но я всего-лишь попробовал вариант (21)

А вот если вместо ПриОтжатииКнопкиКлавиатуры использовать ПриНажатииКнопкиКлавиатуры ?

И мышь как себя чувствует? т.е. событие при  ПриНажатииЛевойКнопки?
28 oslokot
 
29.01.13
09:40
(26) формекс свежий?