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