Как задать тип документа в запросе 1С: полезные советы для бухгалтеров

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

1. Почему важно уметь задавать тип документа в запросе 1С

Задание типа документа в запросе 1С может потребоваться в различных ситуациях.

  • Анализ документов определенного вида, например только реализаций или только поступлений товаров
  • Расчет итоговых сумм отдельно по приходным и расходным документам
  • Отбор документов для дальнейшей обработки в программном модуле

Если не задавать тип документа в запросе, то в выборку могут попасть совершенно разные документы. А это осложняет дальнейшую работу - приходится проводить дополнительную сортировку и фильтрацию уже после выборки.

Возможность задания типа документа в запросе позволяет:

  • Получать из базы данных только необходимые документы
  • Оптимизировать работу запросов и избежать лишней нагрузки на СУБД
  • Автоматизировать отбор документов для отчетов и обработок

2. Как задать тип с помощью оператора ТИП

Один из способов задания типа документа в запросе - использование оператора ТИП. Синтаксис:

ТИП(имя_типа)

Где в качестве имя_типа можно указать либо имя примитивного типа данных (Строка, Число, Булево, Дата), либо имя типа таблицы в формате Документ.НазваниеДокумента или Справочник.НазваниеСправочника.

Например, чтобы получить в запросе только документы «Реализация товаров и услуг», можно написать так:

ВЫБРАТЬ * ИЗ Документ.РеализацияТоваровУслуг КАК Реализация ГДЕ Реализация.Дата МЕЖДУ Датой("1.1.2023") И Датой("1.2.2023") И ТИПЗНАЧЕНИЯ(Реализация) = ТИП(Документ.РеализацияТоваровУслуг)

Здесь в условии отбора мы проверяем, что тип значения поля Реализация (то есть самого документа) совпадает с типом документа РеализацияТоваровУслуг.

3. Оператор ВЫБОР

Другой распространенный способ задания типа - оператор ВЫБОР. Он позволяет выбрать объекты одного из указанных типов.

Синтаксис:

ВЫБОР КОГДА ТипЗначения = Тип(НазваниеТипа1) ТОГДА Объект1 КОГДА ТипЗначения = Тип(НазваниеТипа2) ТОГДА Объект2 // другие варианты КОНЕЦ

Например, чтобы получить в одном запросе отдельно приходные и расходные документы, можно сделать так:

ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(Док) = ТИП(Документ.ПоступлениеТоваровУслуг) ТОГДА Поступление КОГДА ТИПЗНАЧЕНИЯ(Док) = ТИП(Документ.РеализацияТоваровУслуг) ТОГДА Реализация ИЗ Документ.ПоступлениеТоваровУслуг КАК Поступление ОБЪЕДИНИТЬ ВСЕ Документ.РеализацияТоваровУслуг КАК Реализация ;

Таким образом в рамках одного запроса мы выбираем сразу два типа документов, не объединяя их в одну выборку.

Женщина-программист пишет код запроса в 1С с оператором ТИП для отбора документов

4. Использование функции ТИПЗНАЧЕНИЯ

Функция ТИПЗНАЧЕНИЯ возвращает тип значения, переданного в нее как параметр. Синтаксис:

ТИПЗНАЧЕНИЯ(Значение)

Эту функцию также можно использовать для задания типа документа в запросе, как показано в одном из предыдущих примеров. Повторим его еще раз:

ВЫБРАТЬ * ИЗ Документ.РеализацияТоваровУслуг КАК Реализация ГДЕ Реализация.Дата МЕЖДУ Датой("1.1.2023") И Датой("1.2.2023") И ТИПЗНАЧЕНИЯ(Реализация) = ТИП(Документ.РеализацияТоваровУслуг)

Здесь в условии ГДЕ мы проверяем тип выбранного документа с помощью функций ТИПЗНАЧЕНИЯ и ТИП.

5. Задание типа документа через оператор ССЫЛКА

Еще один распространенный вариант - это использование оператора ССЫЛКА. Он проверяет, ссылается ли значение слева на тип справа.

Синтаксис:

Значение ССЫЛКА Тип

Например:

ВЫБРАТЬ * ИЗ Документ.РасходТоваров КАК Расход ГДЕ Расход ССЫЛКА Документ.РасходТоваров

Здесь мы отберем только документы РасходТоваров, проверив, что реквизит Расход является ссылкой на этот документ.

Два смартфона на столе показывают документы 1С разных типов - товарную накладную и счет на оплату.

6. Достоинства и недостатки

Итак, мы рассмотрели несколько способов задания типа документа в запросе на языке 1С:

  • Оператор ТИП
  • Оператор ВЫБОР
  • Функция ТИПЗНАЧЕНИЯ
  • Оператор ССЫЛКА

У каждого из вариантов есть свои достоинства и недостатки. Например, ТИП и ВЫБОР позволяют относительно просто отобрать объекты нужного типа. Но при этом они не убирают лишние неявные соединения, которые могут снизить быстродействие.

Оператор же ССЫЛКА и функция ТИПЗНАЧЕНИЯ лишены этого недостатка. Но зато их синтаксис чуть сложнее.

Поэтому при выборе способа задания типа в запросе я бы рекомендовал учитывать также и особенности решаемой задачи.

  • Если критична скорость работы, лучше отдать предпочтение ТИПЗНАЧЕНИЯ и ССЫЛКА
  • Если же скорость не принципиальна, а важнее наглядность и простота кода, можно использовать ВЫБОР и ТИП

7. Примеры практических задач по заданию типа документа

Давайте рассмотрим несколько практических кейсов, где может потребоваться задание типа документа в запросе 1С.

Анализ продаж определенного вида товара

Пусть нам нужно проанализировать продажи товаров отдельно по каждой товарной группе. Для этого мы можем воспользоваться документом "РеализацияТоваровУслуг" и задать его тип в запросе:

ВЫБРАТЬ Товары.ТоварнаяГруппа КАК ТоварнаяГруппа, СУММА(РеализацияТоваров.Количество * РеализацияТоваров.ЦенаЗаЕдиницу) КАК СуммаПродаж ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваров ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товары ПО РеализацияТоваров.Номенклатура = Товары.Ссылка ГДЕ РеализацияТоваров.Ссылка ССЫЛКА Документ.РеализацияТоваровУслуг

Здесь мы выбираем суммы продаж по каждой товарной группе на основании документов реализации. А через оператор ССЫЛКА задаем необходимый нам тип этих документов.

Расчет средних сумм по разным документам

Предположим, нам нужно посчитать средние суммы документов "Поступление товаров" и "Возврат товаров поставщику". Для этого мы можем объединить документы в запросе и задать тип каждого через функцию ТИПЗНАЧЕНИЯ:

ВЫБРАТЬ ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(Док) = ТИП(Документ.ПоступлениеТоваров) ТОГДА СРЕДНЕЕ(Поступление.СуммаДокумента) КОГДА ТИПЗНАЧЕНИЯ(Док) = ТИП(Документ.ВозвратТоваровПоставщику) ТОГДА СРЕДНЕЕ(Возврат.СуммаДокумента) КОНЕЦ КАК СредняяСумма ИЗ Документ.ПоступлениеТоваров КАК Поступление ОБЪЕДИНИТЬ ВСЕ Документ.ВозвратТоваровПоставщику КАК Возврат ;

Таким образом мы в рамках одного запроса сможем посчитать средние суммы для разных документов, задав их тип явно через функцию ТИПЗНАЧЕНИЯ.

Формирование печатных форм на основании типа документа

Еще один распространенный пример - автоматическое формирование печатных форм для различных документов. В обработке "Печать" можно реализовать такой механизм:

  1. Запросить у пользователя выбор типа документа
  2. Сформировать динамически запрос с фильтрацией по этому типу через оператор ТИП или ССЫЛКА
  3. Вызвать печатную форму, соответствующую типу документа

Такое решение позволяет гибко настроить печать различных документов в рамках одной обработки без лишнего дублирования кода.

8. Отбор по нескольким типам в рамках одного запроса

Иногда требуется получить в одном запросе сразу несколько типов документов. Конечно, это можно реализовать через конструкцию ОБЪЕДИНИТЬ ВСЕ. Но есть и еще один эффективный прием - использование нескольких операторов ВЫБОР подряд.

Например, чтобы выбрать в одном запросе документы "Реализация" и "Поступление", не объединяя их данные, можно сделать так:

ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(Док) = ТИП(Документ.РеализацияТоваровУслуг) ТОГДА Реализация КОНЕЦ КАК Реализация ОБЪЕДИНИТЬ ВСЕ ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(Док) = ТИП(Документ.ПоступлениеТоваровУслуг) ТОГДА Поступление КОНЕЦ КАК Поступление ИЗ Документ.РеализацияТоваровУслуг КАК Реализация ОБЪЕДИНИТЬ ВСЕ Документ.ПоступлениеТоваровУслуг КАК Поступление

Такой подход может быть полезен, когда нужно обработать сразу несколько типов документов в рамках одной задачи.

Статья закончилась. Вопросы остались?
Комментарии 0
Подписаться
Я хочу получать
Правила публикации
Редактирование комментария возможно в течении пяти минут после его создания, либо до момента появления ответа на данный комментарий.