Имя: Пароль:
1C
1С v8
1С 8.3 УФ. Активация таблицы значений
0 kupreeff
 
28.07.17
11:29
Доброго дня. На форме обработки есть 2 ТЗ, в каждой по 1 строке. Можно ли отловить событие, когда пользователь выбирает поочередно строку в этих ТЗ? ПриАктивизацииСтроки работает, когда пользователь поочередно выбирает строки в одной ТЗ.спасибо.
1 RomaH
 
naïve
28.07.17
11:30
ВК
2 kupreeff
 
28.07.17
11:38
(1) т.е.?
3 FIXXXL
 
28.07.17
11:40
(0) когда пользователь выбирает поочередно строку в этих ТЗ

промеж ТЗ фокус переключает или что надо?
4 Numerus Mikhail
 
28.07.17
11:41
(0)  реквизит с типом булево
при активизации строки первой тз устанавливаешь его в истину
при активизации строки второй тз проверяешь истина он или нет, если да, то устанавливаешь его в ложь и делаешь свои грязные делишки?
5 kupreeff
 
28.07.17
11:46
(3) это частный случай поведения. строк может быть больше. Если по одной строке, то изначально при открытии формы они обе активны (выделены светло-желтым фоном), если щелкать в строку - она становится выделена ярко-желтым фоном. Щелкаем по другой ТЗ - у другой становится строка выделена ярко-желтым фоном, предыдущая же становится с бледным желтым фоном, но при этом в обоих случаях строки постоянно остаются с т.з. 1С активны и указанное мною событие не срабатывает. Нужно это для того, чтобы в третей ТЗ выводить данные по выбранной строке в одной из ТЗ.
6 kupreeff
 
28.07.17
11:47
(4) в том и дело, я не могу отловить, что строка активировалась во второй ТЗ.
7 RomaH
 
naïve
28.07.17
11:47
(2) т.е. только внешняя компонента
8 RomaH
 
naïve
28.07.17
11:48
а зачем?
9 RomaH
 
naïve
28.07.17
11:50
у меня использовалась для смены раскладки клавиатуры в зависимости от активного поля - но это было много лет назад
пересмотрели логику на более "правильную"
10 kupreeff
 
28.07.17
11:50
(8) мне нужно в третьей ТЗ выводить данные по выбранной строке в одной из двух ТЗ.
11 FIXXXL
 
28.07.17
11:52
(6) анализируй тек.элемент формы, и уже потом у него строку
12 SiAl-chel
 
28.07.17
11:52
(0) Делаешь клиентскую функцию или процедуру с параметрами ТабличноеПоле и ТекущаяСтрока. Создаешь для каждого поля обработчики ПриАктивизацииСтроки, из которых передаешь в свою процедуру текущее поле и текущую строку. А там уже их анализируешь и делаешь что надо.
13 kupreeff
 
28.07.17
11:53
(11) вот, я это нутром чую, но где мне анализировать текущий элемент формы? в каком событии?
14 RomaH
 
naïve
28.07.17
11:53
(10) а на примере
15 SiAl-chel
 
28.07.17
11:54
(13) в ПриАктивизацииСтроки у тебя первый параметр - это элемент формы типа ТабличноеПоле.
16 kupreeff
 
28.07.17
11:54
(12) ПриАктивацииСтроки не вызывается же при перещелквиании между ТЗ.
17 RomaH
 
naïve
28.07.17
11:57
https://yadi.sk/d/ehtegfPH3LVQPo

// Устанавливает компоненту сканирования
Процедура УстановитьКомпоненту() Экспорт
    
    //{L"GetKeyboardLayout", L"ПолучитьРаскладку"},
    //{L"SetKeyboardLayout", L"УстановитьРаскладку"},
    //{L"GetVersion", L"Версия"},
    //{L"ConnectOPL6845R", L"ПодключитьOPL6845R"},
    //{L"DisconnectOPL6845R", L"ОтключитьOPL6845R"},
    //{L"MakeEAN13", L"ПолучитьШтрихкодEAN13"},
    //{L"ControlFocus", L"СледитьЗаФокусом"},
    //{L"DontControlFocus", L"НеСледитьЗаФокусом"}

    //ru - 0x0419 - 1049
    //en - 0x0409 - 1033

    Если Компонента1cruen = Неопределено Тогда
        
        КодВозврата = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСменыРаскладки", "ruen",ТипВнешнейКомпоненты.Native);
        
        Если КодВозврата Тогда
            
            Компонента1cruen = Новый("AddIn.ruen.AddInNativeExtension");
            
            ВерсияКомпоненты = Компонента1cruen.Версия();
            


....


&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    
    Если Не ВводДоступен() Тогда
        Возврат;
    КонецЕсли;
    
    Если Событие = "Фокус" Тогда
        
        Если ТипЗнч(ТекущийЭлемент)= Тип("ПолеФормы") Тогда
            
            Если ТекущийЭлемент.Вид = ВидПоляФормы.ПолеВвода Тогда
                
                Если ТекущийЭлемент = Элементы.ДиагнозНаправившегоУчреждения Тогда
                    
                    Если ЭтаФорма.РаскладкаИзмененаАвтоматически Тогда
                        МИС_СменаРаскладкиКлавиатурыКлиент.УстановитьРаскладку(1033);
                    Иначе

попробуй - не факт что на 8.3 работает
расскажи о результатах
18 kupreeff
 
28.07.17
11:57
(14)
&НаКлиенте
Процедура ТЗ1ПриАктивизацииСтроки(Элемент)
    ОбработатьВыбор(Элемент);    
КонецПроцедуры
Процедура ТЗ2ПриАктивизацииСтроки(Элемент)
    // Вставить содержимое обработчика.
    ОбработатьВыбор(Элемент);
КонецПроцедуры
Процедура ОбработатьВыбор(Элемент)  
    Если Элемент.ТекущиеДанные=Неопределено Тогда Возврат КонецЕсли;
    Если ТекущийДок<>Элемент.ТекущиеДанные.Док Тогда
        ТекущийДок=Элемент.ТекущиеДанные.Запрос;
        ЗаполнитьИнформациюПоДоку(ТекущийДок);
    Конецесли;
КонецПроцедуры
19 RomaH
 
naïve
28.07.17
11:57
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    //МИС_СменаРаскладкиКлавиатурыКлиент.УстановитьКомпоненту();

    //Компонента1cruen.СледитьЗаФокусом();
20 Вафель
 
28.07.17
11:58
можно и активизации одной ТЗ сбрасывать тек строку в
другой ТЗ
21 RomaH
 
naïve
28.07.17
11:58
(18) я имел в виду - на примере реальных данных и реального БП
22 Вафель
 
28.07.17
11:59
по идее нужно бы использовать событие формы при смене текущего элемента.
Но увы такого события нет
23 kupreeff
 
28.07.17
12:00
(20) не вижу, как можно сбросить текущую строку программно.
24 kupreeff
 
28.07.17
12:01
(21) я так понимаю из компоненты нужно взять идею внешнего события "Фокус"
25 kupreeff
 
28.07.17
12:03
(21) подключить компоненту, боюсь, сходу не смогу, ни разу не делал(
26 dezss
 
28.07.17
12:03
(16) так меняется текущий элемент формы.
27 kupreeff
 
28.07.17
12:07
(26) меняется, но мне нужно событие, отлавливающее фокус, чтобы это проверить.
28 RomaH
 
naïve
28.07.17
12:10
(25)
&НаКлиенте
Процедура ПриОткрытии(Отказ)

    КодВозврата = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСменыРаскладки", "ruen",ТипВнешнейКомпоненты.Native);
    
    Если КодВозврата Тогда
        Компонента1cruen = Новый("AddIn.ruen.AddInNativeExtension");    
    КонецЕсли;
    
    Компонента1cruen.СледитьЗаФокусом();
        
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    
    Если Не ВводДоступен() Тогда
        Возврат
    КонецЕсли;
    
    Сообщить(ЭтаФорма.ТекущийЭлемент.Имя);
    
КонецПроцедуры


немного глючит в плане правильного подключения, но работает
29 RomaH
 
naïve
28.07.17
12:11
но ... еще раз  - ты так и не рассказал - зачем тебе это надо
30 kupreeff
 
28.07.17
12:12
нашел подобную тему, предлагают использовать ОбработчикОжидания, как его прикрутить?
31 kupreeff
 
28.07.17
12:14
(29)мне показалось, говорил) повторю - мне нужно в третьей ТЗ выводить инфу по документу, курсор на который поставил пользователь.
32 kupreeff
 
