Имя: Пароль:
1C
1С v8
Не меняет ТекущуюСтроку в ТабличномПоле УПП Редакция1.3
0 Casper211
 
04.04.16
10:51
Подскажите, как можно сменить ТекущуюСтроку в ТабличномПоле?
Данные: ДеревоЗначений.

Пустая табличка.

Я создаю новый узел дерева (1 уровень), затем создаю новый узел дерева 2 уровня. И после того, как я закончил запись, я хочу чтобы курсор приняв положение на родителя узла.

ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= РодительТекущейСтроки ;

В процедуре ПередОкончаниемРедактирования  (ПриОкончаниемРедактирования   также пробовал)

РодительТекущейСтроки = ?(мТекущаяСтрока.Родитель = НеОпределено, ДеревоЗапросов, мТекущаяСтрока.Родитель);
    Если мТекущаяСтрока.Родитель = НеОпределено  Тогда
    Иначе
        РодительТекущейСтроки =  мТекущаяСтрока.Родитель;
        ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= РодительТекущейСтроки ;
    КонецЕсли;


Нашел где-то, что надо вставить перед
ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= РодительТекущейСтроки ;
вот это ЭлементыФормы.ДеревоЗапросов.ЗакончитьРедактированиеСтроки(Ложь);
Но мне это не помогло



В процедуре ПередОкончаниемРедактирования  (ПриОкончаниемРедактирования   также пробовал)
Либо ничего не делает или Ошибка при установке значения атрибута контекста (ТекущаяСтрока): Невозможно изменить текущую строку  

Но если взять ячейку поля и при ОкончаниеВводаТекста сделать все то же, то работает:

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


Но меня такое не устраивает. Помогите пожалуйста решить эту проблему. Буду очень благодарен. Спасибо за понимание!
1 Casper211
 
04.04.16
11:02
Это все в внешней обработке.
2 Casper211
 
04.04.16
11:13
Никто не знает в чем может быть причина?
3 AceVi
 
04.04.16
11:24
Процедура ТабДокументовПроектПриИзменении(Элемент)
    СледИндекс = ЭтаФорма.ТабДокументов.Индекс(ЭлементыФормы.ТабДокументов.ТекущаяСтрока)+1;
    Если СледИндекс < ТабДокументов.Количество() Тогда
        ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока = ТабДокументов.Получить(СледИндекс);
        ЭтаФорма.ЭлементыФормы.ТабДокументов.ТекущаяКолонка= ЭтаФорма.ЭлементыФормы.ТабДокументов.Колонки.СтатьяДДС;
    КонецЕсли;
КонецПроцедуры


Это пример текста обработки колонки приИзменении. попробуй не к элементам формы обратиться а через ЭтаФорма
4 Casper211
 
04.04.16
11:40
(3) Ничего не поменялось, если я все правильно понял?

{Форма.Форма.Форма(213)}: Ошибка при установке значения атрибута контекста (ТекущаяСтрока)
        ЭтаФорма.ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= РодительТекущейСтроки ;
по причине:
Невозможно изменить текущую строку

В процедуре ДеревоЗапросовПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)

если остановиться отладчиком перед

ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= РодительТекущейСтроки ;
то ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока - та строка текущая
то РодительТекущейСтроки - этот родитель который нужен
и потом ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока - остается неизменным.

А в процедуре ДеревоЗапросовПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
ошибка - {Форма.Форма.Форма(213)}: Ошибка при установке значения атрибута контекста (ТекущаяСтрока)
        ЭтаФорма.ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= РодительТекущейСтроки ;
по причине:
Невозможно изменить текущую строку
5 AceVi
 
04.04.16
11:45
(4) а если вместо
ЭтаФорма.ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока
сделать
ЭтаФорма.ДеревоЗапросов.ТекущаяСтрока
6 Casper211
 
04.04.16
11:54
(5) {Форма.Форма.Форма(210)}: Поле объекта не обнаружено (ТекущаяСтрока)
        ЭтаФорма.ДеревоЗапросов.ТекущаяСтрока= РодительТекущейСтроки ;
7 ЛучшийПрограммер1С
 
04.04.16
11:56
(6) Конечно, одно дело реквизит другое дело элемент формы.
8 AceVi
 
04.04.16
12:00
(6) или вот так
ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока
9 Casper211
 
04.04.16
12:02
Я проанализировал для

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


когда отладчик останавливается на этой строке

ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= РодительТекущейСтроки ;

переходит к

Процедура ДеревоЗапросовПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    ДеревоЗапросовПриАктивизацииСтроки(Элемент);
    Если мИдетДобавление Тогда
        Если ОтменаРедактирования Тогда
            мТекущаяСтрока = Неопределено;
        КонецЕсли;
        мИдетДобавление = Ложь;
    КонецЕсли;
    Модифицированность = Истина;
КонецПроцедуры // ДеревоЗапросовПриОкончанииРедактирования()

Потом

Процедура ДеревоЗапросовПриАктивизацииСтроки(Элемент)
    НадоСохранять = Истина;
    Если мИдетДобавление Тогда
        Если мАктивизированаДобавляемаяЗапись Тогда
            // Произошла отмена добавления записи.
            НадоСохранять = Ложь;
            мАктивизированаДобавляемаяЗапись = Ложь;
        Иначе
            мАктивизированаДобавляемаяЗапись = Истина;
        КонецЕсли;
    КонецЕсли;
    мТекущаяСтрока = ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока;
КонецПроцедуры // ДеревоЗапросовПриАктивизацииСтроки()
10 Casper211
 
04.04.16
12:02
(8) {Форма.Форма.Форма(211)}: Ошибка при установке значения атрибута контекста (ТекущаяСтрока)
        ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока= РодительТекущейСтроки ;
по причине:
Невозможно изменить текущую строку
11 Casper211
 
04.04.16
12:03
(9) и оно все работает, я понял, что оно изначально записывает текущая строка = неопределено и тогда меняет. Но в моем случае оно туда не идет
12 Casper211
 
04.04.16
12:09
(11) или нет(
13 AceVi
 
04.04.16
12:12
(9) (11)
А я вот тут ничего не понял - на какой строке останавливаеться отладчик - что это дает.
Куда туда не идет, фраза - записывает неопредленно и Тогда меняеться совершенно не понятна.
Давай последовательно еще раз.

ТабличноеПоле (TableBox)
ТекущаяСтрока (CurrentRow)
Использование:

Чтение и запись.
как бы должно быть разрешено изменение текущей строки.
14 Casper211
 
04.04.16
12:23
(13) где посмотреть разрешено ли изменение текущей строки?
15 Casper211
 
04.04.16
12:24
(13) ну наверное разрешено, так как из процедуры  ДеревоЗапросовЦенаОкончаниеВводаТекста  поля ввода "Цена" все работает
16 Casper211
 
04.04.16
12:27
блин я уже вообще запутался (
17 ЛучшийПрограммер1С
 
04.04.16
12:30
(16) Да вы уже всех запутали, сами не знаете, чего хотите.
18 Casper211
 
04.04.16
12:31
(17) хочу я то, что описал в самом начале
19 Casper211
 
04.04.16
12:34
возможно текущую сроку не меняет, потому что она еще не записана?
20 ЛучшийПрограммер1С
 
04.04.16
12:36
(19) А что Вы хотите поменять в текущей строке?
21 Casper211
 
04.04.16
12:41
(20) После создания узла дерева я хочу изменить положение курсора в табличном поле. То есть чтобы стала выделенной та строка, которая является радителем предыдущей.
22 Casper211
 
04.04.16
12:42
Вместо "предыдущей" - этой строки
23 ЛучшийПрограммер1С
 
04.04.16
12:48
(21) То есть в текущей строке ничего менять не надо?
24 Casper211
 
04.04.16
12:48
И потом дальше создавать элементы, которые будут иметь родителя этой текущей строки
25 ЛучшийПрограммер1С
 
04.04.16
12:49
(24) Вручную? Если программно, то зачем для этого устанавливать курсор?
26 Casper211
 
04.04.16
12:52
я создал елемент (узел 1) "Парам1" - текущая строка "Парам1" Родитель - неопределено
потом создал  ище елемент (узел 2) "Парам 1 Парама 1" - текущая строка "Парам 1 Парама 1", родитель "Парам1"
И после окончания редактирование строки, Текущой строкой станет родитель -  "Парам1" , и курсор будет на "Парам1"
27 ЛучшийПрограммер1С
 
04.04.16
12:52
Я так понял вручную. А почему ПередОкончаниемРедактирования а не При
28 ЛучшийПрограммер1С
 
04.04.16
12:53
(26) так что не нравится Вам?
29 Casper211
 
04.04.16
12:56
(27) ну нужно сделать чтобы так было "И после окончания редактирование строки, Текущой строкой станет родитель -  "Парам1" , и курсор будет на "Парам1"
(28) простите я не знал где. Я попробовал и там и там.


// Обработчик события при окончании редактирования строки в дереве запросов
//
Процедура ДеревоЗапросовПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    РодительТекущейСтроки = ?(мТекущаяСтрока.Родитель = НеОпределено, ДеревоЗапросов, мТекущаяСтрока.Родитель);
    Если мТекущаяСтрока.Родитель = НеОпределено  Тогда
    Иначе
        РодительТекущейСтроки =  мТекущаяСтрока.Родитель;
        ЭлементыФормы.ДеревоЗапросов.ЗакончитьРедактированиеСтроки(Ложь);
        ЭлементыФормы.ДеревоЗапросов.ОбновитьСтроки();
        ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= РодительТекущейСтроки ;
    КонецЕсли;    
        
    ДеревоЗапросовПриАктивизацииСтроки(Элемент);
    Если мИдетДобавление Тогда
        
        Если ОтменаРедактирования Тогда
            мТекущаяСтрока = Неопределено;
        КонецЕсли;
        
        мИдетДобавление = Ложь;
    КонецЕсли;
    
    Модифицированность = Истина;
    
КонецПроцедуры // ДеревоЗапросовПриОкончанииРедактирования()

Вот так просто ничего не происходит, или я не там вставляю код.
30 ЛучшийПрограммер1С
 
04.04.16
12:58
мТекущаяСтрока - это чо?
31 Casper211
 
04.04.16
12:59
(30)
Процедура ДеревоЗапросовПриАктивизацииСтроки(Элемент)
    
    
    НадоСохранять = Истина;
    
    Если мИдетДобавление Тогда
        Если мАктивизированаДобавляемаяЗапись Тогда
            
            // Произошла отмена добавления записи.
            НадоСохранять = Ложь;
            мАктивизированаДобавляемаяЗапись = Ложь;
        Иначе
            мАктивизированаДобавляемаяЗапись = Истина;
        КонецЕсли;
    КонецЕсли;
    
    
    мТекущаяСтрока = ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока;
    
КонецПроцедуры // ДеревоЗапросовПриАктивизацииСтроки()
32 ЛучшийПрограммер1С
 
04.04.16
13:07
ТекущаяСтрока это номер строки
33 hhhh
 
04.04.16
13:15
(31) при активизации нельзя. Активизация - это же и есть, когда меняется текущая строка. ТО есть вы из одной активизацию сразу другую фигачите.
34 ЛучшийПрограммер1С
 
04.04.16
13:30
Как-то так:

Процедура ДеревоЗапросовПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
        ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= мТекущаяСтрока;
КонецПроцедуры// ДеревоЗапросовПриОкончанииРедактирования()

Процедура ДеревоЗапросовПриАктивизацииСтроки(Элемент)
    мТекущаяСтрока = ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока;
    
КонецПроцедуры// ДеревоЗапросовПриАктивизацииСтроки()
35 ЛучшийПрограммер1С
 
04.04.16
13:33
Может ПередНачаломДобавления запоминать родителя
36 ЛучшийПрограммер1С
 
04.04.16
13:37
(35) Да, как раз будет та строка что надо.
37 ЛучшийПрограммер1С
 
04.04.16
13:38
Процедура ДеревоЗапросовПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
        ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= мТекущаяСтрока;
КонецПроцедуры// ДеревоЗапросовПриОкончанииРедактирования()


Процедура ДеревоЗапросовПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
    мТекущаяСтрока = ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока;
    
КонецПроцедуры//
38 Casper211
 
04.04.16
14:59
(37) не работает
39 ЛучшийПрограммер1С
 
04.04.16
15:02
(38) У меня работает
40 Casper211
 
04.04.16
15:12
Вставил

Процедура ДеревоЗапросовПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
    мТекущаяСтрока = ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока;
    
КонецПроцедуры//


Потом


Процедура ДеревоЗапросовПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если мТекущаяСтрока.Родитель = НеОпределено  Тогда
    Иначе
        ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= мТекущаяСтрока.Родитель;
    КонецЕсли;    
КонецПроцедуры

Отладчик проходит

ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= мТекущаяСтрока.Родитель;

и не перезаписывает текущую срока. И та строка которая нужна не активизируется
41 Casper211
 
04.04.16
15:13
(39)
42 ЛучшийПрограммер1С
 
04.04.16
15:17
(40) что за бред, какой родитель
43 Casper211
 
04.04.16
15:27
(42) Простите пожалуйста, тогда я вас не понял. что написано в посте (37)
44 ЛучшийПрограммер1С
 
04.04.16
15:28
(43) Заработало?
45 Casper211
 
04.04.16
15:29
(44) вы наверное думаете что я уже совсем, но нет (
46 Casper211
 
04.04.16
15:32
(44) Если сделать 100% как в (37), то не работает
47 Casper211
 
04.04.16
15:33
Активизация сроки остается неизменной, на той строке как и была
48 Casper211
 
04.04.16
15:37
Вот здесь нашел, что  "Событие ПриОкончанииРедактирования устанавливаю текущую строку -- не работает." пост (23)

v8: Спозиционироваться на строке дерева значений
49 ЛучшийПрограммер1С
 
04.04.16
15:41
А как Вы заканчиваете редактирование?
50 ЛучшийПрограммер1С
 
04.04.16
15:42
мышкой на другое поле или по ентеру?
51 Casper211
 
04.04.16
15:43
(50) ентер
52 Casper211
 
04.04.16
15:44
(50) v8: v8: Спозиционироваться на строке дерева значений Remake
Что-то нашел, еще не разобрал, сейчас буду пробовать
53 ЛучшийПрограммер1С
 
04.04.16
15:48
нет, ну в отладчике посмотрите
вот мы создаем строку 0,
Затем создаем строку 1, ДеревоЗапросовПередНачаломДобавления  запоминаем в мТекущаяСтрока 0 нажимаем ентер срабатывает
ДеревоЗапросовПриОкончанииРедактирования и устанавливает ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока= 0 устанавливается соотв курсор на строку 0 Что не так?
54 Casper211
 
04.04.16
17:07
(53) ой простите меня пожалуйста, у меня не табличное поле с типом Дерево. У меня сразу ДеревоЗначений.
55 Casper211
 
04.04.16
17:10
это у меня было раньше (я уже поменял табличное поле на дерево. А то данные не отображались.
P.S.
Не судите строго, так у меня много ошибок, я только учусь (хотя уже немного большой промежуток времени. Но все никак не разберусь.
56 hhhh
 
04.04.16
17:18
(55) всё-таки непонятно, зачем тебе перепрыгивать на родителя? Ведь и так всё нормально будет.
57 Casper211
 
04.04.16
17:21
(56) Чтобы когда создал элемент, при нажатии плюс, образовался элемент который будет иметь этого родителя (где был курсор). И так много раз. Что-то такое
58 hhhh
 
04.04.16
17:35
(57) если ты будешь внутри этой группы, просто будешь как обычно нажимать кнопку Добавить строку. С какого бодуна нужно, чтобы именно нажимать кнопку плюс? Кнопка плюс совсем для других целей предназначена.
59 Casper211
 
04.04.16
17:42
(58) ну  "кнопку Добавить строку" я имел в виду
60 ЛучшийПрограммер1С
 
05.04.16
08:04
(54) Так и у меня дерево значений и всё работает, правда на управляемой форме а не на обычной
61 Casper211
 
05.04.16
16:18
(60) а у меня ОФ
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.