1С 8.3 Тип в запросе - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Тип в запросе

Данные > Примеры кода 1С > 1С 8.3 Запросы
Типы в 1С 8.3 это классификация данных по их виду (число, строка, дата, документ, справочник и т.п.). Для управления допустимыми типами значений существует объект "Описание типов". Конструкции в запросах, которые позволяют работать с типами данных: Тип() и ТипЗначения().
  • ТипЗначения(<Выражение>) - функция возвращает тип переданного в неё значения. В условиях запроса функция часто используется вместе с литералом Тип.
  • <Значение> ССЫЛКА <Тип> - конструкции для ссылочных типов, которые могут установить условие на тип.   
Функцию ТипЗначения() рекомендуется использовать вместе с функцией Тип(<Имя типа>), для проверки на соответствие определённому типу значения.
Получить тип в 1С 8.3:
// В литерал ТИП передается имя примитивного типа
// или таблицы ссылочного типа.
// Результатом конструкции будет значение типа Тип
|  ТИП(Строка)
|  ТИП(Число)
|  ТИП(Перечисление.СтавкиНДС)
|  ТИП(Справочник.Номенклатура)
|  ТИП(Документ.ПриобретениеТоваровУслуг)
|  ТИП(ПланСчетов.Хозрасчетный)
|  ТИП(ПланОбмена.Полный)

//Получить тип в полях выборки:
|ВЫБРАТЬ ТИП(Строка), ТИП(Справочник.Номенклатура)

//Получить совпадение типа в выборке:
|Выбрать ТИПЗНАЧЕНИЯ(Ссылка) = ТИП(Справочник.Номенклатура)

//Отбор по типу значения:
|ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ ТИПЗНАЧЕНИЯ(СтранаВвоза) = ТИП(Справочник.Страны)

//Использование конструкции ССЫЛКА:
|ВЫБРАТЬ Артикул ИЗ Справочник.Номенклатура ГДЕ СтранаВвоза ССЫЛКА Справочник.Страны

//Последние две конструкции идентичны по результату,
//но последняя применима только к ссылочным типам, что не всегда так, но более компактна
//Можно использовать данные конструкции и в качестве условия для соединения таблиц

//На тип значения можно проверять не только поля из выборки запроса, но и параметры:
|ВЫБРАТЬ * из Справочник.Номенклатура ГДЕ ТИПЗНАЧЕНИЯ(&Параметр) = ТИП(Справочник.Номенклатура)

//Параметром функции ТИПЗНАЧЕНИЯ могут выступать:
//СТРОКА, ЧИСЛО, ДАТА, а также все ссылочные типы.
Использование функции ТипЗначения() в запросе в 1С 8.3:
&НаСервере
Процедура Результат_запроса_типа_Регистратор()

  // Использование функции ТИПЗНАЧЕНИЯ:
   Запрос = Новый Запрос("ВЫБРАТЬ
  |  Продажи.Регистратор КАК Регистратор,
  |  ТИПЗНАЧЕНИЯ(Продажи.Регистратор) КАК ТипРегистратор
  |ИЗ
  |  РегистрНакопления.Продажи КАК Продажи");

   // Использование функции ТИПЗНАЧЕНИЯ в операции сравнения:
   Запрос = Новый Запрос("ВЫБРАТЬ
  |  Продажи.Регистратор КАК Регистратор,
  |ИЗ
  |  РегистрНакопления.Продажи КАК Продажи
  |ГДЕ
  |  ТИПЗНАЧЕНИЯ(Продажи.Регистратор) = ТИП(Документ.ОтгрузкаТоваров)");

   РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
   Пока Записи.Следующий() Цикл
       // Обход результата запроса по каждой записи в полученной выборке
   КонецЦикла;

КонецПроцедуры

Использование ТипЗначения() в запросе с условием в 1С 8.3:
&НаСервере
Процедура Результат_запроса_с_условием()

  // Сотрудникам предприятия предоставляется скидка 20%
   Запрос = Новый Запрос("ВЫБРАТЬ
   |  ОтгрузкаТоваров.Ссылка КАК Ссылка,
   |  ОтгрузкаТоваров.Контрагент КАК Контрагент,
   |  ОтгрузкаТоваров.СуммаСНДС КАК СуммаСНДС,
   |  ВЫБОР
   |  КОГДА ТИПЗНАЧЕНИЯ(ОтгрузкаТоваров.Контрагент) = ТИП(Справочник.Сотрудники)
   |  ТОГДА ОтгрузкаТоваров.СуммаСНДС - ОтгрузкаТоваров.СуммаСНДС * 0.2
   |  ИНАЧЕ ОтгрузкаТоваров.СуммаСНДС
   |  КОНЕЦ КАК СуммаСоСкидкой
   |  ИЗ
   |  Документ.ОтгрузкаТоваров КАК ОтгрузкаТоваров");

   РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
   Пока Записи.Следующий() Цикл
       // Обход результата запроса по каждой записи в полученной выборке
   КонецЦикла;

КонецПроцедуры

Литерал Тип() в запросе в 1С 8.3:
&НаСервере
Процедура Литерал_ТИП_в_Запросе()

   // У каждого столбца в таблице есть своё соответствующее имя
   Запрос = Новый Запрос("ВЫБРАТЬ
                                        |  Продажи.Регистратор КАК Регистратор,
                                        |ВЫБОР
                                        |  КОГДА ТИПЗНАЧЕНИЯ(Продажи.Регистратор) = ТИП(Документ.ОтгрузкаТоваров)
                                        |  ТОГДА "Накладная"
                                        |  ИНАЧЕ "Прочее (оказание услуг)"
                                        |  КОНЕЦ КАК ТипИсточника
                                        |ИЗ
                                        |  РегистрНакопления.Продажи КАК Продажи");

   РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
   Пока Записи.Следующий() Цикл
       // Обход результата запроса по каждой записи в полученной выборке
   КонецЦикла;

КонецПроцедуры

Оператор Ссылка в запросе в 1С 8.3:
&НаСервере
Процедура Оператор_ССЫЛКА_в_Запросе()

   // Оператор ССЫЛКА проверяет, является ли значение выражения,
   // указанного справа от него, ссылкой на таблицу, указанную слева.
   Запрос = Новый Запрос("ВЫБРАТЬ
  |  Продажи.Регистратор КАК Регистратор,
  |ИЗ
  |  РегистрНакопления.Продажи КАК Продажи
  |ГДЕ
  |  Закупки.Регистратор ССЫЛКА Документ.ОтгрузкаТоваров");
   // Результат оператора это значение типа Булево

   // Для ссылочных таблиц оператор ССЫЛКА является эквивалентом сравнения
   // ТИПЗНАЧЕНИЯ() = ТИП()

   РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
   Пока Записи.Следующий() Цикл
       // Обход результата запроса по каждой записи в полученной выборке
   КонецЦикла;

КонецПроцедуры

0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 15.06.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому