- 1с запрос определить тип документа
- Функция ТИПЗНАЧЕНИЯ
- Литерал ТИП
- Оператор ССЫЛКА
- 1 комментарий
- ТИПЗНАЧЕНИЯ, ССЫЛКА, ТИП в запросах 1С 8.3 на примерах
- Несколько примеров
- Пример №1 — Получаем тип поля в результате запроса
- Пример №2 — Отбор с помощью функций ССЫЛКА и ТИП(…)
- Пример №3 — Использование в конструкции ВЫБОР … КОГДА … КОНЕЦ
- 1С 8.3 Тип в запросе — Программист 1С Минск. Автоматизация бизнеса.
- 1С 8.3 Тип в запросе
- Работа с типами в запросах
- Функция ТИПЗНАЧЕНИЯ
- Литерал ТИП
- Оператор ССЫЛКА
- 3 комментария
- Как проверить тип значения в запросе
1с запрос определить тип документа
Во-первых, во встроенном языке 1С:Предприятия 8 для работы с одним прикладным объектом реализовано несколько типов. Например, задачи, которые в 1С:Предприятии 7.7 решал тип «Документ» решаются теперь несколькими типами. Они разделены по своему назначению. Тип «ДокументСсылка» используется для хранения ссылок на объект базы данных в реквизитах других объектов. Тип «ДокументОбъект» используется для записи и удаления отдельных документов. Тип «ДокументВыборка» используется для перебора документов, хранящихся в базе данных. Существуют и другие типы данных, предназначенные для работы с документом. При написании модулей используются те типы, которые необходимы для решения конкретных задач.
Во-вторых, в 1С:Предприятии 8 нет двух понятий — «Тип» и «Вид». Для каждого объекта метаданных имеется свой набор типов используемых во встроенном языке для работы с описываемым им прикладным объектом. То есть при использовании конфигурации не будет существовать такого типа как «ДокументСсылка», а будут существовать конкретные типы, например, «ДокументСсылка.Счет», «ДокументОбъект.Счет», «ДокументСсылка.Накладная», и т.д.
Кроме того, в 1С:Предприятии 8 для манипулирования типами используются не их строковые наименования, а специальный тип «Тип». Значение типа Тип может быть получено функцией Тип(), получающей в качестве параметра имя типа.
Чтобы проверить тип значения переменной нужно определить ее тип функцией ТипЗнч() и использовать функцию Тип() для получения типа по имени.
Если ТипЗнч(Основание) = Тип(«ДокументСсылка.ПриходнаяНакладная») Тогда
Для проверки типа поля в запросе 1С 8.3 можно воспользоваться функцией языка запросов ТИПЗНАЧЕНИЯ( ).
Функция ТИП( ) получает тип по его имени. Имена примитивных типов: Число, Строка, Булево, Дата. Имена ссылочных типов строятся по следующему принципу: Документ.РеализацияТоворовУслуг или Справочник.Номенклатура.
Для полей ссылочного типа существует еще один способ проверки, используя оператор ССЫЛКА.
Значения типа Тип в запросах 1С могут использоваться при наложении условий, в сравнениях, упорядочивании и группировках. Для работы с типами предусмотрено несколько механизмов, которые покрывают все потребности разработчика. Рассмотрим их.
Функция ТИПЗНАЧЕНИЯ
Функция ТИПЗНАЧЕНИЯ имеет единственный параметр, куда передается значение, для которого требуется определить тип. Функция возвращает значения типа Тип. Чаще всего функция используется совместно с литералом ТИП в условиях запроса.
Рассмотрим примеры использования. Вывод в результат запроса типа Регистратора:
Закупки.Регистратор КАК Регистратор ,
ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) КАК ТипРегистратора
РегистрНакопления.Закупки КАК Закупки
Использование функции ТИПЗНАЧЕНИЯ в операции сравнения:
Закупки.Регистратор КАК Регистратор
РегистрНакопления.Закупки КАК Закупки
ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) = ТИП( Документ.ПриобретениеТоваровУслуг )
Литерал ТИП
В литерал ТИП передается имя примитивного типа или таблицы ссылочного типа. Результатом конструкции будет значение типа Тип.
Примеры имен типов:
ТИП(Строка)
ТИП(Число)
ТИП( Перечисление.СтавкиНДС )
ТИП( Справочник.Номенклатура )
ТИП( Документ.ПриобретениеТоваровУслуг )
ТИП( ПланСчетов.Хозрасчетный )
ТИП( ПланОбмена.Полный )
Использование в запросе:
Закупки.Регистратор КАК Регистратор ,
КОГДА ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) = ТИП( Документ.ПриобретениеТоваровУслуг )
ТОГДА «Приобретение товаров»
КОНЕЦ КАК ТипИсточника
РегистрНакопления.Закупки КАК Закупки
Оператор ССЫЛКА
Оператор позволяет проверить, является ли значение выражения, указанного справа от него, ссылкой на таблицу, указанную слева. Результат оператора — значение типа Булево.
Закупки.Регистратор КАК Регистратор
РегистрНакопления.Закупки КАК Закупки
Закупки.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
Для ссылочных таблиц оператор ССЫЛКА является эквивалентом сравнения
Остались вопросы?
Спросите в комментариях к статье.
1 комментарий
Скажите, пжст, для оптимальной производительности что лучше использовать:
ТипЗначения() ИЛИ «Регистартор Ссылка Документ…»?
Источник
ТИПЗНАЧЕНИЯ, ССЫЛКА, ТИП в запросах 1С 8.3 на примерах
В запросах 1С 8.3 существует две конструкции, которые позволяют работать с типами данных:
- ТИПЗНАЧЕНИЯ( ) — Название данной функции говорит само за себя, то есть она возвращает тип переданного в неё значения.
- ССЫЛКА И ТИП — специальные конструкции, которые могут поставить условие на тип.
Несколько примеров
Предположим, что в нашей конфигурации существует документ «ПродажаТоваров».
Состав реквизитов следующий:
То есть покупки у нас может совершать, как сотрудник, так и сторонний покупатель.
Пример №1 — Получаем тип поля в результате запроса
Сделаем запрос к документу «ПродажаТоваров», в котором выберем все документы продажи где можно будет увидеть наименование покупателя, а с помощью функции ТИПЗНАЧЕНИЯ() в отдельной колонке определим тип покупателя.
ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК ДокументПродажи,
ПродажаТоваров.Покупатель КАК Покупатель,
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
Результат запроса может выглядеть так:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Пример №2 — Отбор с помощью функций ССЫЛКА и ТИП(…)
Функцию ТИПЗНАЧЕНИЯ() удобно применять совместно с функцией ТИП( ), для проверки на соответствие определённому типу значения. Немного модифицируя запрос из примера №1, выведем записи только с теми документами, в которых тип покупателя сотрудник. Для наглядности оставим поле «ТипПокупателя».
ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК ДокументПродажи,
ПродажаТоваров.Покупатель КАК Покупатель,
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
ГДЕ
ТИПЗНАЧЕНИЯ(Покупатель) = ТИП(Справочник.Сотрудники)
Стоит отметить, что аналогом такой связки ( ТИПЗНАЧЕНИЯ() + ТИП() ), исключительно для ссылочных типов данных, может служить оператор ССЫЛКА.
Тогда текст запроса мог бы выглядеть так:
ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК ДокументПродажи,
ПродажаТоваров.Покупатель КАК Покупатель,
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
ГДЕ
Покупатель ССЫЛКА Справочник.Сотрудники
Пример №3 — Использование в конструкции ВЫБОР … КОГДА … КОНЕЦ
Также функция ТИПЗНАЧЕНИЯ() часто находит своё применение в конструкциях условного оператора «ВЫБОР».
Синтаксис оператора «ВЫБОР»:
Допустим, в нашей информационной базе предусмотрена система скидок в зависимости от типа покупателя. Если покупатель сотрудник делаем скидку 10%.
Используя связку, функция ТИПЗНАЧЕНИЯ() и условный оператор «ВЫБОР», можем рассчитать в запросе сумму со скидкой в отдельном поле.
Текст запроса может выглядеть так:
ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК Ссылка,
ПродажаТоваров.Покупатель КАК Покупатель,
ПродажаТоваров.СуммаДокумента КАК СуммаДокумента,
ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) = ТИП(Справочник.Сотрудники)
ТОГДА ПродажаТоваров.СуммаДокумента — ПродажаТоваров.СуммаДокумента * 0.1
ИНАЧЕ ПродажаТоваров.СуммаДокумента
КОНЕЦ КАК СуммаСоСкидкой
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Источник
1С 8.3 Тип в запросе — Программист 1С Минск. Автоматизация бизнеса.
1С 8.3 Тип в запросе
- ТипЗначения( ) — функция возвращает тип переданного в неё значения. В условиях запроса функция часто используется вместе с литералом Тип .
- ССЫЛКА — конструкции для ссылочных типов, которые могут установить условие на тип.
//Получить тип в полях выборки:
|ВЫБРАТЬ ТИП(Строка), ТИП(Справочник.Номенклатура)
//Получить совпадение типа в выборке:
|Выбрать ТИПЗНАЧЕНИЯ(Ссылка) = ТИП(Справочник.Номенклатура)
//Отбор по типу значения:
|ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ ТИПЗНАЧЕНИЯ(СтранаВвоза) = ТИП(Справочник.Страны)
//Использование конструкции ССЫЛКА:
|ВЫБРАТЬ Артикул ИЗ Справочник.Номенклатура ГДЕ СтранаВвоза ССЫЛКА Справочник.Страны
//Последние две конструкции идентичны по результату,
//но последняя применима только к ссылочным типам, что не всегда так, но более компактна
//Можно использовать данные конструкции и в качестве условия для соединения таблиц
//На тип значения можно проверять не только поля из выборки запроса, но и параметры:
|ВЫБРАТЬ * из Справочник.Номенклатура ГДЕ ТИПЗНАЧЕНИЯ(&Параметр) = ТИП(Справочник.Номенклатура)
//Параметром функции ТИПЗНАЧЕНИЯ могут выступать:
//СТРОКА, ЧИСЛО, ДАТА, а также все ссылочные типы.
Источник
Работа с типами в запросах
Значения типа Тип в запросах 1С могут использоваться при наложении условий, в сравнениях, упорядочивании и группировках. Для работы с типами предусмотрено несколько механизмов, которые покрывают все потребности разработчика. Рассмотрим их.
Функция ТИПЗНАЧЕНИЯ
Функция ТИПЗНАЧЕНИЯ имеет единственный параметр, куда передается значение, для которого требуется определить тип. Функция возвращает значения типа Тип. Чаще всего функция используется совместно с литералом ТИП в условиях запроса.
Рассмотрим примеры использования. Вывод в результат запроса типа Регистратора:
Закупки.Регистратор КАК Регистратор ,
ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) КАК ТипРегистратора
РегистрНакопления.Закупки КАК Закупки
Использование функции ТИПЗНАЧЕНИЯ в операции сравнения:
Закупки.Регистратор КАК Регистратор
РегистрНакопления.Закупки КАК Закупки
ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) = ТИП( Документ.ПриобретениеТоваровУслуг )
Литерал ТИП
В литерал ТИП передается имя примитивного типа или таблицы ссылочного типа. Результатом конструкции будет значение типа Тип.
Примеры имен типов:
ТИП(Строка)
ТИП(Число)
ТИП( Перечисление.СтавкиНДС )
ТИП( Справочник.Номенклатура )
ТИП( Документ.ПриобретениеТоваровУслуг )
ТИП( ПланСчетов.Хозрасчетный )
ТИП( ПланОбмена.Полный )
Использование в запросе:
Закупки.Регистратор КАК Регистратор ,
КОГДА ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) = ТИП( Документ.ПриобретениеТоваровУслуг )
ТОГДА «Приобретение товаров»
КОНЕЦ КАК ТипИсточника
РегистрНакопления.Закупки КАК Закупки
Оператор ССЫЛКА
Оператор позволяет проверить, является ли значение выражения, указанного справа от него, ссылкой на таблицу, указанную слева. Результат оператора — значение типа Булево.
Закупки.Регистратор КАК Регистратор
РегистрНакопления.Закупки КАК Закупки
Закупки.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
Для ссылочных таблиц оператор ССЫЛКА является эквивалентом сравнения
Остались вопросы?
Спросите в комментариях к статье.
3 комментария
Скажите, пжст, для оптимальной производительности что лучше использовать:
ТипЗначения() ИЛИ «Регистартор Ссылка Документ…»?
Если ТИП(Реквизит) вернул «Описание типов», как узнать языком запросов какой там тип допустим?
ТИП(Реквизит) возвращает не описание типов, а тип «Тип» (как в запросах, так и в коде). При написании запроса программист знает к какой таблице он обращается и какие типы допустимы в реквизитах выборки; для реквизитов с составным типом данных можно использовать условия Реквизит ССЫЛКА ИмяТипа или ТИПЗНАЧЕНИЯ(Реквизит) = ТИП(ИмяТипа). Примеры запросов можно посмотреть в статье.
Источник
Как проверить тип значения в запросе
В 8.2 сработает такая проверка:
КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Перечисление.ВидыНазначенияДатЗапрета)
а как прописать в 8.1?
(2) Поручик,
и что в 8.1 отрабатывает в запросе
ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = &ТипРегистратора
или
ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.ВидДокумента)
а нихрена оно не отрабатывает в 8.1
для документов (перечислений) проходит конструкция «ОсновныеНачисленияРаботниковОрганизаций.Регистратор ССЫЛКА Документ.ПутевойЛист»
а как для справочинка проверить (в регистре измерение имеет составной тип) и как проверить какое значение выбрано?
(3) в справочнике так же
ГДЕ Измерение ССЫЛКА Справочник.Номенклатура
ГДЕ Измерение ССЫЛКА Перечисление.ВидыПлатежейВБюджет
С проверкой типа значения в запросе — всё понятно. есть ключевое слово ССЫЛКА, если надо из запроса получить колонку с типом объекта (Справочник/Документ/Перечисление) и название типа справочника/документа/перечисления — как быть?
И вот еще странность: ТИПЗНАЧЕНИЯ() в данном запросе у меня вместо ожидаемого «Контрагенты» выдает «Контрагент». Если смотреть на справочник в конфигураторе 8.3, там есть «Представление объекта:» и там как раз написано Контрагент, а как же получить в запросе название типа, чтобы было так:
Иванов Иван Иванович | Справочник | Контрагенты |
В результате хотелось бы в запросе к реквизиту объекта получить вид и тип ссылочного типа. Реквизит может иметь составной тип данных.
Справочник | Контрагенты | Иванов Иван Иванович
Документ | РасходныйКссовыйОрдер | Расходный кассовый ордер №00001 от 01.01.2014
Источник