1С 8.3 Тип в запросе
Данные > Примеры кода 1С > 1С 8.3 Запросы
Типы в 1С 8.3 это классификация данных по их виду (число, строка, дата, документ, справочник и т.п.). Для управления допустимыми типами значений существует объект "Описание типов". Конструкции в запросах, которые позволяют работать с типами данных: Тип() и ТипЗначения().
- ТипЗначения(<Выражение>) - функция возвращает тип переданного в неё значения. В условиях запроса функция часто используется вместе с литералом Тип.
- <Значение> ССЫЛКА <Тип> - конструкции для ссылочных типов, которые могут установить условие на тип.
Функцию ТипЗначения() рекомендуется использовать вместе с функцией Тип(<Имя типа>), для проверки на соответствие определённому типу значения.
Оглавление:
Получить тип в 1С 8.3:
// В литерал ТИП передается имя примитивного типа
// или таблицы ссылочного типа.
// Результатом конструкции будет значение типа Тип
| ТИП(Строка)
| ТИП(Число)
| ТИП(Перечисление.СтавкиНДС)
| ТИП(Справочник.Номенклатура)
| ТИП(Документ.ПриобретениеТоваровУслуг)
| ТИП(ПланСчетов.Хозрасчетный)
| ТИП(ПланОбмена.Полный)
//Получить тип в полях выборки:
|ВЫБРАТЬ ТИП(Строка), ТИП(Справочник.Номенклатура)
//Получить совпадение типа в выборке:
|Выбрать ТИПЗНАЧЕНИЯ(Ссылка) = ТИП(Справочник.Номенклатура)
//Отбор по типу значения:
|ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ ТИПЗНАЧЕНИЯ(СтранаВвоза) = ТИП(Справочник.Страны)
//Использование конструкции ССЫЛКА:
|ВЫБРАТЬ Артикул ИЗ Справочник.Номенклатура ГДЕ СтранаВвоза ССЫЛКА Справочник.Страны
//Последние две конструкции идентичны по результату,
//но последняя применима только к ссылочным типам, что не всегда так, но более компактна
//Можно использовать данные конструкции и в качестве условия для соединения таблиц
//На тип значения можно проверять не только поля из выборки запроса, но и параметры:
|ВЫБРАТЬ * из Справочник.Номенклатура ГДЕ ТИПЗНАЧЕНИЯ(&Параметр) = ТИП(Справочник.Номенклатура)
//Параметром функции ТИПЗНАЧЕНИЯ могут выступать:
//СТРОКА, ЧИСЛО, ДАТА, а также все ссылочные типы.
|ВЫБРАТЬ ТИП(Строка), ТИП(Справочник.Номенклатура)
//Получить совпадение типа в выборке:
|Выбрать ТИПЗНАЧЕНИЯ(Ссылка) = ТИП(Справочник.Номенклатура)
//Отбор по типу значения:
|ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ ТИПЗНАЧЕНИЯ(СтранаВвоза) = ТИП(Справочник.Страны)
//Использование конструкции ССЫЛКА:
|ВЫБРАТЬ Артикул ИЗ Справочник.Номенклатура ГДЕ СтранаВвоза ССЫЛКА Справочник.Страны
//Последние две конструкции идентичны по результату,
//но последняя применима только к ссылочным типам, что не всегда так, но более компактна
//Можно использовать данные конструкции и в качестве условия для соединения таблиц
//На тип значения можно проверять не только поля из выборки запроса, но и параметры:
|ВЫБРАТЬ * из Справочник.Номенклатура ГДЕ ТИПЗНАЧЕНИЯ(&Параметр) = ТИП(Справочник.Номенклатура)
//Параметром функции ТИПЗНАЧЕНИЯ могут выступать:
//СТРОКА, ЧИСЛО, ДАТА, а также все ссылочные типы.
Использование функции ТипЗначения() в запросе в 1С 8.3:
&НаСервере
Процедура Результат_запроса_типа_Регистратор()
| Продажи.Регистратор КАК Регистратор,
| ТИПЗНАЧЕНИЯ(Продажи.Регистратор) КАК ТипРегистратор
|ИЗ
| РегистрНакопления.Продажи КАК Продажи");
// Использование функции ТИПЗНАЧЕНИЯ в операции сравнения:
Запрос = Новый Запрос("ВЫБРАТЬ
| Продажи.Регистратор КАК Регистратор,
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| ТИПЗНАЧЕНИЯ(Продажи.Регистратор) = ТИП(Документ.ОтгрузкаТоваров)");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура Результат_запроса_типа_Регистратор()
// Использование функции ТИПЗНАЧЕНИЯ:
Запрос = Новый Запрос("ВЫБРАТЬ | Продажи.Регистратор КАК Регистратор,
| ТИПЗНАЧЕНИЯ(Продажи.Регистратор) КАК ТипРегистратор
|ИЗ
| РегистрНакопления.Продажи КАК Продажи");
// Использование функции ТИПЗНАЧЕНИЯ в операции сравнения:
Запрос = Новый Запрос("ВЫБРАТЬ
| Продажи.Регистратор КАК Регистратор,
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| ТИПЗНАЧЕНИЯ(Продажи.Регистратор) = ТИП(Документ.ОтгрузкаТоваров)");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Использование ТипЗначения() в запросе с условием в 1С 8.3:
&НаСервере
Процедура Результат_запроса_с_условием()
| ОтгрузкаТоваров.Ссылка КАК Ссылка,
| ОтгрузкаТоваров.Контрагент КАК Контрагент,
| ОтгрузкаТоваров.СуммаСНДС КАК СуммаСНДС,
| ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(ОтгрузкаТоваров.Контрагент) = ТИП(Справочник.Сотрудники)
| ТОГДА ОтгрузкаТоваров.СуммаСНДС - ОтгрузкаТоваров.СуммаСНДС * 0.2
| ИНАЧЕ ОтгрузкаТоваров.СуммаСНДС
| КОНЕЦ КАК СуммаСоСкидкой
| ИЗ
| Документ.ОтгрузкаТоваров КАК ОтгрузкаТоваров");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура Результат_запроса_с_условием()
// Сотрудникам предприятия предоставляется скидка 20%
Запрос = Новый Запрос("ВЫБРАТЬ | ОтгрузкаТоваров.Ссылка КАК Ссылка,
| ОтгрузкаТоваров.Контрагент КАК Контрагент,
| ОтгрузкаТоваров.СуммаСНДС КАК СуммаСНДС,
| ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(ОтгрузкаТоваров.Контрагент) = ТИП(Справочник.Сотрудники)
| ТОГДА ОтгрузкаТоваров.СуммаСНДС - ОтгрузкаТоваров.СуммаСНДС * 0.2
| ИНАЧЕ ОтгрузкаТоваров.СуммаСНДС
| КОНЕЦ КАК СуммаСоСкидкой
| ИЗ
| Документ.ОтгрузкаТоваров КАК ОтгрузкаТоваров");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Литерал Тип() в запросе в 1С 8.3:
&НаСервере
Процедура Литерал_ТИП_в_Запросе()
// У каждого столбца в таблице есть своё соответствующее имя
Запрос = Новый Запрос("ВЫБРАТЬ
| Продажи.Регистратор КАК Регистратор,
|ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(Продажи.Регистратор) = ТИП(Документ.ОтгрузкаТоваров)
| ТОГДА "Накладная"
| ИНАЧЕ "Прочее (оказание услуг)"
| КОНЕЦ КАК ТипИсточника
|ИЗ
| РегистрНакопления.Продажи КАК Продажи");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура Литерал_ТИП_в_Запросе()
// У каждого столбца в таблице есть своё соответствующее имя
Запрос = Новый Запрос("ВЫБРАТЬ
| Продажи.Регистратор КАК Регистратор,
|ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(Продажи.Регистратор) = ТИП(Документ.ОтгрузкаТоваров)
| ТОГДА "Накладная"
| ИНАЧЕ "Прочее (оказание услуг)"
| КОНЕЦ КАК ТипИсточника
|ИЗ
| РегистрНакопления.Продажи КАК Продажи");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Оператор Ссылка в запросе в 1С 8.3:
&НаСервере
Процедура Оператор_ССЫЛКА_в_Запросе()
// Оператор ССЫЛКА проверяет, является ли значение выражения,
// указанного справа от него, ссылкой на таблицу, указанную слева.
Запрос = Новый Запрос("ВЫБРАТЬ
| Продажи.Регистратор КАК Регистратор,
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Закупки.Регистратор ССЫЛКА Документ.ОтгрузкаТоваров");
// Результат оператора это значение типа Булево
// Для ссылочных таблиц оператор ССЫЛКА является эквивалентом сравнения
// ТИПЗНАЧЕНИЯ() = ТИП()
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура Оператор_ССЫЛКА_в_Запросе()
// Оператор ССЫЛКА проверяет, является ли значение выражения,
// указанного справа от него, ссылкой на таблицу, указанную слева.
Запрос = Новый Запрос("ВЫБРАТЬ
| Продажи.Регистратор КАК Регистратор,
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Закупки.Регистратор ССЫЛКА Документ.ОтгрузкаТоваров");
// Результат оператора это значение типа Булево
// Для ссылочных таблиц оператор ССЫЛКА является эквивалентом сравнения
// ТИПЗНАЧЕНИЯ() = ТИП()
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Запросы:
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник