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