|   |   | 
| 
 | Помогите пожалуйста разобраться с отбором | ☑ | ||
|---|---|---|---|---|
| 0
    
        Vitalii72 30.06.16✎ 06:57 | 
        В общем задача такая, необходимо сделать отбор по последней строчке табличной части с колонкой ТекущаяДата. В стандартном отборе не смог найти как это сделать, скорей всего не такой возможности. Попробовал сам написать запрос по убыванию строки этой колонки и записать в список после проверки:
 Если ТекущаяДатаИстина = Истина Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.ТабличнаяЧасть.( | ТекущаяДата КАК ТекущаяДата | ) |ИЗ | Справочник.Контрагенты КАК Контрагенты | |УПОРЯДОЧИТЬ ПО | ТекущаяДата УБЫВ"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Выборка = ВыборкаДетальныеЗаписи.ТабличнаяЧасть.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.ТекущаяДата < ДатаНачало ИЛИ Выборка.ТекущаяДата = ДатаНачало Тогда Если НЕ Выборка.ТекущаяДата = '0001.01.01 00:00:00' Тогда СписокДляОтбора=Новый СписокЗначений; СписокДляОтбора.Добавить(Выборка.ТекущаяДата); КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Для Каждого ЭлементСписка Из СписокДляОтбора Цикл Сообщить(ЭлементСписка.Значение); КонецЦикла; ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТабличнаяЧасть.ТекущаяДата"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; ЭлементОтбора.ПравоеЗначение = СписокДляОтбора; ЭлементОтбора.Использование = Истина; Отбор проходит, но почему то находит только 14 контрагентов, а их по факту намного больше. После загрузки списка из колонки Выборка.ТекущаяДата пишу Сообщить(СписокДляОтбора);, он мне выдаёт больше 50 контрагентов. У списка значений есть ограничение по количеству строк? Если делаю в цикле, тогда отбор вообще не работает. Помоги пожалуйста разобраться, что не так делаю. | |||
| 1
    
        Cyberhawk 30.06.16✎ 07:54 | 
        Покажи на картинке внятно, что есть и что требуется     | |||
| 2
    
        Vitalii72 30.06.16✎ 08:07 | 
        Есть справочник контрагенты, есть табличная часть контрагента. В неё вносят каждый раз в новую строку ТекущаяДата(Дата создания строки), комментарий и ДатаСледующегоКонтакта. Вот при отборе пользователь указывает например ТабличнаяЧасть.ТекущаяДата Меньше или Равно например 30.06.2016. Отбор перебирает все строки в этих табличных частей и всех контрагентов, но надо чтобы отбор был только по последней строке. То есть если я зайду в контрагента, создам новый комментарий с ТекущейДатой 01.07.2016, он не должен найти этого контрагента.     | |||
| 3
    
        Vitalii72 30.06.16✎ 08:09 | 
        Примерно понял почему не работает, в СписокДляОтбора загружается только последнее значение. Видимо надо в цикле передать в массив, а потом после цикла из массива передать в список значение. В цикле написал: Массив.Добавить(Выборка.ТекущаяДата); 
 После Цикла СписокДляОтбора=Новый СписокЗначений; СписокДляОтбора.ЗагрузитьЗначения(Массив); И дальше отбор | |||
| 4
    
        Cyberhawk 30.06.16✎ 08:11 | 
        Заведи реквизит у контрагента и пиши в него дату последней строки. И отбирай по нему.     | |||
| 5
    
        Vitalii72 30.06.16✎ 08:12 | 
        (4) А как я делал, не получится сделать отбор?     | |||
| 6
    
        catena 30.06.16✎ 08:20 | 
        (5)по реквизиту проще и быстрее работать будет.
 По коду: когда список значений создается, он пустой. И не важно, что было до того. А он у тебя создается внутри списка. И переделай все условия в запрос, не надо никаких циклов. Запрос - выгрузить колонку - отбор по ссылке. | |||
| 7
    
        Vitalii72 30.06.16✎ 08:23 | 
        Спасибо большое за ответы!     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |