Прошу помощи. Надо на форму документа вывести возможность отбора. Документ состоит из 6000 строк, пользователь хочет фильтровать эти строки по Номенклатуре, Цене номенклатуры, Проценту наценок. В ТЧ документа есть такие столбцы: Номенклатура, СтараяЦена, ПроцентНаценки, НоваяЦена, Модификатор Единственное что приходит в голову это делать запросом, но тогда: 1. Время на обработку такого запроса боюсь будет очень большое, а документов масса и в некоторых есть и по 30000 строк 2. Как быть со строками не попадающими в фильтр, ведь они будут затираться, соответственно весь список строк надо хранить во временной ТЗ, а после отмены фильтра выгружать обратно в документ. Опять таки документы большие, накладно. 3. Придется создать множество кнопок, на каждый фильтр свою.
Может есть какой другой способ добавить отбор на форму документа (не форма выбора и не форма списка), что бы строки не попадающие в отбор просто скрывались? Заранее благодарен
1. Время на обработку такого запроса боюсь будет очень большое, а документов масса и в некоторых есть и по 30000 строк
При правильном построенных индексах проблем быть не должно. Исключением является ситуация когда на табличную часть стоит обработчик "ПриПолученииДанных", который что-то там расчитывает по каждой строке, а особенно - подкрашивает строки/ячейки. В таких ситуациях тормозов избежать не удастся, но скорее даже не при наложении фильтра (и при этом конечно тоже), а при PageUp/PageDown.
Цитата(MIF @ 31.10.12, 17:20)
Может есть какой другой способ добавить отбор на форму документа что бы строки не попадающие в отбор просто скрывались?
Можно, если выполняется такое условие: в табличной части есть некий уникальный реквизит, который на всю табличную часть встречается только один раз, например номенклатура. Если это так - то: 1. Пользователь устанавливает свои фильтры, нажимает "Применить отбор". 2. Запросом (с ограничением по заданому пользователем фильтру) получаем список уникальных реквизитов, например номенклатуры. 3. Ставим отбор по "Номенклатура"--"В списке"--"Список всех ссылок, полученых запросом".
Но я так понимаю, что в вашей ситуации такого уникального реквизита нет, поэтому установить отбор в табличной части документа не получится.
В таком случае, я думаю лучше создать специализированную обработку. В обработке сделать табличную часть такую же, как в документе. Загружать в нее только те строки, которые подпадают под указанные пользователем фильтры, при этом запоминать номер строки документа, из которой была получена загружаемая строка. Пользователь может как угодно изменять строки, даже сортировать их - при окончании работы заменять строки в "родительском" документе строками из обработки. Сопоставление производить по номеру строки. Можно отдельно обрабатывать ситуации с удалением и добавлением строк (в обработке) - запоминать их номера и проделывать те же действия (добавление / удаление) в "родительском" документе.
тоже делал подобное. Удобно использовать текст : ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.Установить(ЗначениеОтбора);
подробнее [необходимо зарегистрироваться для просмотра ссылки]
Пробовал: Пишет "Не обнаружено поле ОтборСтрок". Добавил кнопку "фильтр" в командной панели и в действии прописывал.
!
Правила, п.13
К сожалению некоторые колонки каждой строки рассчитываются очень замудренным путем, данные подтягиваются из кучи разных документов. Открытие одного такого документа занимает порядка 3 минут(если строк около 3 тысяч), формирование самого документа занимает около часа-двух.
!
Правила, п.13
Думал об этом, но думал не про обработку, а про отдельный документ, но опять же всё упирается во время, не будет ли загрузка строк в новый документ, а потом выгрузка их обратно, трудоёмкой для 1ски? (учитывая их кол-во)
!
Правила, п.13
К сожалению некоторые колонки каждой строки рассчитываются очень замудренным путем, данные подтягиваются из кучи разных документов. Открытие одного такого документа занимает порядка 3 минут(если строк около 3 тысяч), формирование самого документа занимает около часа-двух.
!
Правила, п.13
Думал об этом, но думал не про обработку, а про отдельный документ, но опять же всё упирается во время, не будет ли загрузка строк в новый документ, а потом выгрузка их обратно, трудоёмкой для 1ски? (учитывая их кол-во)
i
Если лень цитировать конкретный текст - сообщения будут удаляться полностью!
В обычном приложении динамического списка нет. Что-то издалека похожее на динамический список - это использование в табличных частях СправочникСписок и РегистрСведенийСписок с предустановленными отборами, но в данном случае это конечно не то.
Пробовал: Пишет "Не обнаружено поле ОтборСтрок". Добавил кнопку "фильтр" в командной панели и в действии прописывал.
только что все еще раз проверил: все там работает;
//Установить отбор ЭлементыФормы.Состав.ОтборСтрок.Организация.Установить(Справочники.Организации.НайтиПоКоду("000000001")); //Снять отбор ЭлементыФормы.Состав.ОтборСтрок.Организация.Установить(,Ложь);
Покажите Ваш нерабочий код + дочитайте [необходимо зарегистрироваться для просмотра ссылки]
К сожалению некоторые колонки каждой строки рассчитываются очень замудренным путем, данные подтягиваются из кучи разных документов. Открытие одного такого документа занимает порядка 3 минут(если строк около 3 тысяч), формирование самого документа занимает около часа-двух.
То что у вас такие "тормоза" - следствие неправильной организации работы с данными (Выделенный текст в цитате). Данные должны подтягиватся не из документов, а из регистров. Структура регистров организована таким образом, чтобы быстро получать из них данные. В общем, для увеличения скорости работы вам нужно смотреть в сторону оптимизации. Советы по оптимизации такие: Если у вас при "подтягивании данных" одна и таже функция вызывается несколько сот/тысяч раз - может быть имеет смысл делать кеширование. Один раз вызвать функцию, заполнить таблицу значений или соответствие и потом работать с этим хранилищем, а не тысячу раз выполнять один и тот же запрос. При такой работе конечно повышается использование памяти, но время работы существенно уменьшается. Если есть возможность "подтягивать данные" одним запросом, а не несколькими - то следует поступить именно так. SQL-Server гораздо быстрее выполняет один запрос на 200 строк, чем 100 раз 10 запросов по 20 строк. Конечно при условии что построены индексы по реквизитам из области запроса ГДЕ или по которым происходят объединения.
То что у вас такие "тормоза" - следствие неправильной организации работы с данными (Выделенный текст в цитате).
Не я разрабатывал этот документ, и что б разобраться в нём полностью(что, откуда и почему именно так) и оптимизировать всё у меня уйдут не одни сутки, а времени у меня до конца недели. Вот такая вот лажа) Единственное что пока пришло в голову и займет где-то пол дня, плюнуть на тормоза, делать фильтры через запросы (устанавливая параметры), после чего данные из запроса загружать в новый документ(похожий на изначальный), где пользователь может что угодно делать с данными, после чего заменять данные текущего документа, данными из нового (по номеру строки). И новый удалять.
Про1С-ник
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0
MIF можете успокоиться, ОтборСтрок в Вашем случае не будет работать. Странно, что ни у вас ни у ignsv не возникло желание залезть в синтаксис помощник и увидеть там, что это НЕ работает в обычном приложении.
Личные бесплатные консультации не даю, для этого есть форум!
ЗаписьТЧ.УникальныйИдентификатор = Новый УникальныйИдентификатор();
УникальныйИдентификатор котрый получен таким образом - это УникальныйИдентификатор ТЧ документа + НомерСтроки (Не уверен что это так, а писать проверочный тест - лень ). Если это так, то получаем: Использовали отбор по системному УникальномуИдентификатору, все хорошо В середине ТЧ добавили/удалили строку. У всех последующих строк УникальныйИдентификатор изменился Теперь отбор показывает какую-то кашу
MIF можете успокоиться, ОтборСтрок в Вашем случае не будет работать. Странно, что ни у вас ни у ignsv не возникло желание залезть в синтаксис помощник и увидеть там, что это НЕ работает в обычном приложении.
Залазил, читал, по-этому и писал в начале темы, что форма обычная) Но мало ли, вдруг где-то завтыкал, проверка не заняла более 2 минут.
мы наверное о разном говорим, что вы хотите сказать под :
Цитата(MIF @ 01.11.12, 10:09)
что это НЕ работает в обычном приложении.
Если вы о методе ОтборСтрок то он работает в обычном приложении. И эти строки я проверял:
Цитата(ignsv @ 01.11.12, 9:19)
//Установить отбор ЭлементыФормы.Состав.ОтборСтрок.Организация.Установить(Справочники.Организации.Н айтиПоКоду("000000001")); //Снять отбор ЭлементыФормы.Состав.ОтборСтрок.Организация.Установить(,Ложь);
Собственно по некоторым причинам решил всё обработкой, которая выбирает документы, получает их ТЧ, далее с ТЧ что хотят, то и делают, и дальше перезаписываются поля. [необходимо зарегистрироваться для просмотра ссылки] П.с. почему сделано обработкой, потому что док содержит 20000 строк, в форме документа работать нереально по независящим от меня причинам, а переделывать сам документ ой как тяжко будет.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!