28.07.17
12:15
(28)КодВозврата = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСменыРаскладки", "ruen",ТипВнешнейКомпоненты.Native);
как туда ее засунуть?
33 RomaH
 
naïve
28.07.17
12:15
(31) что в первых двух ТЗ и что в третьей?
34 kupreeff
 
28.07.17
12:18
(33) упрощенно если, колонки "Док" типа документа некого вида - в ТЗ1 и ТЗ2, в ТЗ3 - строки табличной части документа, на который установлен фокус. Ну даже не упрощенно, по сути именно такая модель.
35 Рэйв
 
28.07.17
12:18
(0)У формы есть обработчик ОбработкаАктивации.Поколдуй над ней, может пригодится для твоих дел.
36 Вафель
 
28.07.17
12:19
(35) Это совсем не оно
37 Мимохожий Однако
 
28.07.17
12:23
Положи эти ТЗ на разные страницы и используй определение страницы ПриСменеСтраницы()
38 kupreeff
 
28.07.17
12:28
(28) я создал Общий макет и загрузил как двоичные данные dll, правильно?
39 kupreeff
 
28.07.17
12:29
(37) не очень удобно в работе получается, к сожалению.
40 Вафель
 
28.07.17
12:29
А вариант (20) чем не подошел?
41 Мимохожий Однако
 
28.07.17
12:30
Можно дать разные имена колонкам и при активации строки смотреть еще и колонку для дальнейших действий.
42 kupreeff
 
28.07.17
12:31
(41) если б я мог отловить эту активацию...
43 kupreeff
 
28.07.17
12:31
(20) как сбрасывать не знаю.
44 kupreeff
 
28.07.17
12:34
(28) Компонента1cruen.СледитьЗаФокусом();
возвращает в итоге Истину, правда не в ПриОткрытии, а в ПриСозданииНаСервере я все написал. Норм?
45 RomaH
 
naïve
28.07.17
12:35
46 kupreeff
 
28.07.17
12:37
(45) как работает понятно)
47 RomaH
 
naïve
28.07.17
12:39
(46) ну осталось совсем малость, разобраться с клиент-серверным вариантом и как подключать ВК
48 kupreeff
 
28.07.17
12:40
(47) да.
49 Вафель
 
28.07.17
12:41
Элементы.ТЗ1.ВыделенныеСтроки.Очистить()
50 kupreeff
 
28.07.17
12:46
(47) я ж понимаю, на серной процедуре нет смысла ее запускать, если она должна работать на форме? ПриОткрытии у меня не выхывается. куда писать подключение ВК...
51 kupreeff
 
28.07.17
12:50
(50) вызывается, что-то затупил...но КодВозврата=Ложь. Походу, я как-то общий макет ни так создаю. Хотя, когда в серверной писал процедуре, возвращалась Истина.
52 dezss
 
28.07.17
12:57
(43) тз1.ТекущаяСтрока = Неопределено, пробовал?
53 kupreeff
 
28.07.17
13:01
(52)да, в ПриОткрытии не работает.(49) тоже.
54 kupreeff
 
28.07.17
13:04
(45) почему компонента может возвращать Ложь? Я неправильно сделал общий макет?
55 kupreeff
 
28.07.17
13:14
(45) сделал так:
КодВозврата = ПодключитьВнешнююКомпоненту("F:\Полезное\8\КомпонентаСменыРаскладки\mistools.dll", "ruen",ТипВнешнейКомпоненты.Native);
        
        Если КодВозврата Тогда
            Компонента1cruen = Новый("AddIn.ruen.AddInNativeExtension");    
        КонецЕсли;
        
        Компонента1cruen.СледитьЗаФокусом();
СледитьЗаФокусом -возвращает Истину. Но внешнее событие не возникает.
56 RomaH
 
naïve
28.07.17
13:15
ВК - это зип архив ... почитай что там и как
57 kupreeff
 
28.07.17
14:59
(56)по твоей ссылке рар-архив, либо я не в теме.
58 kupreeff
 
28.07.17
15:37
Всё, день промахался с такой ерундой, оказывается)
dezss оказался прав, все спасибо за помощь!
59 kupreeff
 
28.07.17
15:49
*всем!
AdBlock убивает бесплатный контент. 1Сергей