|   |   | 
| 
 | Последняя строка табличной части в цикле | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Всё получилось, всем огромное спасибо )) хороших выходных!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |