Как в 1с сделать отбор по контрагенту и номенклатуре
Расширение языка запросов для системы компоновки данных осуществляется при помощи специальных синтаксических инструкций, заключаемых в фигурные скобки и помещаемых непосредственно в текст запроса.
Синтаксические элементы расширения языка запросов системы компоновки данных
ВЫБРАТЬ
В этом предложении описываются поля, которые пользователь сможет выбирать для вывода. После данного ключевого слова через запятую перечисляются псевдонимы полей из основного списка выборки запроса, которые будут доступными для настройки.
После псевдонима поля может находиться комбинация символов «.*», что обозначает возможность использования дочерних полей от данного поля.
Например, запись Номенклатура.* обозначает возможность использования дочерних полей поля «Номенклатура» (например, поля «Номенклатура.Код»). Элемент ВЫБРАТЬ может присутствовать только в первом запросе объединения.
Описываются поля, на которые пользователь сможет накладывать отбор. В данном предложении используются поля таблиц. Использование псевдонимов полей списка выборки недопустимо. Каждая часть объединения может содержать собственный элемент ГДЕ.
Нехитрый пример
Необходимо получить продажи за период + вывести всю номенклатуру, независимо от того были ли продажи или нет. То есть, необходимо выбрать данные из таблицы оборотов регистра Продажи, данные из справочника номенклатура. Опустим вопрос зачем нам нужна вся номенклатура.
Для решения задачи можно составить запрос соединяющий левым соединением номенклатуру и таблицу оборотов Продажи, в результате, для номенклатуры, которая не продавалась в выбранном периоде мы получим значения полей Контрагент, Договор, Количество, Сумма = Null. Такой запрос:
Вот результат:
Контрагент | Договор | Номенклатура | Количество | Сумма |
null | null | _Тест1 | null | null |
ООО "Рога и копыта" | Договор1 | Тапочки | 10 | 1200 |
ОАО "Газпром" | Клевый договор | Сапоги | 5 | 13000 |
null | null | Галоши | null | null |
null | null | Сланцы | null | null |
- в данном примере не было продаж номенклатуры: "Галоши" и "Сланцы"
И все бы ничего, если мы сгруппируем выборку по контрагенту то вся не продаваемая номенклатура попадет в отдельную группировку, где Контрагент = Null, но клиент хочет иметь в отчете произвольный отбор по полю контрагент(естественно имеется ввиду контрагент из регистра Продажи). Как быть? Ведь по сути нам нужно фильтровать только таблицу Продажи. Если мы используем автозаполнение в конструкторе СКД, то в доступные поля отбора попадет поле Контрагент, все вроде бы хорошо, но при исполнении отчета с отбором по контрагенту мы потеряем все записи из соединения с номенклатурой. Например, установим отбор: Контрагент = ООО "Рога и копыта". Результат будет выглядеть так:
Контрагент | Договор | Номенклатура | Количество | Сумма |
ООО "Рога и копыта" | Договор1 | Тапочки | 10 | 1200 |
- совсем не то что нам нужно, правда?
Для решения задачи можно конечно добавить параметр в запрос, например в параметры виртуальной таблицы ПродажиОбороты, но при этом теряется гибкость настройки вида сравнения.
Решение есть: для этого в конструкторе запросов на вкладке Компоновка данных => Таблицы добавим поле-условие в условия виртуальной таблицы ПродажиОбороты и сменим ему псевдоним на КонтрагентОтбор
Для того чтобы не путать пользователя с полями отбора, отключим поле-условие Контрагент и сменим заголовок для поля КонтрагентОтбор
В результате выполнения данной схемы с включенным отбором по полю контрагент результирующий запрос примет вид:
И соответственно результат:
Контрагент | Договор | Номенклатура | Количество | Сумма |
null | null | _Тест1 | null | null |
ООО "Рога и копыта" | Договор1 | Тапочки | 10 | 1200 |
null | null | Сапоги | null | null |
null | null | Галоши | null | null |
null | null | Сланцы | null | null |
_Тест1 - это группа в справочнике Номенклатура, в которой все лежит
К публикации прикреплена схема XML-схема отчета, использовавшегося в публикации. Схему создавал в Комплексной автоматизации, но думаю, все будет прекрасно работать и в УПП и в УТ 10
Подведение итогов
Данный пример показывает каким образом создать свои настройки отборов в СКД и отключить автосоздаваемые, если вы конструируете схему с включенным флагом Автозаполнение.
Если же вы имеете достаточно опыта, чтобы создавать схемы без использования Автозаполнения - то данный совет не имеет смысла.
Начиная с версии 3.0.37, которая вышла 19 ноября 2014 года в программе 1С Бухгалтерия 8 ред. 3.0 появилась возможность делать отбор документов по контрагенту и договору.
Я уже немного рассказывала про эту полезную функцию в статье «Новая версия 1с Бухгалтерия 8: обзор изменений» однако сегодня хотелось бы поговорить про нее более подробно.
Сначала сделаем отбор документов по контрагенту. Для этого открываем справочник «Контрагенты» на закладке «Покупки и продажи», раздел «Справочники и настройки» и выбираем контрагента, по которому мы хотим посмотреть документы.
Слева, в открытой карточке контрагента появилась синяя гиперссылка «Документы», перейдя по которой мы попадаем в список документов по данному контрагенту.
В открывшемся перечне документов можно установить флажок «Договор» и выбрать из списка договоров. В этом случае программа отсортирует документы по конкретному договору.
Если вы используете 1С Бухгалтерия 8 версия ПРОФ и ведете в одной базе учет по нескольким организациям, документы также можно отсортировать по организациям.
Таким образом, можно осуществлять отбор документов только по отдельному контрагенту, в этом случае в список попадут все документы с данным контрагентом по всем договорам (если их несколько) и по всем организациям (если в одной базе ведется учет по нескольким организациям).
Еще один вариант отбора – отбор по контрагенту и организации, позволяет отобрать те документы, которые относятся только к одной организации (при использовании версии ПРОФ и ведении учета по нескольким организациям в одной базе).
И отбор документов можно сделать по контрагенту и договору. В этом случае в список попадут документы по отдельному контрагенту и отдельному договору с ним.
Такой же отбор документов можно осуществлять через справочник «Договоры». Для этого необходимо открыть нужный договор и также нажать на синюю гиперссылку «Документы».
Список документов, который открывается через справочник «Контрагенты» или справочник «Договоры», дает возможность, как и обычный список документов, посмотреть их движение и структуру подчиненности. Также в списке можно создавать новые документы.
Так можно сделать отбор документов по контрагенту и договору в 1С Бухгалтерия 8 ред. 3.0. А вы уже используете эту функцию? Поделитесь, пожалуйста, в комментариях.
Отбор документов по контрагенту и договору – это не единственная новая функция в программе. Про новшества в учете зарплаты смотрите здесь, про шаблоны договоров тут, про напоминание о платеже здесь.
Читайте также: