|
v7: Как узнать какую строку в документе выбрал пользователь? | ☑ | ||
---|---|---|---|---|
0
sysadminlk
18.02.13
✎
22:22
|
Как узнать какую строку в документе выбрал пользователь?
Табличная часть документа. В ней есть строки с товаром. И для того чтобы упростить жизнь юзеру нужно быстро как-то разворачивать историю по товару. Я хочу выловить номер строки по которой пользователь тыкнул 2 раза. |
|||
1
sysadminlk
18.02.13
✎
22:28
|
Проблема в том что документ уже проведен и Форма.ТолькоПросмотр(1)
Может есть какие-то доп.библиотеки? Формекс такое умеет? |
|||
2
Очкарик
18.02.13
✎
22:29
|
(1) давно в 7.7 не кодил. Там есть ТекущаяСтрока() метод у табличной части?
|
|||
3
Мимохожий Однако
18.02.13
✎
22:30
|
Можно сделать печатную форму и в нее прицепить расшифровку.
|
|||
4
sysadminlk
18.02.13
✎
22:31
|
(3) Табличная часть документа.
|
|||
5
Очкарик
18.02.13
✎
22:32
|
(4) Создай обработку, которая будет отражать табличную часть документа
|
|||
6
Тьма
18.02.13
✎
22:34
|
(0)Читай номерстроки в функции УстДоступность
|
|||
7
sysadminlk
18.02.13
✎
22:55
|
(6) это предопределенная? чет погуглил и нифига не понял от куда ее взять? документ то проведен и форма только просмотр
|
|||
8
Тьма
18.02.13
✎
23:10
|
(7)Кинь на форму текст и в поле формула пропиши Устдоступность(). В модуле формы напиши функцию Устдоступность, возвращающую пробел. Эта функция будет вызываться при любом обновлении формы, при смене строки в том числе.
|
|||
9
Очкарик
18.02.13
✎
23:16
|
(8) ага, при малейшем чихе и по нескольку раз подряд
|
|||
10
Zhuravlik
18.02.13
✎
23:18
|
(0) ОбработкаВыбораСтроки() ?
|
|||
11
Тьма
18.02.13
✎
23:24
|
(10)Не в данном случае. в форме документа она не вызывается.
(9)Присвоение одной переменной роли не сыграет. У людей при обновлении формы остатки из таблицы регистров тянутся и ниче - все живы. |
|||
12
Тьма
18.02.13
✎
23:27
|
Кстати, вполне можно и формексом - по событию ПриДвойномНажатииЛевойКнопки
|
|||
13
Zhuravlik
18.02.13
✎
23:55
|
Тогда в ПриНачалеВыбораЗначения(), если Проведен() = 1 делать что надо, и СтатусВозврата(0); Возврат;
|
|||
14
Тьма
19.02.13
✎
00:10
|
(13)ПриНачалеВыбораЗначения не вызывается при активизации строки документа. Форма открыта только на просмотр, выбирать значения никто не будет.
|
|||
15
Cthulhu
19.02.13
✎
00:50
|
(11): вызывается. если надо.
|
|||
16
sysadminlk
19.02.13
✎
08:44
|
(12) ПриДвойномНажатииЛевойКнопки и как его курить если он возвращает ГрупповойКонтекст формы, а мне нужно знать на какую строку в документе ткнул пользователь.
|
|||
17
фобка
19.02.13
✎
09:56
|
(16) НомерСтроки
|
|||
18
sysadminlk
19.02.13
✎
21:17
|
получается никак не отловить? :( может кто-то все-таки знает?
|
|||
19
Азазель
19.02.13
✎
21:33
|
Выбор строки пользователем может осуществляться
1)при вводе строки 2)при установке курсора на текущую строку 3)при редактировании новой строки Соответственно, используем методы и предопределенные процедуры. Процедура ПриВводеСтроки() КонецПроцедуры Синтаксис: ПриВводеСтроки() Назначение: Предопределенная процедура при интерактивном вводе строки документа. Замечание: Данная процедура может располагаться только в модуле формы документа. Процедура ПриНачалеРедактированияСтроки() КонецПроцедуры Синтаксис: ПриНачалеРедактированияСтроки() Назначение: Предопределенная процедура при интерактивном редактировании строки документа. Замечание: Данная процедура может располагаться только в модуле формы документа. НомерСтроки Синтаксис: НомерСтроки Назначение: Доступ к номеру строки многострочной части документа. Замечание: Атрибут имеет смысл только при выбранной строке. |
|||
20
DCKiller
19.02.13
✎
21:54
|
(18) Лепишь на форму дока лейбл, очищаешь ему заголовок, в формуле прописываешь имя функции, допустим ПоказатьИсториюТовара()
Далее, в модуле формы документа описываешь эту функцию Функция ПоказатьИсториюТовара() //... Возврат СтрИстория; КонецФункции А вообще кури функцию ИтоговаяСтрока() типовых доков 1совских конфиг. Так понятно или нужно подробнее? |
|||
21
EdGreen
20.02.13
✎
15:15
|
ПриНачалеРедактированияСтроки()
Событие не срабатывает в режиме ТолькоПросмотр(1) Формэкс умеет выдавать события ПриДвойномНажатииЛевойКнопки Как вариант без формекса: подобно (8) положить на форму текстовое поле с вызовом функции (например ДействияФормы()) возвращающей пробел. Только надо помнить, что эта функция вызывается на каждое движение на форме, так, что надо бы поставить там контроль на дублирование действий. Типа: если СтрокаПоследнегоВызова <> ТекСтрока Тогда Обработать текСтроку СтрокаПоследнегоВызова = ТекСтрока Иначе ничего Не делать Правда это будет срабатывать на любой клик на форме а не на дабл клик. |
|||
22
DigitalDolphin
21.02.13
✎
02:29
|
Вообще у тебя на самом деле 2 выхода.
1. Тебе уже сказали. Добавь на форму функцию и при переходе по строкам она каждый раз будет вызываться. Можешь еще добавать контроль. если при вызове функции строка не меняется. Просто делаешь возврат. Обновление может быть не только при переходе по строке. 2. Ты просто берешь и добавляешь на форму кнопку. А по кнопке вызывается твоя расшифровка. Ты ж в принципе не сказал на сколько оперативно нужна расшифровка и может расчет слишком длинный чтоб каждый раз его делать при переходе по строкам. Да и нужен он может быть только по требованию. |
|||
23
Стрелок
21.02.13
✎
03:08
|
Всё отлавливается без "ТолькоПросмотр". Если надо блокировать изменение ТЧ - есть предопределённые процедуры. А для того чтобы отловить текущую строку по двойному клику делается просто
1. в ТЧ текстовый реквизит формы (НЕ ПУТАТЬ С РЕКВИЗИТОМ ТЧ). присвоить ему некое имя. Дальше в модуле формы пишем что то типа такого и вуаля (пример - по 2-му клику открывается обработка с серийными номерами товара) Процедура ПриНачалеРедактированияСтроки() Если Форма.АктивныйЭлемент()="СерийныеНомераСтр" Тогда Если ПустоеЗначение(Товар)=1 Тогда Возврат; ИначеЕсли Товар.ТипТовара.УчетПоНомерам=0 Тогда Предупреждение("По данному товару не ведётся учёт по серийным номерам"); Возврат; КонецЕсли; ТекТов=Товар; Надо=Количество; СтрТаб=0; ТЗСерийныхНомеров.НайтиЗначение(ТекТов,СтрТаб,"Товар"); Список=СоздатьОбъект("СписокЗначений"); Если СтрТаб<>0 Тогда Ном=СтрТаб; Пока Ном<=ТЗСерийныхНомеров.КоличествоСтрок() Цикл ТЗСерийныхНомеров.ПолучитьСтрокуПоНомеру(Ном); ТекТов_=ТЗСерийныхНомеров.Товар; Если ТекТов<>ТекТов_ Тогда Прервать; КонецЕсли; Список.ДобавитьЗначение(ТЗСерийныхНомеров.СерийныйНомер); ТЗСерийныхНомеров.УдалитьСтроку(Ном); КонецЦикла; КонецЕсли; Парам=СоздатьОбъект("СписокЗначений"); Парам.ДобавитьЗначение(ТекТов,"Товар"); Парам.ДобавитьЗначение(Надо,"Надо"); Парам.ДобавитьЗначение(Список,"Номера"); Парам.ДобавитьЗначение(Контекст,"КонтекстВызова"); ОткрытьФормуМодально("Обработка.СерийныеНомераПриход",Парам); СписокНовый=Парам.Получить("Номера"); Для Ном=1 По СписокНовый.РазмерСписка() Цикл ТЗСерийныхНомеров.НоваяСтрока(); ТЗСерийныхНомеров.Товар=ТекТов; ТЗСерийныхНомеров.СерийныйНомер=СписокНовый.ПолучитьЗначение(Ном); ТЗСерийныхНомеров.Поставщик=Клиент; ТЗСерийныхНомеров.ВалютаВхода=ВалютаКлиента; ТЗСерийныхНомеров.ЦенаВхода=ПолучитьАтрибут("Цена"+глВернутьСуффиксВалюты(ВалютаКлиента)); КонецЦикла; ПроверитьЗаполнениеСерийныхНомеров(); ТЗСерийныхНомеров.Сортировать("+Товар"); НадоЗаписатьСерийныеНомера=1; КонецЕсли; КонецПроцедуры |
|||
24
Стрелок
21.02.13
✎
03:10
|
В примере реквизит формы (повторюсь - не реквизит табличной части а текст в табличной части по типу "пиктограмки" в ТЧ - кнопка "Т" на нижней панельке инструментов-реквизитов формы) называется "СерийныеНомераСтр"
|
|||
25
DigitalDolphin
21.02.13
✎
03:40
|
(23) Автор и так сказал что форма только для просмотра. Зачем реквизит формы. Можно и так при щелчке делать то что нужно.
|
|||
26
DigitalDolphin
21.02.13
✎
03:41
|
(23) Да кстати. При ТолькоПросмотр() твоя предопределенная процедура не сработает.
|
|||
27
Стрелок
21.02.13
✎
04:37
|
(26) Вот прежде чем писать ВНИМАТЕЛЬНО прочитай 23 до просветления
|
|||
28
DigitalDolphin
21.02.13
✎
05:17
|
(27) ок-ок. Прочитал мимо ушей что ты предлагаешь не использовать ТолькоПросмотр(). Но на мой взгляд твоя комбинация все равно сложнее и надо думать где затыкать дырки и еще реквизит формы вводить. В данном случае не вижу смысла. Так как автор сказал что редактирование не нужно когда в режиме проведен. ПОэтому проще оставить как у него есть. А выбрать из двух способов которые ему написал.
|
|||
29
Стрелок
21.02.13
✎
05:32
|
(28) я привёл пример универсальной фичи. форма.толькопросмотр(1) не решает проблем перепроведения (и как следствия изменения проводок). Скорее всего ТолькоПросмотр используется дабы обезопаситься от изменения уже выполненных движений документа а не потому что это обязательное условие. просто автор не понимает что это не спасёт.
а впрочем мне всё равно |
|||
30
sysadminlk
18.03.13
✎
13:55
|
какие есть еще варианты?
|
|||
31
sysadminlk
18.03.13
✎
14:06
|
на форме применено ТолькоПросмотр(1)
|
|||
32
Popkorm
18.03.13
✎
14:26
|
(31)что не понятно в (23) все написано........
а про это: "юзеру нужно быстро как-то разворачивать историю по товару" через ЖурналРегистрации |
|||
33
Cthulhu
18.03.13
✎
14:30
|
(32): похоже, тебе самому что-то непонятно... например, несоответствие исходніх условий (23) исходнім условиям заданного вопроса.
|
|||
34
sysadminlk
19.03.13
✎
16:19
|
(32) ПриНачалеРедактированияСтроки() не будет и не работает при Форма.ТолькоПросмотр(1)
|
|||
35
Ёпрст
19.03.13
✎
16:34
|
формексом - как 2 пальца..
штатно -тоже можно, лень думать |
|||
36
sysadminlk
19.03.13
✎
16:48
|
(35) как? там только координаты мыши возвращаются?
|
|||
37
Ёпрст
19.03.13
✎
16:51
|
(36)
Процедура ПриДвойномНажатииЛевойКнопки(сост,х,у,фсо) Сообщить(НомерСтроки); КонецПроцедуры |
|||
38
Ёпрст
19.03.13
✎
16:52
|
можешь еще и условие воткнуть, что типа на многострочной части тыркнули мышой.
|
|||
39
Ёпрст
19.03.13
✎
16:52
|
и только тогда поиметь номерстроки
|
|||
40
sysadminlk
19.03.13
✎
17:30
|
(37) афигеть!!!! работает!!! супер!!! реально благодарен! Ёпрст, всего тебе хорошего, здоровья, денег, счастья, любви!!! Спасибо! Все-равно не понятно как ПриДвойномНажатииЛевойКнопки узнает номер строки в нее же попадает только сост,х,у,фсо
|
|||
41
Ёпрст
19.03.13
✎
17:32
|
(40) в смысле не понял ?
НомерСтроки - это же атрибут документа, ты в этой проце можешь посмотреть что угодно у документа - любой реквизит. |
|||
42
Ёпрст
19.03.13
✎
17:32
|
просто нужно было как-то поймать событие, вот формекс это умеет
|
|||
43
sysadminlk
19.03.13
✎
17:35
|
ПриДвойномНажатииЛевойКнопки / OnLButtonDblClk
Синтаксис: ПриДвойномНажатииЛевойКнопки(Контекст, Состояние, КоордПоГоризонтали, КоордПоВертикали, ФСО) Параметры: Контекст - контекст формы Состояние - битовая маска, показывающаяя текущее состояние кнопок мыши. КоордПоГоризонтали - значение координаты курсора мыши по горизонтальной оси (Х). КоордПоВертикали - значение координаты курсора мыши по вертикальной оси (Y). ФСО - флаг стандартной обработки. Изначально равен 1. Если в теле процедуры сбросить значение в 0, то стандартная обработка события не вызывается. Описание: Предопределенная процедура вызывается при двойном клике левой кнопкой мыши. Пример: Процедура ПриДвойномНажатииЛевойКнопки(конт, сост, х, у) Предупреждение("Двойной левый клик по форме."); КонецПроцедуры Где тут описание того что возвратится номер строки я ПриДвойномНажатииЛевойКнопки уже пробовал по разному но Сообщить(номерстроки) даже ума в голову не могло придти |
|||
44
Ёпрст
19.03.13
✎
17:37
|
(43) та не, ты не понял, в любом событии документов (предопределенных, к примеру, у тебя доступны все атрибуты этого объекта.. вот для событий формекса это тоже работает.
|
|||
45
sysadminlk
19.03.13
✎
17:39
|
А различать он умеет?
|
|||
46
Ёпрст
19.03.13
✎
17:40
|
должен
:) |
|||
47
sysadminlk
19.03.13
✎
17:40
|
табличная часть там два столбца Товар и Серийный номер
|
|||
48
sysadminlk
19.03.13
✎
17:40
|
как понять на какой столбец щас нажали
|
|||
49
Ёпрст
19.03.13
✎
17:56
|
(48) Форма.АктивнаяКолонка()
|
|||
50
Ёпрст
19.03.13
✎
17:57
|
ну или получить атрибут формы по координатам и у него посмотреть идентификатор
|
|||
51
Ёпрст
19.03.13
✎
17:58
|
точнее,Форма.АктивныйЭлемент()
|
|||
52
Ёпрст
19.03.13
✎
17:59
|
ну или
Форма.ТекущаяКолонка() |
|||
53
sysadminlk
19.03.13
✎
18:03
|
(49) (52) да я так и сделал,
а вот насчет (50) я что-то не понял как по координатам посмотреть идентификатор? |
|||
54
Ёпрст
19.03.13
✎
18:08
|
ну, получай ПолучитьАтрибутПоКоординатам и у него смотри
Идентификатор |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |