Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 12:57

отбор-фильтр в таб. поле формы связанной с реквизитом формы

Автор andron81_81, 10 ноя 2018, 17:29

0 Пользователей и 1 гость просматривают эту тему.

andron81_81

Всем добрый день.

Обычное приложение
У меня есть таб. поле формы, я её ассоциировал с реквизитом формы с типом ТаблицаЗначений. Выяснилось, что я не пойму в этом случае как пользоваться отбором ))) подскажите , пожалуйста.
Ранее у меня таб. поле было связано с реальной таб. частью документа и там проблем не было. а тут как я понимаю не табличная часть, а таблицаЗначений.  как тут осуществлять отбор-фильтр ?

andron81_81


oleg-x

Отборы работают только с табличной частью, как вы и сами догадались. Если нужен отбор для ТаблицыЗначений, то придется писать свой.
P.S. Если это не документ или справочник, я всегда делаю таб. часть как реквизит объекта, так проще работать. Конечно в этом случае нельзя добавлять свои колонки, но это малая плата за удобство.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

andron81_81

Цитата: oleg-x от 06 дек 2018, 09:30
P.S. Если это не документ или справочник
а что ?

у меня документ.
если использовать реальные таб. части документа , тогда насколько это будет являться злом ?
тут надо пояснить, что у меня реализовано извратно : таб. части документа не хранят данные, в них рисуется данные регистра и при сохранении документа в регистры и пишется, а сами таб. части очищаются при сохранении. мне посоветовали использовать таблицу поле формы. но столкнулся с проблемой вышеуказанной с фильтрами.

oleg-x

Зло в том, что при изменения данной табличной части, будет взведен флаг модифицированность объекта и будет просить сохранить изменения, даже если их небыло.
А также, в базе данных создаются не нужные таблицы.
Так что, Вам правильно сказали, но это не означает что так делать нельзя :nhsrm:

Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

andron81_81

Цитата: oleg-x от 06 дек 2018, 10:34
Зло в том, что при изменения данной табличной части, будет взведен флаг модифицированность объекта и будет просить сохранить изменения, даже если их небыло.
А также, в базе данных создаются не нужные таблицы.
Так что, Вам правильно сказали, но это не означает что так делать нельзя :nhsrm:

да без проблем уйду от таб. частей в документе. но как фильтровать так и не понимаю. можете прокоментить вот это :
Цитата: oleg-x от 06 дек 2018, 09:30
Отборы работают только с табличной частью, как вы и сами догадались. Если нужен отбор для ТаблицыЗначений, то придется писать свой.
P.S. Если это не документ или справочник, я всегда делаю таб. часть как реквизит объекта, так проще работать. Конечно в этом случае нельзя добавлять свои колонки, но это малая плата за удобство.

"Отборы работают только с табличной частью, как вы и сами догадались. Если нужен отбор для ТаблицыЗначений, то придется писать свой."
мне как раз это и не понятно как написать свой отбор для таблицы значений

"если это не документ или справочник... "
а что ???

"я всегда делаю таб. часть как реквизит объекта, так проще работать."
то есть Вы делаете как и я.  в это случае в базе данных создаются не нужные таблицы. и плюс фалжок модифицированность

Просьба ответить.


wise

(0) а чем "Найти" ИЛИ "НайтиСтроки" НЕ устраивают Вас.??
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

LexaK

да в общем то все просто и элементарно (как обычно)

вот процедура для упрвляемых форм, использовалась для установки отбора по значению в выбранной ячейки (может использоваться и при связи с реквизитом)

тзДанные - это таблица значений именно реквизит формы

&НаСервере
Процедура УстановитьФильтр(ИмяПоля, Значение)

   лкПоиск = Новый Структура(ИмяПоля, Значение);
   лкТаб = тзДанные.Выгрузить();
   лкРезультат = лкТаб.Скопировать(лкПоиск);
   
   тзДанные.Загрузить(лкРезультат);
   
КонецПроцедуры

для обычных форм эта процедура еще проще, не нужны команды выгрузки/загрузки (все должно работать, вроде раньше проверял)

Процедура УстановитьФильтр(ИмяПоля, Значение)

   лкПоиск = Новый Структура(ИмяПоля, Значение);
   тзДанные = тзДанные.Скопировать(лкПоиск);
   
КонецПроцедуры

но ...

у вас встанет вопрос а как же тогда сбрасывать фильтр т.е. вернуться к первоначальной ТЗ ? 
:D
если помогло нажмите: Спасибо!

andron81_81

Цитата: wise от 12 дек 2018, 16:33
(0) а чем "Найти" ИЛИ "НайтиСтроки" НЕ устраивают Вас.??

задача такова, что из регистра сведений нужно читать не все строки , а часть по критерию. причем часть из этой части ( :) ) нужно отображать на форме в таблице, а часть нет (но присутствовать в таб.значений эти строки должны ! ) опять же по определенному признаку - то есть должно присутствовать поле отображать / не отображать которое модифицируется исходя из режима (режим это состояние всплывающий список на форме) . Ещё раз последняя часть так же должна присуствовать в ТЗ. это можно реализовать путем "Найти" или "НайтиСтроки" ?

блин, как-то сложно. но по-другому описать не выходит.
Добавлено: 13 дек 2018, 10:35


Цитата: LexaK от 12 дек 2018, 16:53
да в общем то все просто и элементарно (как обычно)

вот процедура для упрвляемых форм, использовалась для установки отбора по значению в выбранной ячейки (может использоваться и при связи с реквизитом)

тзДанные - это таблица значений именно реквизит формы

&НаСервере
Процедура УстановитьФильтр(ИмяПоля, Значение)

   лкПоиск = Новый Структура(ИмяПоля, Значение);
   лкТаб = тзДанные.Выгрузить();
   лкРезультат = лкТаб.Скопировать(лкПоиск);
   
   тзДанные.Загрузить(лкРезультат);
   
КонецПроцедуры

для обычных форм эта процедура еще проще, не нужны команды выгрузки/загрузки (все должно работать, вроде раньше проверял)

Процедура УстановитьФильтр(ИмяПоля, Значение)

   лкПоиск = Новый Структура(ИмяПоля, Значение);
   тзДанные = тзДанные.Скопировать(лкПоиск);
   
КонецПроцедуры

но ...

у вас встанет вопрос а как же тогда сбрасывать фильтр т.е. вернуться к первоначальной ТЗ ? 
:D

ну то есть
1. храним данные не в табличных частях документа, а в глобальных переменных типа т.з.
2. в таблице значений будет доп. поле - отображать логического типа
3. фильтруем вашим методом (обычные формы) исходя из поля п.2


в этом случае у меня встанет следующий вопрос:
на форме будет комбобокс в котором при выборе одного значения нужно в табличке значений в части строк перебить поле отображать на истина , а в части строк на ложь.
и перефильровать.

Выйдет , как Вы считаете  ?

Цитата: LexaK

у вас встанет вопрос а как же тогда сбрасывать фильтр т.е. вернуться к первоначальной ТЗ ? 
:D

зачем мне это , поясните , пожалуйста , в чем подвох ?

wise

(8)
Цитата: andron81_81 от 13 дек 2018, 10:22Ещё раз последняя часть так же должна присуствовать в ТЗ. это можно реализовать путем "Найти" или "НайтиСтроки" ?
НайтиСтроки возвращает МассивСтрок... Скрывай ОсновнуюТаблицу и отображай ТаблицуИзМассива, и при отображении ТаблицыИзМассива показывай кнопку "Очистить фильтр", которая будет очищать и скрывать ТаблицуИзМассива и ВНОВЬ показывать ОсновнуюТаблицу... :P
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Похожие темы (5)

Рейтинг@Mail.ru

Поиск