Как отфильтровать клиентов в 1с
Есть ли в 8.х аналог ИспользоватьСписокЭлементов?
В динамических списках документов, справочников и т.д. может быть программно установлен отбор по полю Ссылка с указанием в качестве вида сравнения вхождения в список значений. Это позволяет отображать в списке только определенные объекты.
Однако эта возможность может иметь только ограниченное применение, так как динамический список имеет достаточно большое количество универсальных возможностей (установка отбора пользователем, переходы по уровням в иерархических списках и т.д.) и совмещение в прикладных решениях этих механизмов с отбором по конкретным значениям ссылок достаточно сложно реализуется.
В большинстве случаев, если необходимо обеспечить отображение в списке специально отобранного перечня объектов, можно рекомендовать использовать другие возможности (например, выборку данных запросом и отображение в форме с помощью таблицы значений или табличного документа). При этом система обеспечивает возможность полноценного взаимодействия с такими формами других системных механизмов.
Код 1C v 8.х
Код 1C v 8.2 УП
Для 7.7 используем метод ИспользоватьСписокЭлементов
Автор: Antoska
Для решения данной задачи я решил воспользоваться методом формы списка "ИспользоватьСписокЭлементов()", так как использование процедуры "ОбработкаПодбора()" требует наличия реквизита справочника для отбора, а это мне не очень подходит. Вот как я реализовал этот алгоритм (код из модуля формы списка справочника):
Код 1C v 7.x
Функцией "СоответствуетУсловиямФильтра(ЭлементСправочника)" можно задавать любые условия фильтрации списка опираясь на передаваемый ей элемент справочника.
Скорость работы приемлема, но можно попробовать реализовать и через запрос.
Похожие FAQ
Еще в этой же категории
Создание и запись нового элемента справочника 14
НаКлиенте Процедура ПоКнопкеНовыйКонтрагент(Команда) // Вставить содержимое обработчика. Перем НовыйКонтрагент; НовыйКонтрагент = Новый Структура(" Наименование, ПолноеНаименование, ИНН" ); НовыйКонтрагент.Наименование = " РиК ООО" ; НовыйКон Как для Выбора Элемента Справочника Открыть Форму Выбора с нужной Открытой Группой? 8
Порядок действий такой: 1. В поле ввода " Номенклатура" добавь событие ПриНачалеВыбора. 2. Установи в них СтандартнаяОбработка = Ложь; 3. Получи форму выбора нужного справочника 4. Установи отбор по родителю 5. Открой форму для выбора Теп Поиск элемента, найти элемент справочника 5
НаКлиенте Процедура ПоКнопкеНайти(Команда) // Вставить содержимое обработчика. Сообщить(НайтиКонтрагента(" 000000001" )); КонецПроцедуры НаСервере Функция НайтиКонтрагента(КодКонтрагента) Перем КонрагентДляПоиска, СсылкаНайденногоКонрагента Подбор из справочника на основе управляемых форм 2
В данной статье рассматривается технология реализации подбора на платформе 1С 8.2. Статья не претендует на академизм, просто столкнувшись с рядом проблем и не нашедшим «правильной» методологии решения (возможно плохо искал), решил пройти этот путь с Как установить префикс нумерации справочника? 2
УстановитьНовыйКод( ПрефиксКода ) Параметры: ПрефиксКода (необязательный) Тип: Строка. Строковое значение префикса. Если префикс указан, то новый код будет формироваться с учетом префикса. Описание: Устанавливает новый код. Если в коде Посмотреть все в категории Справочники
Создание дополнительного пункта меню в отчете на СКД, который позволяет установить отбор (отфильтровать) колонки отчета в выбранном диапазоне. Программная работа с отборами СКД, переопределение обработки расшифровки, перерисовка элементов пользовательских настроек. Не модальный режим работы.
В данной статье я решил показать пример использования расшифровки отчета СКД, для установки отборов колонки (колонок) отчета в выбранном диапазоне чисел. Для решение задачи пришлось собирать много информации с разных источников, поэтому решил всю информацию объединить в этой статье.
1 Программное добавление дополнительного пункта меню расшифровки
Для добавления дополнительного пункта меню нужно создать форму отчета и переопределить процедуры обработчики табличного документа Результат:
РезультатОбработкаРасшифровки() - нажатие на ячейке отчета правой кнопкой мыши
РезультатОбработкаДополнительнойРасшифровки() - нажатие на ячейке левой кнопкой мыши
Если база создана на основании БСП можно не создавать форму отчета, выполнить доработки через общим модуль ОтчетыКлиентПереопределяемый (не реализовано у меня):
В процедуре ОбработкаРасшифровкиНачало получаем объект расшифровки (значение в ячейке табличного документа) с дополнительными проверкам на пустое значение и на тип Число. После проверки данных объекта расшифровки для Числа переопределяем расшифровку (для других типов нет смысла задавать диапазон, хотя можно и для типа "Дата" реализовать)
2 Программная обработка расшифровки
После того как пользователь выбрал действие расшифровки необходимо определить какой из пунктов меню он выбрал:
- созданный программно пункт меню выбора диапазона - нужно вызвать форму выбора двух чисел;
- пункт Отфильтровать - нужно открыть новый отчет с параметрами фильтра (так реализован стандартный механизм);
- для прочих пунктов меню необходимо вызвать ОтработатьРасшифровку (функционал с сайта ИТС).
3 Программное добавление отборов НастройкиКомпоновкиДанных. Добавление отборов пользовательских насроек. Перерисовка пользовательских настроек
После получения чисел диапазона нужно программно добавить отбор в НастройкиКомпоновкиДанных и ПользовательскиеНастройки, а также перерисовать пользовательськие настройки.
Этот механизм позволяет накладывать отборы на несколько колонок отчета, все они будут работать с условием "И".
Отборы отключаются простым снятием галочек с отборов в пользовательских настройках, а так как пользовательские настройки отображаются сразу на форме, то пользователю не нужно открывать дополнительные окна.
Для меня основными проблемами при создании этого механизма были:
- передача НастроекКомпоновкиДанных в новую форму отчета (решилась через использование параметра формы "Вариант")
- добавление отбора в пользовательские настройки (решилась через временный компоновщик данных)
- перерисовка элементов пользовательских настроек на сервере (ну не знал я что нужно использовать СоздатьЭлементыФормыПользовательскихНастроек и с трудом нашел на форумах, хотя возможно что я просто плохо искал))
В статье использовались материалы из:
Прикрепляю рабочий пример отчета на управляемой форме, платформа 8.3.14. Отчет тянет статические данные, поэтому должен работать на большинстве конфигураций
В отчете задублированы функции общих модулей ОтчетыКлиентСервер, ОбщегоНазначенияКлиентСервер и т.д., а также добавлена форма выбора двух чисел. Основные процедуры и функции полностью выведены в статью.
В «1С:Бухгалтерии 8» ред. 3.0 (версия 3.0.37) появилась новая опция. Она отчасти знакома пользователям редакции 2.0. Это возможность просматривать документы, созданные по определённому контрагенту. О том, как работает эта возможность, читайте в статье экспертов 1С.
Чтобы воспользоваться новой опцией, необходимо в форме элемента справочника Контрагенты выбрать ссылку Документы (рис. 1).
Рис. 1. «Документы» в форме элемента справочника «Контрагенты»
В открывшемся списке будут отражены все документы информационной базы за выбранный период, сформированные по этому контрагенту (рис. 2).
Рис. 2. Документы, отобранные по контрагенту за определенный период
Следует обратить внимание на то, что в форме данного списка есть возможность более жесткого дополнительного отбора – по организации и/или по договору. Поскольку любой договор в базе заключен между собственной организацией и контрагентом, то возможны следующие варианты:
- Отбор только по Контрагенту (включаются документы по всем договорам со всеми организациями, если такие были в базе данных)
- Отбор по Контрагенту и единственной Организации (включаются документы по всем договорам между этим Контрагентом и этой организацией, если таких оговоров было несколько)
- Отбор по Контрагенту и Договору (включаются документы по договору данного Контрагента с той организацией, с которой заключен выбранный договор).
Если необходимо посмотреть документы, созданные по договору, то обратиться по ссылке Документы можно непосредственно из элемента справочника Договоры (рис. 3).
Рис. 3. Отбор документов по выбранному договору
Данный список обладает полной функциональностью списков документов «1С:Бухгалтерии 8» ред. 0, в том числе из него можно просматривать и движение документов, и структуру их подчиненности. Кроме того, непосредственно в списке можно создавать новые документы (по кнопке Создать). А поскольку в данный список попадает большое количество типов документов, то для удобства выбора нужного типа можно позиционировать курсор на нужном типе документа (например, Счете) и нажав кнопку Создать или клавишу Insert, вы получите открытый список типов документов с курсором, установленным на выбранном типе, что значительно облегчает ввод.
В статье будут рассмотрены варианты установки отбора в управляемых формах 1С 8.3. Отбор для динамического списка может быть установлен статически или динамически, в пользовательском интерфейсе или конфигураторе. Все варианты отборов мы рассмотрим ниже.
- Установка отбора в пользовательском режиме
- Установка отбора в конфигураторе
- Фиксированный отбор
- Динамический (программный) отбор
Установка отбора в пользовательском режиме
Динамический список в отличие от таблицы или дерева значений – более подходящее решение для реализации форм содержащих какие-либо списки, т.к. динамический список предоставляет наиболее широкий набор инструментов для работы с отбором, группировкой полей, сортировкой. Данный отбор можно установить при работе в пользовательском режиме или конфигураторе, принцип одинаков.
Для установки отбора в режиме предприятия необходимо вызвать команду «Настроить список».
Рис.1 Настроить список
Рис.2 Окно настройки
На вкладке «отбор» представлен список полей, который есть в текущем списке. Выбираем поля списка, по которым будем фильтровать. Сделать это можно двойным кликом или используя drag and drop.
Рис.3 На вкладке «Отбор»
Задаем вид сравнения и значение, жмем «Завершить редактирование», отбор установлен.
Отбор также можно группировать по логическим условиям «И», «ИЛИ».
Рис.4 Отбор также можно группировать по логическим условиям «И», «ИЛИ»
При установке отбора в режиме предприятия на форме списка автоматически создаются поля так называемых быстрых отборов.
Рис.5 Поля быстрых отборов
Чтобы платформа 1С автоматически создавала поля быстрых отборов, при разработке формы в конфигураторе необходимо указать группу пользовательских настроек.
Рис.6 Группа пользовательских настроек
Данный отбор будет сохранен только для текущего пользователя, что позволяет гибко производить кастомизированные настройки динамического списка. Однако если стоит задача сделать фиксированный отбор для определенного списка для всех пользователей системы, ее мы сможем решить только через конфигуратор.
Установка отбора в конфигураторе
Работая в конфигураторе, мы можем устанавливать отбор динамического списка двух видов – фиксированный и динамический. Фиксированный отбор настраивается один раз, динамический или программный – можно устанавливать в зависимости от каких-либо данных в системе.
Фиксированный отбор
Принцип установки фиксированного отбора в конфигураторе не отличается от установки в пользовательском режиме описанном выше. Чтобы установить отбор, мы должны открыть настройки динамического списка.
Рис.7 Фиксированный отбор
Рис.8 Окно динамического списка
Отбор задается так же, как в пользовательском режиме.
Опция «Включать в пользовательские настройки» определяет, будет ли установленный в конфигураторе отбор доступен в пользовательском режиме через пункт меню «Настроить список».
Рис.9 Настроить список
Динамический (программный) отбор
Зачастую возникает необходимость устанавливать отбор программно, например, при открытии формы выбора, когда нам необходимо открыть управляемую форму с отбором. В форму передается параметр и по этому параметру устанавливается отбор. Частый пример этого – отбор элементов справочника по владельцу.
Методы
Если в разрабатываемой конфигурации присутствует подсистема БСП «БазоваяФункциональность», программный отбор в динамическом списке можно установить используя типовой метод:
Сигнатура данного метода:
ДинамическийСписок Тип: ДинамическийСписок – Список, в котором требуется установить отбор.
ИмяПоля Тип: Строка – Поле, по которому необходимо установить отбор.
ПравоеЗначение Тип: Произвольный – Значение отбора (Необязательный. Значение по умолчанию: Неопределено. Внимание! Если передать Неопределено, то значение не будет изменено).
ВидСравнения Тип: ВидСравненияКомпоновкиДанных – Условие отбора.
Представление Тип: Строка – Представление элемента компоновки данных (Необязательный. Значение по умолчанию: Неопределено. Если указано, то выводится только флажок использования с указанным представлением (значение не выводится). Для очистки, чтобы значение снова выводилось, следует передать пустую строку).
Использование Тип: Булево – Флажок использования этого отбора (Необязательный. Значение по умолчанию: Неопределено).
РежимОтображения Тип: РежимОтображенияЭлементаНастройкиКомпоновкиДанных – Способ отображения этого отбора пользователю. Возможные значения:
- РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ – В группе быстрых настроек над списком.
- РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный – В настройка списка (в подменю Еще).
- РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный – Запретить пользователю менять этот отбор.
ИдентификаторПользовательскойНастройки Тип: Строка – Уникальный идентификатор этого отбора (Используется для связи с пользовательскими настройками).
Для удаления какого-то значения отбора необходимо воспользоваться типовым методом:
Сигнатура данного метода:
ДинамическийСписок Тип: ДинамическийСписок – реквизит формы, для которого требуется установить отбор.
ИмяПоля Тип: Строка – имя поля компоновки (не используется для групп).
Представление Тип: Строка – представление поля компоновки.
В случае отсутствие в системе БСП отбор можно установить самостоятельно, используя объект ПолеКомпоновкиДанных.
Данный отбор отберет строки, в которых значение «ФИО» = «Иванов».
Для использования логических «И», «ИЛИ», «НЕ» предназначен тип данных ГруппаЭлементовОтбораКомпоновкиДанных
Данный отбор отберет строки, в которых значение «ФИО» = «Иванов» или «Петров».
Отбор в динамическом списке также можно производить через изменение текста запроса динамического списка. Этот вариант работает, когда динамический список сделан через «произвольный запрос».
Рис.10 Отбор в динамическом списке
Для этого к тексту запроса добавляем условие «ГДЕ Истина»…
Рис.11 Условие «ГДЕ Истина»
Как видно, такой подход более компактный с точки зрения написания кода. Чем сложнее условия отбора в табличной части мы хотим установить, тем более громоздким будет вариант с использованием отбора через ЭлементОтбораКомпоновкиДанных. Однако у примера с изменением текста запроса есть свои недостатки – эта реализация не устойчива к изменениям кода. Например, вы сделали такую реализацию и забыли, но если в будущем вы захотите модифицировать текст запроса, добавив в него какой-либо оператор после ГДЕ (УПОРЯДОЧИТЬ, СГРУППИРОВАТЬ), вам нужно не забыть про то, что в программном коде есть:
Если этого не учесть будет ошибка, но чтобы этого избежать, можно переделать на другую реализацию. В текс запроса добавляем такое условие:
ГДЕ (НЕ &ОтборУстановлен ИЛИ СправочникПользователи.ФИО В (&РазрешенныеФИО))
Тут ФИО – массив.
Ка видно, 2 строчки кода против 10. Какой из способов выбрать, зависит от конкретной прикладной задачи.
Для установки отбора используется свойство "Отбор" у менеджеров списков объектов, например, для открытия списка договоров определенного контрагента можно написать следующий код:
В данном случае мы применили вид сравнения "Равно", но не указывали его т.к. оно стоит по умолчанию. Используя разные значения вида сравнения мы значительно расширяем возможности.
Например, у нас в базе контрагент является и продавцом и покупателем, при этом договоры находятся в соответствующей группе внутри справочника. Поэтому мы сделаем отбор не только на самого контрагента, но и на группу "Группа Покупатели" в которой находится договор:
Похожие FAQ
Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML" 10
Автоматизация обмена между базами используя обработку " Универсальный обмен данными в формате XML" В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием обработки " Универсальный обме Внешние обработки, печатные формы, обработки по заполнению табличных частей 3
Справочник «Внешние обработки, печатные формы, обработки по заполнению табличных частей» содержит список произвольных обработок, произвольных отчетов, дополнительных печатных форм, обработок для заполнения ТЧ объектов, обработок, подключаемых к отч Восстановление партионного учета в УТ 1
Проблема следующая: при выполнении стандартной обработки " проведение по партиям" , непонятно почему, но граница актуальности партионного учета не сдвигается, хотя при перепроведении документов никаких ошибок не возникает. Оказывается: дата гр Выборка (перебор) бизнес-процессов 0
Выбрать( , , , ) отбора отбора (необязательный) - Структура. Задает реквизит вида расчета и значение этого реквизита, по которому будет создана выборка. Ключ структуры задает имя реквизита, а значение структуры - значение отбора по этому рекви Посмотреть все результаты поиска похожихЧитайте также: