Имя: Пароль:
1C
1С v8
Последняя строка табличной части в цикле
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
Всё получилось, всем огромное спасибо )) хороших выходных!
Независимо от того, куда вы едете — это в гору и против ветра!