![]() |
|
Изменение значения последующей строки | ☑ | ||
---|---|---|---|---|
0
NIGHTHUNTER
20.07.22
✎
09:07
|
Подскажите как правильнее сделать, что при изменении значения в поле строки, меняется значение и доступность поля в последующей строке?
В табличной части документа. |
|||
1
Kassern
20.07.22
✎
09:08
|
Проверяете, что существует следующая строка и по индексу находите следующую
|
|||
2
vicof
20.07.22
✎
09:09
|
условным оформлением, ваш кэп
|
|||
3
Kassern
20.07.22
✎
09:09
|
(2) "меняется значение" - это вы как условным оформлением сделаете?
|
|||
4
Ryzeman
20.07.22
✎
09:12
|
Ты как персонаж японских мультиков, твоё упорство восхищает. Не получилось в одной ветке - создаёшь ещё одну. Наткнулся на новую проблему и не получил разжеванный ответ - ещё ветка... Мало у кого есть такие качества)
По теме - а последующая строка - речь об уже созданный или тебе надо ограничить ввод каких-то данных по условию? К тому же, следующая - по номеру строки? |
|||
5
Kassern
20.07.22
✎
09:14
|
(4) у самурая нет цели, только путь)
|
|||
6
6awkup_true
20.07.22
✎
09:15
|
(4) по номеру строки следующий упадет в 50% случаев. например, строки поменяли местами, часть строк удалили - нумерация будет 2,8,1,4 - как определить следующий? надо получать индекс строки
|
|||
7
Ryzeman
20.07.22
✎
09:16
|
(6) Я знаю, я хочу понять что он то имеет ввиду сам.
|
|||
8
NIGHTHUNTER
20.07.22
✎
09:20
|
(4) Это другая тема, ту я решил.
|
|||
9
NIGHTHUNTER
20.07.22
✎
09:23
|
(1) В какой процедуре это делать? При изменении поля?
(4) Введенные строки в тч документа. С верху в которой стоит значение в поле принято к выполнению, доступна для редактирования. В последующих строках, это поле не доступно для редактирования, и с пустым значением. Когда в строке в которой можно поменять значение с принято к выполнению, на выполнено, в следующей строке, должно появиться значение принято к выполнению. И это поле должно стать доступным для редактирования, со значением принято к выполнению. В строке выше, значение изменилось на выполнено. |
|||
10
6awkup_true
20.07.22
✎
09:26
|
(9) Смена значения предыдущей строки производится кем? пользователем или рег заданием? тч лежит тупо на форме(и данные тянутся из РС) или в объекте тоже есть?
|
|||
11
Kassern
20.07.22
✎
09:27
|
(10) ТЧ не может тупо лежать на форме, она всегда от объекта)
|
|||
12
Kassern
20.07.22
✎
09:27
|
(9) я вам в (2) уже все расписал как нужно сделать
|
|||
13
Kassern
20.07.22
✎
09:28
|
(12) *в (1)
|
|||
14
Kassern
20.07.22
✎
09:28
|
(9) "В какой процедуре это делать" При изменении строки в событии ТЧ
|
|||
15
Kassern
20.07.22
✎
09:29
|
Но по факту, такая практика хреновая и не понятно зачем нужна.
|
|||
16
Ryzeman
20.07.22
✎
09:30
|
(9) Тогда да, в (1) ответ. При изменении оходишь ТЧ и в строках с индексом большим, чем тебе нужно блокируешь\разрешаешь что нужно.
|
|||
17
Ryzeman
20.07.22
✎
09:30
|
(15) Никогда такого не было, и вот опять...
|
|||
18
6awkup_true
20.07.22
✎
09:33
|
(17) Четырёхлетний карапуз внимательно наблюдает, как его мать поддерживает форму на велотренажёре, и говорит:
— Мам, я знаю, что тебе надо подарить на день рождения. — И что же это? - улыбнулась мать. — Колёса для твоего велосипеда, а то ты так далеко не уедешь. |
|||
19
NIGHTHUNTER
20.07.22
✎
09:36
|
(10) Пользователем.
|
|||
20
NIGHTHUNTER
20.07.22
✎
09:38
|
(14) То есть, не при изменении значения в поле, а в собитии при изменении табличной части? Разбираю.
|
|||
21
NIGHTHUNTER
20.07.22
✎
09:45
|
(16) В этой последующий строке нужно ещё блокировку снять, с этого поля. Установить доступность точнее в истина.
В этой же процедуре? |
|||
22
Kassern
20.07.22
✎
09:47
|
(21) Пробуйте
|
|||
23
NIGHTHUNTER
20.07.22
✎
10:03
|
(22) Я так сделал, вроде работает. нормально же? Я использовал процедуру при изменении поля, не табличной части.
Вроде все отработало. // &НаКлиенте Процедура ВтулкиСостояниеПриИзменении(Элемент) й = 1; Если Объект.Втулки[Элементы.Втулки.ТекущаяСтрока].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.Выполнено") Тогда Объект.Втулки[Элементы.Втулки.ТекущаяСтрока + 1].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.ВыданоВРаботу"); КонецЕсли; КонецПроцедуры // &НаКлиенте Процедура ВтулкиПриИзменении(Элемент) й=1; //Объект.Втулки[Элементы.Втулки.ТекущаяСтрока + 1] КонецПроцедуры // <- |
|||
24
Kassern
20.07.22
✎
10:11
|
(23) Ответьте на вопрос, чем отличается идентификатор строки от индекса строки?
|
|||
25
6awkup_true
20.07.22
✎
10:14
|
(24) в (6) описал ситуацию с идентификаторами как раз, не?
|
|||
26
6awkup_true
20.07.22
✎
10:19
|
конструкция для получения индекса вроде такая должна быть ТвояТЧ.Индекс(объект.ТвояТЧ.НайтиПоИдентификатору(Элементы.ТвояТЧ.ТекущаяСтрока))
|
|||
27
NIGHTHUNTER
20.07.22
✎
10:20
|
&НаКлиенте
Процедура ВтулкиСостояниеПриИзменении(Элемент) Если Элементы.Втулки.ТекущаяСтрока + 1 = Объект.Втулки.Количество() Тогда Если Объект.Втулки[Элементы.Втулки.ТекущаяСтрока].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.Выполнено") Тогда Объект.Втулки[Элементы.Втулки.ТекущаяСтрока + 1].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.ВыданоВРаботу"); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
28
6awkup_true
20.07.22
✎
10:21
|
(27) перемести строки местами и часть удали. и выполни свой код. правильно отработает?
|
|||
29
Kassern
20.07.22
✎
10:21
|
(25) Вы описали, а ТС вряд ли понял судя по (23)
|
|||
30
NIGHTHUNTER
20.07.22
✎
10:22
|
(24) Что такое идентификатор строки? Я знаю идентификатор, имя поля, табличной части.
(26) а (27) не пойдет? |
|||
31
6awkup_true
20.07.22
✎
10:25
|
(30) идентификатор строки статичен(не меняется). т.е. если у тебя были строки с идентификаторами(которые ты и получаешь) изначально были 1,2,3,4,5,6, а после пользователь поменял часть местами и удалил несколько и стало 5, 2, 4, 6. при обработке строки с номером 2, ты попытаешься записать в 3, а там будет неопределено, что вывалит ошибку
|
|||
32
NIGHTHUNTER
20.07.22
✎
10:26
|
(31) Понятно примерно. Нужно делать как написано в (26) .
|
|||
33
Kassern
20.07.22
✎
10:26
|
(26) Зачем так сложно? Можно ведь ТЧ.Индекс(Элемент.ТекущиеДанные)
|
|||
34
NIGHTHUNTER
20.07.22
✎
10:28
|
То есть что я в (27) должен заменить на
Объект.Втулки.Индекс(Объект.Втулки.НайтиПоИдентификатору(Элементы.Втулки.ТекущаяСтрока)) ? |
|||
35
6awkup_true
20.07.22
✎
10:29
|
(33) а ведь точно! благодарю! все мысли вокруг идентификаторов крутились)
|
|||
36
Kassern
20.07.22
✎
10:29
|
(32) Чтобы было понятнее, если ты вторую строчку перемещаешь на место первой, то ее идентификатор строки как был 1 так и остался. А индекс сменился вместо 1 стал 0 (первая строчка)
|
|||
37
6awkup_true
20.07.22
✎
10:29
|
(34) используй (33). тоже работает
|
|||
38
Kassern
20.07.22
✎
10:30
|
(34) вам тут все уже расписали, осталось немножко самому подумать
|
|||
39
NIGHTHUNTER
20.07.22
✎
10:32
|
Сделал так
&НаКлиенте Процедура ВтулкиСостояниеПриИзменении(Элемент) ТекСтрока = Объект.Втулки.Индекс(Объект.Втулки.НайтиПоИдентификатору(Элементы.Втулки.ТекущаяСтрока)); Если ТекСтрока + 1 = Объект.Втулки.Количество() Тогда Если Объект.Втулки[ТекСтрока].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.Выполнено") Тогда Объект.Втулки[ТекСтрока + 1].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.ВыданоВРаботу"); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
40
NIGHTHUNTER
20.07.22
✎
10:33
|
Или так, сейчас буду проверять, -
&НаКлиенте Процедура ВтулкиСостояниеПриИзменении(Элемент) //ТекСтрока = Объект.Втулки.Индекс(Объект.Втулки.НайтиПоИдентификатору(Элементы.Втулки.ТекущаяСтрока)); ТекСтрока = Объект.Втулки.Индекс(Элемент.ТекущиеДанные); Если ТекСтрока + 1 = Объект.Втулки.Количество() Тогда Если Объект.Втулки[ТекСтрока].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.Выполнено") Тогда Объект.Втулки[ТекСтрока + 1].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.ВыданоВРаботу"); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
41
Kassern
20.07.22
✎
10:34
|
(39) Зачем вы Индекс строки обзываете текущей строкой? Ведь текущая строка подразумевает либо саму строку либо ее идентификатор. А вы так берете и подменяете понятия в коде...
|
|||
42
Kassern
20.07.22
✎
10:35
|
а потом сами же будете путаться
|
|||
43
6awkup_true
20.07.22
✎
10:35
|
(40) оба варианта будут работать, но второй чуть быстрее(для пользователя несущественно)
|
|||
44
6awkup_true
20.07.22
✎
10:37
|
(40) а нет, будет работать только для предпоследней строки ТЧ, а все предыдущие игнорировать
|
|||
45
NIGHTHUNTER
20.07.22
✎
10:39
|
вот это не работает
ТекСтрока = Объект.Втулки.Индекс(Элемент.ТекущиеДанные); |
|||
46
Kassern
20.07.22
✎
10:39
|
(44) ахах)) Пускай это будет сюрпризом)
(43) Тут больше не в скорости дело, а в читаемости кода |
|||
47
6awkup_true
20.07.22
✎
10:40
|
(40) условие должно быть Если ТекСтрока + 1 <= Объект.Втулки.Количество() тогда. иначе если в тч будет 10 строк, то при редактировании 1-8 ничего не произойдет
|
|||
48
6awkup_true
20.07.22
✎
10:41
|
(45) проверил, работает. у тебя какое число возвращается? больше 0?
|
|||
49
NIGHTHUNTER
20.07.22
✎
10:43
|
(46) У меня было 2 и 3, и шла ошибка, стало если 3 = 3, а по вашему как будет?
|
|||
50
Kassern
20.07.22
✎
10:43
|
(45) все работает
|
|||
51
NIGHTHUNTER
20.07.22
✎
10:43
|
(50) Сейчас запускаю, буду проверять. Я в идентификаторе ошибся.
|
|||
52
6awkup_true
20.07.22
✎
10:45
|
(51) должно быть ТекСтрока = Объект.Втулки.Индекс(Элементы.Втулки.ТекущиеДанные);
|
|||
53
6awkup_true
20.07.22
✎
10:45
|
(51) у элемента нет текущих данных
|
|||
54
Kassern
20.07.22
✎
10:47
|
(51) тебе условие нужно поправить по проверке последнего индекса. Если индекс=ТЧ.Количество()-1 тогда следующую строку не трогать, так как ее просто нет
|
|||
55
6awkup_true
20.07.22
✎
10:48
|
(54) Если ТекСтрока + 1 < Объект.Втулки.Количество()
|
|||
56
NIGHTHUNTER
20.07.22
✎
10:48
|
Так сделал, это надеюсь в порядке уже?
&НаКлиенте Процедура ВтулкиСостояниеПриИзменении(Элемент) //ТекСтрока = Объект.Втулки.Индекс(Объект.Втулки.НайтиПоИдентификатору(Элементы.Втулки.ТекущаяСтрока)); ТекСтрока = Объект.Втулки.Индекс(Элементы.Втулки.ТекущиеДанные); Если ТекСтрока + 1 <= Объект.Втулки.Количество() Тогда Если Объект.Втулки[ТекСтрока].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.Выполнено") Тогда Объект.Втулки[ТекСтрока + 1].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.ВыданоВРаботу"); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
57
Kassern
20.07.22
✎
10:48
|
(53) еще как есть, если тип у элемента таблица формы. В событии при изменении у ТЧ, как раз такой элемент.
https://disk.yandex.ru/i/x1QYB0l_JhaTKg |
|||
58
Kassern
20.07.22
✎
10:48
|
(56) читай (41)
|
|||
59
NIGHTHUNTER
20.07.22
✎
10:49
|
(56) То есть тут тоже что то не так?
|
|||
60
6awkup_true
20.07.22
✎
10:50
|
(57) так мы изменяем реквизит тч и в его случае текущих данных нет
|
|||
61
Kassern
20.07.22
✎
10:51
|
(53) а блин, ТС привязался к событию изменения реквизита, а не ТЧ. Тогда да, элемент не подойдет, так как там будет тип поле формы.
|
|||
62
Kassern
20.07.22
✎
10:51
|
(60) ага, уже заметил в имени процедуры
|
|||
63
6awkup_true
20.07.22
✎
10:52
|
Процедура ВтулкиСостояниеПриИзменении(Элемент)
ИндексТекущейСтроки = Объект.Втулки.Индекс(Элементы.Втулки.ТекущиеДанные); Если ИндексТекущейСтроки < Объект.Втулки.Количество() - 1 Тогда Если Объект.Втулки[ИндексТекущейСтроки ].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.Выполнено") Тогда Объект.Втулки[ИндексТекущейСтроки + 1].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.ВыданоВРаботу"); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
64
Kassern
20.07.22
✎
10:54
|
(63) а зачем 2 если?)
|
|||
65
Kassern
20.07.22
✎
10:55
|
Можно так:
Процедура ВтулкиСостояниеПриИзменении(Элемент) ИндексТекущейСтроки = Объект.Втулки.Индекс(Элементы.Втулки.ТекущиеДанные); Если ИндексТекущейСтроки < Объект.Втулки.Количество() - 1 И Объект.Втулки[ИндексТекущейСтроки ].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.Выполнено") Тогда Объект.Втулки[ИндексТекущейСтроки + 1].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.ВыданоВРаботу"); КонецЕсли; КонецПроцедуры |
|||
66
NIGHTHUNTER
20.07.22
✎
10:57
|
(65) Ну да, это как самый оптимальный вариант?
(63) (65) Спасибо! |
|||
67
Kassern
20.07.22
✎
10:59
|
(65) Или даже так:
Процедура ВтулкиСостояниеПриИзменении(Элемент) ДанныеСтроки=Элементы.Втулки.ТекущиеДанные; ИндексТекущейСтроки = Объект.Втулки.Индекс(ДанныеСтроки); Если ИндексТекущейСтроки < Объект.Втулки.Количество() - 1 И ДанныеСтроки.Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.Выполнено") Тогда Объект.Втулки[ИндексТекущейСтроки + 1].Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.ВыданоВРаботу"); КонецЕсли; КонецПроцедуры |
|||
68
NIGHTHUNTER
20.07.22
✎
11:16
|
(67) наверное это лишнее уже.
|
|||
69
6awkup_true
20.07.22
✎
11:17
|
(67) а еще можно вот так. в одну строку. Господин ТС, так писать НЕ нужно - это ректальное программирование.
Процедура ВтулкиСостояниеПриИзменении(Элемент) ДанныеСтроки=Элементы.Втулки.ТекущиеДанные; ИндексТекущейСтроки = Объект.Втулки.Индекс(ДанныеСтроки); Объект.Втулки[?(ИндексТекущейСтроки < Объект.Втулки.Количество() - 1, ИндексТекущейСтроки + 1, ИндексТекущейСтроки].Состояние = ?(ИндексТекущейСтроки < Объект.Втулки.Количество() - 1 И ДанныеСтроки.Состояние = ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.Выполнено"), ПредопределенноеЗначение("Перечисление.ХХХ_СостояниеВтулокВПроизводстве.ВыданоВРаботу"), Объект.Втулки[ИндексТекущейСтроки].Состояние); КонецПроцедуры |
|||
70
NIGHTHUNTER
20.07.22
✎
11:20
|
(69) Понятно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |