Имя: Пароль:
1C
1С v8
Фильтр по табличной части
0 Одичавший Одинэсник
 
01.04.24
12:53
Добрый день!

Есть табличная часть документа1, с разными реквизитами. Один из реквизитов - ссылка на документ2.

Необходимо сделать фильтр по реквизиту "Ответственный" документа2 в табличной части документа1.

Интернет мало чего говорит из того, что я понял.

В голове что-то подобное: обходить циклом табличную часть документа1 при изменении фильтра.

Нужна помощь.


Для каждого Строка из ТЧ Цикл

Если НЕ Строка.Документ2.Ответственный = РеквизитФильтр Тогда

Строка.Видимость = ложь;

КонецЕсли;

КонецЦикла;



Фильтровать ТЧ мне необходимо, чтобы только отобранные строки выводить на печатную форму
1 Волшебник
 
01.04.24
12:56
А почему Вы обращаетесь к несуществующим полям? Не слишком ли это нагло?
2 RomanYS
 
01.04.24
12:58
(0) Обычная практика для печатных форм: выводить сохраненные данные из базы и для их сбора использовать запросы
3 Михаил Козлов
 
01.04.24
12:58
Не пробовали на форму вывести ответственного (Изменить форму) и потом стандартным поиском в ТЧ?
4 Одичавший Одинэсник
 
01.04.24
13:03
(3) Не пробовал. Могу вывести в каждую строку ответственного.
А дальше через НайтиЗначение?
А потом как и хотел, через видимость = ложь? Если не найдёт?
5 Одичавший Одинэсник
 
01.04.24
13:03
(1) Если честно, не знаю, насколько это нагло. Вот ниже посоветовали вывести ответственного, и по нему искать.
6 Волшебник
 
01.04.24
13:07
(5) Это сверхнагло. Надо понимать ТИПЫ. В обычной строке табличной части нет реквизита "Видимость". Это Вы что-то выдумали.

Если же это Ваш личный реквизит, по которому Вы будете дальше фильтровать, то где это всё?
7 Одичавший Одинэсник
 
01.04.24
13:09
(6) Я вот не понимаю, как отбирать. Если бы понимал, но я не понимаю.

Есть Реквизит на форме, где я выбираю ответственного. Тип у него Справочник.Сотрудники.

Есть ТЧ с новой колонкой "Ответственный". Я в него запросом запихнул ответственного.

Как теперь мне отфильтровать? Вот в чём вопрос
8 Волшебник
 
01.04.24
13:11
(7) ТЧ.НайтиСтроки(<ПараметрыОтбора>)
9 Одичавший Одинэсник
 
01.04.24
13:13
(8) Спасибо!

Я, к слову, не безнадёжен, нашёл функцию сам только что. Но благодарен за помощь. Сложно тыкать во всякие места, пока поймёшь, что надо там. Уууфф...
10 Волшебник
 
01.04.24
13:16
(9) Это ж только поиск, а не фильтр. У Вас всё ещё впереди
11 Одичавший Одинэсник
 
01.04.24
13:19
(10) Да-да-да. Как раз на этом и споткнулся. Увы, миссия ни разу не выполнена
12 Одичавший Одинэсник
 
01.04.24
13:44
Вот таких два варианта получилось.
Вариант 2 в самой табличной части всё показывает как надо, отбирает красиво, но на печать всё равно уходит вся ТЧ.
С вариантом 1 я не разобрался, что делать. В ОтфильтрованнаяТЧ попадают строки с нужным отбором, но куда копать дальше, не знаю.


    Отбор = Новый Структура;
    Отбор.Вставить("Ответственный",ФильтрТорговыйПредставитель);
    
    // 1 вариант
    ОтфильтрованнаяТЧ = Заказы.НайтиСтроки(Отбор);
    // 2 вариант
    Элементы.Заказы.ОтборСтрок = Новый ФиксированнаяСтруктура(Отбор);
13 Волшебник
 
01.04.24
13:46
(12) При выводе на печать прочитайте текущий отбор и заново его примените. Мы не ищем лёгких путей.
14 Одичавший Одинэсник
 
01.04.24
13:50
(13) Сложна.

Вот получил я переменную с ОтфильтрованнаяТЧ. Она у меня в процедуре при изменении реквизита формы находится.

Процедура печать вызывается с внешней печатной формы.

Как их подружить так, чтобы они радовались жизни, и настругали мне красивую печатную форму на выходе?
15 Волшебник
 
01.04.24
13:51
(14) У Вас в "ОтфильтрованнаяТЧ" содержится Массив строк, а не ТЧ. Опять сбилась картинка с типами.
16 Одичавший Одинэсник
 
01.04.24
13:53
(15) Дык знаю, что массив строк. Вот он, перед глазами висит, ждёт, пока я его приголублю. А я не знаю, как его впихнуть в печатную форму, которая вообще не тут. Либо мне куда-то его передать надо? У меня нет понимания, что делать.
17 Волшебник
 
01.04.24
13:56
(16) Наверняка надо что-то сделать, чтобы что-то получилось.
1) Можете передать массив строк
2) Можете передать поле и значение отбора и в печ.форме заново отобрать
18 Одичавший Одинэсник
 
01.04.24
14:04
(17) Давайте порассуждаем.
1) Передать массив строк.

Как это должно быть? Куда его передавать? Как его получать?

На стадии ОтфильтрованнаяТЧ = Заказы.НайтиСтроки(Отбор); ещё ничего в ТЧ документа не отображается. Как пользователь поймёт, что его отбор сработал?
Окей, я могу оставить Элементы.Заказы.ОтборСтрок = Новый ФиксированнаяСтруктура(Отбор); тогда визуально будет в ТЧ то, что хочет пользователь (хотя уверен, что использовать два этих метода, один чтобы получить строки, второй чтобы просто отображать их на тч - нечто странное.

Тогда У меня есть массив ОтфильтрованнаяТЧ со строками. Куда его передать? Это просто переменная. Сделать её в подвешенном состоянии, и пусть при печати всегда спрашивает её, есть ли там чего?

2) Можете передать поле и значение отбора и в печ.форме заново отобрать

То же самое. Куда передавать? Вот я отфильтровал. Вижу (или не вижу, но ощущаю в ОтфильтрованнаяТЧ ) перед собой нужные строки.

Непонятно.
19 Волшебник
 
01.04.24
14:05
(18) >> Куда его передавать? Куда его передать?
Передайте туда, где его будут ждать.
20 Одичавший Одинэсник
 
01.04.24
14:53
А есть ещё мнения у кого-нибудь, что делать с ОтфильтрованнаяТЧ ?
21 АгентБезопасной Нацио
 
01.04.24
14:55
(20) вариантов, собственно, всего два: Если не нужна - выкинь. Если нужна - используй.
22 Одичавший Одинэсник
 
01.04.24
14:57
(21) Судя по всему, нужна. Вопрос в том, как использовать. Куда передавать, где хранить
23 Климов Сергей
 
01.04.24
14:58
(0) Вы процедуру печати где хотите разместить? В модуле менеджера документа? Если да, то вам надо параметры отбора сохранять в реквизитах вашего документа. В процедуре печати использовать их в условиях запроса. Документ перед печатью обязательно записывать.
24 Волшебник
 
01.04.24
14:59
(22) Оно уже хранится в памяти типа "динамическая куча". Передавать другому программному коду, который знает, что с ней делать.
25 Одичавший Одинэсник
 
01.04.24
14:59
(23) Процедура печати уже есть, находится в модуле объекта внешней печатной формы
26 Климов Сергей
 
01.04.24
15:03
(25) Тогда именно так, как я предложил. Иного пути нет.
Точнее, более простого пути нет. Помудрёнее можно придумать :-)
27 Одичавший Одинэсник
 
01.04.24
15:16
(26) Спасибо) Буду пытаться. Я так понимаю, это как раз то, что говорил (24)