Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Последняя строка табличной части в цикле

Последняя строка табличной части в цикле
Я
   Vitalii72
 
22.09.16 - 13:29
Помогите разобраться, необходимо получить подледную строку табличной части в цикле и потом записать объект. Делаю вот так, запись проходит, только записывает первые строки по каждому элементу (

Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл
    
Для Каждого Стр Из Выборка.ТабличнаяЧасть Цикл
Значение = Выборка.ПолучитьОбъект();
Значение.Дата(реквизит копия табличной части для формы списка) = Стр.ТекущаяДата;

Попытка
Значение.Записать();
Исключение
Сообщить("Не удалось записать объект " + Значение + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
 
 
   DrShad
 
1 - 22.09.16 - 13:32
а нахрена во-первых каждый раз в цикле получать объект, а во-вторых каждый раз его записывать?
и в-третьих код не соответствует сабжу
   Euguln
 
2 - 22.09.16 - 13:33
Выборка.ТабличнаяЧасть[Выборка.ТабличнаяЧасть.Количество()-1]
   Vitalii72
 
3 - 22.09.16 - 13:46
(1)
В цикле получаю значение строки табличной части, если вы про строку Значение.Дата(реквизит копия табличной части для формы списка), то в скобках написал специально для форума комментарий. (2)
Это в цикле будет показывать подледную строку?
   Euguln
 
4 - 22.09.16 - 13:48
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл

Значение = Выборка.ПолучитьОбъект();

Значение.ТабличнаяЧасть[Выборка.ТабличнаяЧасть.Количество()-1].Дата = Стр.ТекущаяДата;

Попытка

Значение.Записать();

Исключение
Сообщить("Не удалось записать объект " + Значение + ОписаниеОшибки());

КонецПопытки;
КонецЦикла;
   Vitalii72
 
5 - 22.09.16 - 13:53
(4)
Значение.ТабличнаяЧасть[Выборка.ТабличнаяЧасть.Количество()-1].Дата = Стр.ТекущаяДата;

Без "Для каждого из цикл" не доступна строка Стр.ТекущаяДата.
   Vitalii72
 
6 - 23.09.16 - 06:55
(4)

Пишет, что индекс находится за пределами массива
   Vitalii72
 
7 - 23.09.16 - 07:00
У разных контрагентов, разное количество строк табличной части.
   Jonny_Khomich
 
8 - 23.09.16 - 07:06
(6) ну сделай ещё условие, чтобы количество строк в ТЧ было больше 0. Скажи номер телефона фирмы в которой ты работаешь, я туда позвоню.
   МимохожийОднако
 
9 - 23.09.16 - 07:21
ТвойОбъект=Выборка.ПолучитьОбъект(); ТвойОбъект.ЕгоТЧ.Получить(ТвойОбъект.ЕгоТЧ.Количество()-1)
   Vitalii72
 
10 - 23.09.16 - 08:35
(9)
Значение индекса выходит за границы диапазона ((

А вообще может есть другой вариант, как можно при открытие формы списка получать автоматом значения из табличной части в дублирующие реквизиты?
 
 Рекламное место пустует
   FIXXXL
 
11 - 23.09.16 - 08:43
(10) и ты для этого перебираешь весь спр.Контрагенты?
пятница, да...
   Vitalii72
 
12 - 23.09.16 - 08:55
К сожалению да (((. Корень проблемы был в том, что в форму списка не смог найти, как можно добавить столбцы из табличной части. Решил сделать два реквизита дублирующие, при сохранение в элементе сделал, чтобы он записывал значение последней строки. А вот, чтобы по всем контрагентам значение последних строк табличной части встали в дублирующие реквизиты это проблема. Контрагентов больше 1000, в ручную пересохранять стрельнусь.
   FIXXXL
 
13 - 23.09.16 - 09:05
(12) задачу расскажи
ты чет не то делаешь
   FIXXXL
 
14 - 23.09.16 - 09:05
и конфу-режим работы уточни
   ovrfox
 
15 - 23.09.16 - 09:09
Все таки я не понял, зачем перебирать табличные части
К ним что - нельзя обратиться по наименованию?
Если в табличной части 0 строк, то куда идет попытка присвоения даты? Нужно это обязательно запретить!
   ovrfox
 
16 - 23.09.16 - 09:11
И кстати , вместо
Значение.ТабличнаяЧасть[Выборка.ТабличнаяЧасть.Количество()-1].Дата = Стр.ТекущаяДата;

лучше:
Значение.ТабличнаяЧасть[Значение.ТабличнаяЧасть.Количество()-1].Дата = Стр.ТекущаяДата;
   Vitalii72
 
17 - 23.09.16 - 09:12
(15)
К ним что - нельзя обратиться по наименованию?

В форме списка?

Если в табличной части 0 строк, не надо значит записывать значение в дублирующие реквизиты.
   Vitalii72
 
18 - 23.09.16 - 09:12
Конфа управляемое приложение.
   ovrfox
 
19 - 23.09.16 - 09:14
Какая разница в какой приложении?
Меня смутило название табличной части "ТабличнаяЧасть"
   FIXXXL
 
20 - 23.09.16 - 09:16
(18) тебе надо в списке ТЧ отобразить что ли?
   Vitalii72
 
21 - 23.09.16 - 09:16
(19)
Она у меня так и называется "ТабличнаяЧасть".
   Vitalii72
 
22 - 23.09.16 - 09:17
(20)

Да, причём по последним строкам табличной части. А то он контрагента выводить по несколько штук с разными строками.
   ovrfox
 
23 - 23.09.16 - 09:18
Еще раз в чем проблема?
В форме списка в серверном контексте доступна табличная часть
Если Количество()> 0 
То ТабличнаяЧасть[Количество()-1] и есть последняя строка
Что с ней нужно сделать?
При чем здесь перебор всех элементов справочника?
ИЛИ , все же это обработка, которая должна что-то сделать?
Что?
   Vitalii72
 
24 - 23.09.16 - 09:19
Выборка = Справочники.Контрагенты.Выбрать();


Пока Выборка.Следующий() Цикл
    

            
             Значение = Выборка.ПолучитьОбъект();
             Значение.ТабличнаяЧасть[Значение.ТабличнаяЧасть.Количество()-1].Дата = Выборка.ТекущаяДата;
             Попытка
             Значение.Записать();
             Исключение
             Сообщить("Не удалось записать объект " + Значение + ОписаниеОшибки());
             КонецПопытки;
            

        
КонецЦикла;


Выдаёт ошибку, Индекс находится за границами массива
   ovrfox
 
25 - 23.09.16 - 09:21
Потому что ты не проверил, что количество строк может быть равно 0
   Vitalii72
 
26 - 23.09.16 - 09:21
(23)
То ТабличнаяЧасть[Количество()-1] и есть последняя строка

Нужно записать её в дублирующий реквизит. У меня выдаёт ошибку почему то.
   ovrfox
 
27 - 23.09.16 - 09:23
(24) Если в табличной части ни одной строки (а у тебя явно есть элемент (или группа) с такими свойствами), то обращение к -1-й строке и вызовет указанную ошибку.
   DAVI
 
28 - 23.09.16 - 09:24
(26) добавь условие Если Значение.ТабличнаяЧасть.Количество() > 0 тогда
   ovrfox
 
29 - 23.09.16 - 09:25
(26) Но ты не записываеш строку в дублирующий реквизит, ты записываешь дублирующий реквизит в строку.
При этом ты не проверяешь, что хотя бы одна строка есть.
   Vitalii72
 
30 - 23.09.16 - 09:26
(27) (28)  
Да уже сам понял и написал, ошибка пропала спасибо. Сейчас буду дальше разбираться.
   ovrfox
 
31 - 23.09.16 - 09:27
А мог бы еще по сообщению (15) догадаться
   Vitalii72
 
32 - 23.09.16 - 09:28
(31)

Ногами не бить, учусь, да ещё и пятница ))).
   Vitalii72
 
33 - 23.09.16 - 09:30
(32)
Но ты не записываеш строку в дублирующий реквизит, ты записываешь дублирующий реквизит в строку.

То, есть должно быть наоборот?

Выборка.ТекущаяДата = Значение.ТабличнаяЧасть[Значение.ТабличнаяЧасть.Количество()-1].Дата;
 
 
   Vitalii72
 
34 - 23.09.16 - 09:42
Мда, сам туплю. Должно быть не Выборка.ТекущаяДата, а Значение.ТекущаяДата.
   newbling
 
35 - 23.09.16 - 09:46
Я не понял задачу.
   newbling
 
36 - 23.09.16 - 09:47
Может там динамические списки?
   Vitalii72
 
37 - 23.09.16 - 09:48
Всё получилось, всем огромное спасибо )) хороших выходных!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует