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