Как в запросе определить тип документа 1с
Перейти к содержимому

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

  • автор:

Как проверить тип значения документа, справочника?

Во-первых, во встроенном языке 1С:Предприятия 8 для работы с одним прикладным объектом реализовано несколько типов. Например, задачи, которые в 1С:Предприятии 7.7 решал тип «Документ» решаются теперь несколькими типами. Они разделены по своему назначению. Тип «ДокументСсылка» используется для хранения ссылок на объект базы данных в реквизитах других объектов. Тип «ДокументОбъект» используется для записи и удаления отдельных документов. Тип «ДокументВыборка» используется для перебора документов, хранящихся в базе данных. Существуют и другие типы данных, предназначенные для работы с документом. При написании модулей используются те типы, которые необходимы для решения конкретных задач.

Во-вторых, в 1С:Предприятии 8 нет двух понятий — «Тип» и «Вид». Для каждого объекта метаданных имеется свой набор типов используемых во встроенном языке для работы с описываемым им прикладным объектом. То есть при использовании конфигурации не будет существовать такого типа как «ДокументСсылка», а будут существовать конкретные типы, например, «ДокументСсылка.Счет», «ДокументОбъект.Счет», «ДокументСсылка.Накладная», и т.д.

Кроме того, в 1С:Предприятии 8 для манипулирования типами используются не их строковые наименования, а специальный тип «Тип». Значение типа Тип может быть получено функцией Тип(), получающей в качестве параметра имя типа.

Чтобы проверить тип значения переменной нужно определить ее тип функцией ТипЗнч() и использовать функцию Тип() для получения типа по имени.

Если ТипЗнч(Основание) = Тип(«ДокументСсылка.ПриходнаяНакладная») Тогда

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

Столкнулся с такой проблемой, может кому пригодится.
Если надо отобрать в запросе документы определенного типа то работает такая конструкция:
НужнТип = Тип(«ДокументСсылка.ПередачаМатериаловВЭксплуатацию»);
.
|ГДЕ
| ТИПЗНАЧЕНИЯ(МатериалыВЭксплуатацииОстаткиИОбороты.Регистратор.Ссылка) = &НужнТип
.
Запрос.УстановитьПараметр(«НужнТип», НужнТип);

Правда? :)) спасибо

Хочешь порву щас тебя вообще?
| ТИПЗНАЧЕНИЯ(МатериалыВЭксплуатацииОстаткиИОбороты.Регистратор.Ссылка) = Тип(Документ.передачаМаиериаловвЭксплуатацию)

мля, я тоже наг*внокодил копипастой

где МатериалыВЭксплуатацииОстаткиИОбороты.Регистратор ссылка Документ.ПередачаМатериаловВЭксплуатацию

Можно и так:
ГДЕ МатериалыВЭксплуатацииОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПередачаМатериаловВЭксплуатацию

Разработчику о работе с 1С:Предприятие, Pascal, Паскаль

Решение вопросов, возникающие при автоматизации учета с помощью 1С:Предприятие. Паскаль.

Как вывести в запросе данные по определенному виду (типу) документа. 1С:Предприятие 8.2?

30.04.2013 | Автор Дмитрий

Как вывести в запросе данные по определенному виду (типу) документа. 1С:Предприятие 8.2?
Можно использовать слово ССЫЛКА.
Для 1С:Предприятие 8.2 предусмотрена еще одна конструкция: ТИПЗНАЧЕНИЯ и ТИП.

ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг)

ПоступлениеТоваровУслуг — это объект (документ), созданный в конфигураторе.
Пример: вывод суммы оборотов по всем счетам для документа вида Поступление товаров и услуг за определенный период.

ВЫБРАТЬ ХозрасчетныйОборотыДтКт.СчетДт, ХозрасчетныйОборотыДтКт.СчетКт, ХозрасчетныйОборотыДтКт.СуммаОборот, ХозрасчетныйОборотыДтКт.Регистратор ИЗ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, Регистратор, , , , , ) КАК ХозрасчетныйОборотыДтКт ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг) 

Рубрика: 1С:Предприятие 8.2, Новости

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

Какой умысел преследовали разработчики платформы, когда в запросах сделали вот это:
ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)

Неужели недостаточно было так:
Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг

ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.РеализацияТоваровУслуг) — более широкое, т.к там не только ссылка может быть, а ССЫЛКА получается подмножество

а если тип число?
(1) не фига не понял. Можешь понагляднее объяснить?
ТИПЗНАЧЕНИЯ(Регистратор) = &тип
а вот так можно?
(3) А через ВЫРАЗИТЬ никак нельзя что-ли?

чтобы можно было вот так:

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

(7) каким образом?
(7) Не все можно выразить 🙂
(7)
В ВЫРАЗИТЬ есть проверка условия?
(0) А если бы использовали «ССЫЛКА», ты спрашивал бы почему не «тип» ?
Множество типов больше, чем множество ссылок (таблиц).

Возможна передача значения типа Тип как параметр запроса.

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

(13) всего на 3 типа. из-за этого не стоило и огород городить
(15) Стоило. Хотя изза того, что можно использовать оператор В
+ выборка типа как поля в результате, группировка по типу и тд
(15) на 4 типа. Плюс функционал в (17)
(15)даже не 4, а 6 типов.
(19) не, 7 типов + описание типов и три системных перечисления. Итого уже 11.
(20) null, undefined, ХЗ, уникальный идентификатор + 4 базовых 🙂
(16) однозначная вещь, тем более, что фактически в таблицах есть поля с хранением значений.

Например сравнение на неустановленность значения в поле с множественными типами

(23) тут проще:
ГДЕ
СчетФактура ЕСТЬ NULL

(24) в 1с все поля БД not null. А для составных типов есть поле отвечающее за тип. А вот в нем можно понять установлено значение или нет

(25) все работает, там запрос кривой
(26) >>в 1с все поля БД not null
это ложь

(27) Там не кривой запрос. В итогах прописывается Null, а вот в детальных записях Null нет. Конструкция в 23 работает проверено.

(28) приведи пример
(30) Артикул у группы номенклатуры
(21) Точно. Вспомнил. Поля справочников только для группы или только для элемента. Прошу прощения.

(0) Не достаточно.

1. ТИПЗНАЧЕНИЯ(Поле) В (&СписокТипов)

2. Запросы ниже, как ни парадоксально, совершенно разные

ВЫБРАТЬ * ИЗ Документ.Реализация КАК Док
ГДЕ НЕ ТИПЗНАЧЕНИЯ(Поле) = &Тип

ВЫБРАТЬ * ИЗ Документ.Реализация КАК Док
ГДЕ ТИПЗНАЧЕНИЯ(Поле) <> &Тип

гибкости прибавилось ого-го

ВЫБРАТЬ * ИЗ Документ.Реализация КАК Док
ГДЕ НЕ ТИПЗНАЧЕНИЯ(Док.Товары.Поле) = &Тип

ВЫБРАТЬ * ИЗ Документ.Реализация КАК Док
ГДЕ ТИПЗНАЧЕНИЯ(Док.Товары.Поле) <> &Тип

Добавить комментарий

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