|
Последняя строка табличной части в цикле | ☑ | ||
---|---|---|---|---|
0
Vitalii72
22.09.16
✎
13:29
|
Помогите разобраться, необходимо получить подледную строку табличной части в цикле и потом записать объект. Делаю вот так, запись проходит, только записывает первые строки по каждому элементу (
Выборка = Справочники.Контрагенты.Выбрать(); Пока Выборка.Следующий() Цикл Для Каждого Стр Из Выборка.ТабличнаяЧасть Цикл Значение = Выборка.ПолучитьОбъект(); Значение.Дата(реквизит копия табличной части для формы списка) = Стр.ТекущаяДата; Попытка Значение.Записать(); Исключение Сообщить("Не удалось записать объект " + Значение + ОписаниеОшибки()); КонецПопытки; КонецЦикла; |
|||
1
DrShad
22.09.16
✎
13:32
|
а нахрена во-первых каждый раз в цикле получать объект, а во-вторых каждый раз его записывать?
и в-третьих код не соответствует сабжу |
|||
2
Euguln
22.09.16
✎
13:33
|
Выборка.ТабличнаяЧасть[Выборка.ТабличнаяЧасть.Количество()-1]
|
|||
3
Vitalii72
22.09.16
✎
13:46
|
(1)
В цикле получаю значение строки табличной части, если вы про строку Значение.Дата(реквизит копия табличной части для формы списка), то в скобках написал специально для форума комментарий. (2) Это в цикле будет показывать подледную строку? |
|||
4
Euguln
22.09.16
✎
13:48
|
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл Значение = Выборка.ПолучитьОбъект(); Значение.ТабличнаяЧасть[Выборка.ТабличнаяЧасть.Количество()-1].Дата = Стр.ТекущаяДата; Попытка Значение.Записать(); Исключение Сообщить("Не удалось записать объект " + Значение + ОписаниеОшибки()); КонецПопытки; КонецЦикла; |
|||
5
Vitalii72
22.09.16
✎
13:53
|
(4)
Значение.ТабличнаяЧасть[Выборка.ТабличнаяЧасть.Количество()-1].Дата = Стр.ТекущаяДата; Без "Для каждого из цикл" не доступна строка Стр.ТекущаяДата. |
|||
6
Vitalii72
23.09.16
✎
06:55
|
(4)
Пишет, что индекс находится за пределами массива |
|||
7
Vitalii72
23.09.16
✎
07:00
|
У разных контрагентов, разное количество строк табличной части.
|
|||
8
Jonny_Khomich
23.09.16
✎
07:06
|
(6) ну сделай ещё условие, чтобы количество строк в ТЧ было больше 0. Скажи номер телефона фирмы в которой ты работаешь, я туда позвоню.
|
|||
9
Мимохожий Однако
23.09.16
✎
07:21
|
ТвойОбъект=Выборка.ПолучитьОбъект(); ТвойОбъект.ЕгоТЧ.Получить(ТвойОбъект.ЕгоТЧ.Количество()-1)
|
|||
10
Vitalii72
23.09.16
✎
08:35
|
(9)
Значение индекса выходит за границы диапазона (( А вообще может есть другой вариант, как можно при открытие формы списка получать автоматом значения из табличной части в дублирующие реквизиты? |
|||
11
FIXXXL
23.09.16
✎
08:43
|
(10) и ты для этого перебираешь весь спр.Контрагенты?
пятница, да... |
|||
12
Vitalii72
23.09.16
✎
08:55
|
К сожалению да (((. Корень проблемы был в том, что в форму списка не смог найти, как можно добавить столбцы из табличной части. Решил сделать два реквизита дублирующие, при сохранение в элементе сделал, чтобы он записывал значение последней строки. А вот, чтобы по всем контрагентам значение последних строк табличной части встали в дублирующие реквизиты это проблема. Контрагентов больше 1000, в ручную пересохранять стрельнусь.
|
|||
13
FIXXXL
23.09.16
✎
09:05
|
(12) задачу расскажи
ты чет не то делаешь |
|||
14
FIXXXL
23.09.16
✎
09:05
|
и конфу-режим работы уточни
|
|||
15
ovrfox
23.09.16
✎
09:09
|
Все таки я не понял, зачем перебирать табличные части
К ним что - нельзя обратиться по наименованию? Если в табличной части 0 строк, то куда идет попытка присвоения даты? Нужно это обязательно запретить! |
|||
16
ovrfox
23.09.16
✎
09:11
|
И кстати , вместо
Значение.ТабличнаяЧасть[Выборка.ТабличнаяЧасть.Количество()-1].Дата = Стр.ТекущаяДата; лучше: Значение.ТабличнаяЧасть[Значение.ТабличнаяЧасть.Количество()-1].Дата = Стр.ТекущаяДата; |
|||
17
Vitalii72
23.09.16
✎
09:12
|
(15)
К ним что - нельзя обратиться по наименованию? В форме списка? Если в табличной части 0 строк, не надо значит записывать значение в дублирующие реквизиты. |
|||
18
Vitalii72
23.09.16
✎
09:12
|
Конфа управляемое приложение.
|
|||
19
ovrfox
23.09.16
✎
09:14
|
Какая разница в какой приложении?
Меня смутило название табличной части "ТабличнаяЧасть" |
|||
20
FIXXXL
23.09.16
✎
09:16
|
(18) тебе надо в списке ТЧ отобразить что ли?
|
|||
21
Vitalii72
23.09.16
✎
09:16
|
(19)
Она у меня так и называется "ТабличнаяЧасть". |
|||
22
Vitalii72
23.09.16
✎
09:17
|
(20)
Да, причём по последним строкам табличной части. А то он контрагента выводить по несколько штук с разными строками. |
|||
23
ovrfox
23.09.16
✎
09:18
|
Еще раз в чем проблема?
В форме списка в серверном контексте доступна табличная часть Если Количество()> 0 То ТабличнаяЧасть[Количество()-1] и есть последняя строка Что с ней нужно сделать? При чем здесь перебор всех элементов справочника? ИЛИ , все же это обработка, которая должна что-то сделать? Что? |
|||
24
Vitalii72
23.09.16
✎
09:19
|
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл Значение = Выборка.ПолучитьОбъект(); Значение.ТабличнаяЧасть[Значение.ТабличнаяЧасть.Количество()-1].Дата = Выборка.ТекущаяДата; Попытка Значение.Записать(); Исключение Сообщить("Не удалось записать объект " + Значение + ОписаниеОшибки()); КонецПопытки; КонецЦикла; Выдаёт ошибку, Индекс находится за границами массива |
|||
25
ovrfox
23.09.16
✎
09:21
|
Потому что ты не проверил, что количество строк может быть равно 0
|
|||
26
Vitalii72
23.09.16
✎
09:21
|
(23)
То ТабличнаяЧасть[Количество()-1] и есть последняя строка Нужно записать её в дублирующий реквизит. У меня выдаёт ошибку почему то. |
|||
27
ovrfox
23.09.16
✎
09:23
|
(24) Если в табличной части ни одной строки (а у тебя явно есть элемент (или группа) с такими свойствами), то обращение к -1-й строке и вызовет указанную ошибку.
|
|||
28
DAVI
23.09.16
✎
09:24
|
(26) добавь условие Если Значение.ТабличнаяЧасть.Количество() > 0 тогда
|
|||
29
ovrfox
23.09.16
✎
09:25
|
(26) Но ты не записываеш строку в дублирующий реквизит, ты записываешь дублирующий реквизит в строку.
При этом ты не проверяешь, что хотя бы одна строка есть. |
|||
30
Vitalii72
23.09.16
✎
09:26
|
(27) (28)
Да уже сам понял и написал, ошибка пропала спасибо. Сейчас буду дальше разбираться. |
|||
31
ovrfox
23.09.16
✎
09:27
|
А мог бы еще по сообщению (15) догадаться
|
|||
32
Vitalii72
23.09.16
✎
09:28
|
(31)
Ногами не бить, учусь, да ещё и пятница ))). |
|||
33
Vitalii72
23.09.16
✎
09:30
|
(32)
Но ты не записываеш строку в дублирующий реквизит, ты записываешь дублирующий реквизит в строку. То, есть должно быть наоборот? Выборка.ТекущаяДата = Значение.ТабличнаяЧасть[Значение.ТабличнаяЧасть.Количество()-1].Дата; |
|||
34
Vitalii72
23.09.16
✎
09:42
|
Мда, сам туплю. Должно быть не Выборка.ТекущаяДата, а Значение.ТекущаяДата.
|
|||
35
newbling
23.09.16
✎
09:46
|
Я не понял задачу.
|
|||
36
newbling
23.09.16
✎
09:47
|
Может там динамические списки?
|
|||
37
Vitalii72
23.09.16
✎
09:48
|
Всё получилось, всем огромное спасибо )) хороших выходных!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |