Top.Mail.Ru

ТИП, ТИПЗНАЧЕНИЯ и ССЫЛКА в запросах 1С 8 — примеры использования

В запросах довольно распространенная задача — определить, к какому типу относится то или иное значение. Например, нужно в запросе определить тип документа, и если это приходная накладная — взять сумму документа с плюсом, а если расходная — с минусом. В этой статье рассмотрены конструкции языка запросов, позволяющие решить данную задачу.

Содержание

Стоит начать с того, что три конструкции — ТИП, ТИПЗНАЧЕНИЯ и ССЫЛКА — относятся к разным частям языка запросов 1С.

  1. ТИП — это литерал, который позволяет получить в запросе значение нужного типа. В этом случае мы заранее знаем, какой тип хотим получить.
  2. ТИПЗНАЧЕНИЯ — это функция, которая принимает в качестве параметра значение, и возвращает тип этого значения. Используется для определения заранее неизвестного типа значения в запросе.
  3. ССЫЛКА — это логический оператор, такой же как «>», «<«, и используется он при формировании условий.

Примеры использования

Основные способы применения конструкций ТИП и ТИПЗНАЧЕНИЯ в запросе — это сравнение типов в условиях, а также выбор типов в качестве полей в результате выполнения запроса. Оператор Ссылка используется в запросе для определения, является ли значение ссылкой на указанную таблицу, или нет. Например, является ли поле Покупатель ссылкой на справочник Контрагенты или на справочник ФизическиеЛица.
Рассмотрим несколько практических примеров.

Как в запросе проверить на соответствие нужному типу

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

Данные в файле записаны в следующем формате:

Тип и ТипЗначения в запросе 1С
Тип в запросе в 1С пример
Выберем запросом только строки, где в поле Значение содержится дата:
ВЫБРАТЬ
	ДанныеФайла.ИмяФайла КАК ИмяФайла,
	ДанныеФайла.НомерСтрокиФайла КАК НомерСтрокиФайла,
	ДанныеФайла.НомерКолонки КАК НомерКолонки,
	ДанныеФайла.Значение КАК Значение
ИЗ
	РегистрСведений.ДанныеФайла КАК ДанныеФайла
ГДЕ
	ТИПЗНАЧЕНИЯ(ДанныеФайла.Значение) = ТИП(ДАТА)

В результате получим следующее:

Сравнить типЗначения с типом в запросе

Использование условного оператора ССЫЛКА

Оператор Ссылка может служить заменой условия ТИПЗНАЧЕНИЯ(…)  = ТИП(…), но только для ссылочных типов. В результате его выполнения получается значение типа Булево. Оператор ССЫЛКА в запросе можно использовать в конструкции Выбор Когда … Тогда… Конец, в секции условий ГДЕ и Имеющие, а также для выбора в качестве поля запроса.

Предположим, у регистра Продажи есть два регистратора — документ РеализацияТоваров, и документ Возврат. Мы хотим в запросе вывести номер документа и сумму. Если это продажа — то положительную, если возврат — то отрицательную. В запросе используем конструкцию Выбор Когда… Конец.

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

Выбор типа в качестве поля в запросе

Предположим, у регистра Продажи есть два регистратора — документ РеализацияТоваров, и документ ОтчетОРозничныхПродажах. Мы хотим в отчет вывести номер документа и тип этого документа. Запрос будет следующий:

ВЫБРАТЬ
	Продажи.Регистратор.Номер КАК НомерДокумента,
	ТИПЗНАЧЕНИЯ(Продажи.Регистратор) КАК ВидДокумента,
	Продажи.Сумма КАК Сумма
ИЗ
	РегистрНакопления.ПродажиКАК Продажи

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

ВЫБРАТЬ
	ТИП(СТРОКА) КАК ТипСтрока,
	ТИП(ЧИСЛО) КАК ТипЧисло,
	ТИП(ДАТА) КАК ТипДата,
	ТИП(Документ.ПриходТоваров) КАК ТипДокумент

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

Сэкономь часы на дебаге 1C!

Скачай PDF с топ-11 ошибок начинающих разработчиков + файл с примерами кода!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *