Имя: Пароль:
1C
1С v8
программное добавление строки в табличную часть
,
0 Bilkinbill
 
15.01.19
09:35
Всем привет!
Есть ТЧ на упр.форме.Пользователь жмет на спец.кнопку и после этого
необходимо добавить строку после текущей выделенной строки.
Копал в сторону Вставить() и Сдвинуть() и РежимВводаСтрок, но это не совсем так как нужно...Что порекомендуете?!
1 Василий Алибабаевич
 
15.01.19
09:37
(0) "но это не совсем так как нужно"
Хотелось бы для начала понять - "а как нужно?"
2 Bilkinbill
 
15.01.19
09:40
(1) нужно,чтобы строка добавилась после той,которая выделена пользователем или после той, в которой указан именно этот текущий пользователь.
3 Bilkinbill
 
15.01.19
09:43
В ТЧ 5 строк с указанием пользователей согласующих данный документ, пользователь жмет на кнопку "передать согласование другому" и после этого должна добавится строка +1 от той где указан нажимающий пользователь.
4 Bilkinbill
 
15.01.19
09:55
При нажатии на кнопку "передать согласование другому" вызывается форма, в которой указывается должностное лицо,которому передаёт согласование нажавший на эту кнопку,соответственно у нажавшего в строке ТЧ укажется,что он передал согласование, а "новый пользователь" должен появится под строкой того,кто перенаправил док.
5 DrWatson
 
15.01.19
09:55
(0) Что табличная часть, что таблица значений на форме - одинаково, есть метод Вставить(<Индекс>) - вставляет перед нужной строкой, которую ты найдёшь как тебе надо. И что в этом методе не так?
6 Bilkinbill
 
15.01.19
09:58
(5) мне нужно после, а не перед.какой индекс указать для той строки, в которой указан нажимающий на кнопку пользователь
7 hhhh
 
15.01.19
09:59
(4) режимВводаСтрок - это то что нужно. Вы наверно просто не разобрались по-пьяни

РежимВводаСтрокТаблицы (TableRowInputMode)
Значения

ВКонецОкна (EndOfWindow)
ВКонецСписка (EndOfList)
ПередТекущейСтрокой (BeforeCurrentRow)
ПослеТекущейСтроки (AfterCurrentRow)

Описание:

Содержит варианты режимов ввода строк в таблице управляемой формы.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
8 Bilkinbill
 
15.01.19
10:00
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда    
НоваяСтрока = Объект.Согласование.Вставить(1);
НоваяСтрока.ДолжностноеЛицо = ВыбранноеЗначение.ДолжностноеЛицо;
Конецесли;

Так не работает
9 DrWatson
 
15.01.19
10:00
(6) после от текущей - это перед следующей.
Вставить(<Индекс>+1);
10 Василий Алибабаевич
 
15.01.19
10:01
(2) "нужно,чтобы строка добавилась после той,которая выделена пользователем"

Визуально "после" или "перед" зависит от того, по какому полю в данный момент отсортирована табличка. И в общем случае абсолютно не зависит от физического порядка.
11 DrWatson
 
15.01.19
10:04
(8) я так понимаю в результате этого кода должна появится вторая строка. А что происходит, что не так?
Давай сразу больше описания. Писать "не работает" не поможет.
12 DrWatson
 
15.01.19
10:06
(10) "Визуально" и "физический порядок" это что такое в таблицах? Не путайте ТС.
13 Мимохожий Однако
 
15.01.19
10:07
(0) Конфигурация?Платформа?Какой объект содержит в себе ТЧ?
14 Bilkinbill
 
15.01.19
10:10
(12) В результате этого кода система добавляет строку после если выделена первая строка, перед,если выделена строка в середине и во вторую строку,если выделена последняя строка в ТЧ.
15 Bilkinbill
 
15.01.19
10:11
(14) а мне нужно, чтобы добавилась после той строки, где указан пользователь который нажал на соответствующую кнопку
16 DrWatson
 
15.01.19
10:14
(14) Объект.Согласование.Вставить(1) добавляет строку в разных местах в зависимости от текущей строки? Фантастика.
17 hhhh
 
15.01.19
10:16
(15) так а где у вас тут поиск этой строки?
18 НЕА123
 
15.01.19
10:17
(16)

из (2)
>после той,которая выделена пользователем или после той...

никакой фантастики - просто магия.
19 Bilkinbill
 
15.01.19
10:18
(16) именно так и происходит
20 DrWatson
 
15.01.19
10:20
(19) Я бы начал с того что усомнился, что именно код (8) добавляет строки (14).
21 Bilkinbill
 
15.01.19
10:33
(20) какие будут предложения, кроме тех,что нужно вызвать грамотного программиста или мне нужно уволиться?
22 hhhh
 
15.01.19
10:41
(21) ну хотя бы вывести сюда код программы по этой спецкнопке
23 СвинТуз
 
15.01.19
10:42
(21)
(7) прочти
24 Bilkinbill
 
15.01.19
10:48
(22)
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ДолжностноеЛицо",ПараметрыСеанса.КанцТекущееДолжностноеЛицо);
НайденныеСтроки=Объект.Согласование.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки <> Неопределено Тогда         
Для каждого Строка Из НайденныеСтроки Цикл
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда    
НоваяСтрока = Объект.Согласование.Вставить(1);
НоваяСтрока.ДолжностноеЛицо=ВыбранноеЗначение.ДолжностноеЛицо;
КонецЕсли;
КонецЦикла;
КонецЕсли;
25 Bilkinbill
 
15.01.19
10:51
(24) этот код вставлен в ОбработкуВыбора табличной части
26 JeHer
 
15.01.19
10:59
(25) добавь реквизит НомерСтроки в Объект.Согласование и вставляй по индексу = НомерСтроки. Только не забудь после каждой вставки перенумеровать НомерСтроки в Объект.Согласование
27 hhhh
 
15.01.19
11:00
(25) вот это очень странная строчка

НоваяСтрока = Объект.Согласование.Вставить(1);

вы что-то отбираете, найденные строки и всё такое. Потом вдруг плюете на все и пишете Вставить(1). Почему вддруг "1"? Бред какой-то.
28 Bilkinbill
 
15.01.19
11:01
(27) ваши предложения по существу?!
29 DrWatson
 
15.01.19
11:06
(21) сделай готовую обработку, которую можно запустить отдельно от твоей конфигурации. Например, вместо поиска строки нужно будет ввести конкретный индекс. Главное, чтобы там проявлялась проблема (14). Выкладывай, посмотрю.
30 hhhh
 
15.01.19
13:47
(28) по существу, указывай во вставить нормальный индекс и не вешай нам лапшу на уши.
31 Bilkinbill
 
15.01.19
14:09
(30) нормальный индекс-это какой? Можно конкретнее, а не только эмоции
32 hhhh
 
15.01.19
14:17
(31) ну в отладчике посмотри какие там индексы в найденных строках
33 Bilkinbill
 
15.01.19
14:17
(30) в (22) какие изменения нужно внести?
34 hhhh
 
15.01.19
14:35
(33) лучше всё выбросить конечно. Потому что вообще непонятно, зачем всё это.
35 Bilkinbill
 
15.01.19
15:04
(34) это проще всего...но нельзя так быстро сдаваться
36 Bilkinbill
 
15.01.19
15:05
Всем спасибо, вопрос решился записью вида

НоваяСтрока = Объект.Согласование.Вставить(НайденныеСтроки[0].НомерСтроки);
37 PiotrLoginov
 
15.01.19
15:19
Нет там рисков использования номера строки вместо индекса?
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.