Версия для печати темы (https://pro1c.org.ua/index.php?s=0328aabb5a14212cb2237aa2f796b269&showtopic=55723)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ добавить фильтр в многострочную часть

Автор: 4andriy 13.12.19, 18:41

Есть многострочная часть
Там размещенны реквизиты справочника

хотелось бы в многострочной части из справочника показывать только те строки где соблюдены условия
например:

Если Колличество>1

Автор: andrew76 14.12.19, 6:27

4andriy @ Вчера, 21:41 * ,

ИспользоватьСписокЭлементов(<СписокЗначений>)
Назначение:
Реализует фильтрацию элементов справочника, используя нединамический фильтр.
Параметры:
<СписокЗначений> - необязательный параметр. Значение типа - ''СписокЗначений'' - должен представлять собой список элементов справочника, выбранных для просмотра. Если это значение пустое, то фильтр отключается.
Замечание:
Метод доступен только в контексте Модуля формы списка справочника и относится ко всему текущему справочнику.

Автор: 4andriy 16.12.19, 15:00

andrew76 @ 14.12.19, 7:27 * ,

Процедура Показать()
СписокЭлементов = создатьОбъект("СписокЗначений");
Пока Контрагенты.ИНН() Цикл
Если (ИНН = 0)
Тогда
СписокЭлементов.ДобавитьЗначение(ИНН.ТекущийЭлемент());
КонецЕсли;
КонецЦикла;
ИспользоватьСписокЭлементов(СписокЭлементов);
КонецПроцедуры


У контрагента ИНН=0, но при нажатии на кнопку список полностью очищается и стает пустой


 ! 

https://pro1c.org.ua/index.php?act=announce&id=2: 9
 

Автор: andrew76 16.12.19, 16:24

4andriy @ Сегодня, 18:00 * ,

Вообще-то этот код лучше записать в процедуру ПриОткрытии() формы,
где расположена табличная часть справочника.
Реквизит ИНН какого типа ? Числовой или строковый ?
Количество элементов в списке проверяли? Может список значений пуст ?
Сколько уровней в справочнике ?

Примерно такой код:

Процедура Показать()
СписокЭлементов = создатьОбъект("СписокЗначений");
Контрагенты=СоздатьОбъект("Справочники.Контрагенты");
Контрагенты.ВыбратьЭлементы();

Пока Контрагенты.ПолучитьЭлемент()=1 Цикл
   Если Контрагенты.ИНН=0 Тогда
          СписокЭлементов.ДобавитьЗначение(Контрагенты.ТекущийЭлемент());
   КонецЕсли;
КонецЦикла;

ИспользоватьСписокЭлементов(СписокЭлементов);
КонецПроцедуры



У меня вышеуказанный код отработал правильно.Справочник в моем случае был одноуровневый.

Автор: 4andriy 16.12.19, 18:28

andrew76 @ Сегодня, 17:24 * ,

сделал так:

Процедура Показать()
СписокЭлементов = СоздатьОбъект("СписокЗначений");
Контрагенты=СоздатьОбъект("Справочник.Контрагенты");
Контрагенты.ВыбратьЭлементы();
Пока Контрагенты.ПолучитьЭлемент()=1 Цикл
   Если Контрагенты.ИНН="0" Тогда
          СписокЭлементов.ДобавитьЗначение(Контрагенты.ТекущийЭлемент());
   КонецЕсли;
КонецЦикла;
ИспользоватьСписокЭлементов(СписокЭлементов);
КонецПроцедуры


ИНН - строка
в списке елементы есть. при открытии список контрагентов у которых 0 в инн, после нажатия показать они пропадают все
1 уровень

тоесть открываю список в котором контрагенты с 0 и другое значение
после нажатия кнопки почему-то пропадает все

Автор: volodya1122 16.12.19, 20:15

4andriy @ Сегодня, 18:28 * ,
Так если у Вас ИНН точно строка то там скорее пусто а не ноль?

Если Контрагенты.ИНН="" Тогда

Автор: 4andriy 16.12.19, 20:17

volodya1122 @ Сегодня, 21:15 * ,
я специально прописывал 0
если делаю "" то все-равно пропадают все значения из таблицы

Автор: andrew76 17.12.19, 2:35

Странно как-то фильтр работает.А если ИНН временно в числовой формат перевести (ради эксперимента)?

Автор: 4andriy 17.12.19, 12:14

andrew76 @ Сегодня, 3:35 * ,
в числовом работает, строковую не находит

но, почему-то появились какие-то значки каталога со знаком вопроса в начале выборки




 ! 

https://pro1c.org.ua/index.php?act=announce&id=2: 8
 

Автор: volodya1122 17.12.19, 12:33

4andriy @ Сегодня, 12:14 * ,
Попробуйте такое условие

Если ПустаяСтрока(Контрагенты.ИНН)=1 Тогда

Кажется для строковой переменной значение заполняется прбелами до полной длинны. Поэтому у вас в ИНН не "" или "0" а всегда заполнено так " " или "0 " (в смысле - например 12 пробелов).

Автор: 4andriy 17.12.19, 13:49

volodya1122 @ Сегодня, 13:33 * ,
тоже об этом думал

а кто знает что за значения с знаками вопроса?

Автор: volodya1122 17.12.19, 14:08

Цитата(4andriy @ 17.12.19, 13:49) *
а кто знает что за значения с знаками вопроса?

Перед ИспользоватьСписокЕлементов напишите
ИерархическийСписок(0,1);

Автор: 4andriy 18.12.19, 20:31

volodya1122 @ Вчера, 15:08 * ,
все работает, только пропадает сортировка, если перейти в действие - сортировка то тоже не активно.
пробовал:

Сортировка(Контрагенты.ИНН);


В ошибке пишет что "Неверное имя реквизита!"

Автор: volodya1122 19.12.19, 9:54

Цитата(4andriy @ 18.12.19, 20:31) *
В ошибке пишет что "Неверное имя реквизита!"

1, Нужно писать так: Сортировка("ИНН");
2. Для реквизита ИНН в свойствах нужно поставить отметку "Сортировка"
3. Когда пишите ИспользоватьСписокЭлементов то сортировка работать небудет.
4. Попробуйте создать список в нужной последовательности. Используйте метод ПорядокРеквизита (до ВыбратьЭлементы)

Автор: 4andriy 19.12.19, 14:24

volodya1122 @ Сегодня, 10:54 * ,
1. не пошло
2. включил
3. понятно
4. порядокреквизита("ИНН") поставил до выбрать елемент и результат 0.

может програмно сделать сорировку?

Автор: 4andriy 19.12.19, 16:16

4andriy @ Сегодня, 15:24 * ,

Сортировка("ИНН");

онибок не дает, но и не сортирует... странно

4andriy @ Сегодня, 17:07 * ,
ПорядокРеквизита("ИНН");
Контрагенты.ВыбратьЭлементы();

Автор: volodya1122 20.12.19, 9:16

Цитата(4andriy @ 19.12.19, 16:16) *
ПорядокРеквизита("ИНН");
Контрагенты.ВыбратьЭлементы();

Думал что догадаетесь сами. Нужно писать так:
Контрагенты.ПорядокРеквизита("ИНН");
Контрагенты.ВыбратьЭлементы();


И еще я же написал. 1 в связке с 3 работать небудет

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua