Как проверить тип значения документа, справочника?
Во-первых, во встроенном языке 1С:Предприятия 8 для работы с одним прикладным объектом реализовано несколько типов. Например, задачи, которые в 1С:Предприятии 7.7 решал тип «Документ» решаются теперь несколькими типами. Они разделены по своему назначению. Тип «ДокументСсылка» используется для хранения ссылок на объект базы данных в реквизитах других объектов. Тип «ДокументОбъект» используется для записи и удаления отдельных документов. Тип «ДокументВыборка» используется для перебора документов, хранящихся в базе данных. Существуют и другие типы данных, предназначенные для работы с документом. При написании модулей используются те типы, которые необходимы для решения конкретных задач.
Во-вторых, в 1С:Предприятии 8 нет двух понятий — «Тип» и «Вид». Для каждого объекта метаданных имеется свой набор типов используемых во встроенном языке для работы с описываемым им прикладным объектом. То есть при использовании конфигурации не будет существовать такого типа как «ДокументСсылка», а будут существовать конкретные типы, например, «ДокументСсылка.Счет», «ДокументОбъект.Счет», «ДокументСсылка.Накладная», и т.д.
Кроме того, в 1С:Предприятии 8 для манипулирования типами используются не их строковые наименования, а специальный тип «Тип». Значение типа Тип может быть получено функцией Тип(), получающей в качестве параметра имя типа.
Чтобы проверить тип значения переменной нужно определить ее тип функцией ТипЗнч() и использовать функцию Тип() для получения типа по имени.
Если ТипЗнч(Основание) = Тип(«ДокументСсылка.ПриходнаяНакладная») Тогда
Как в запросе определить тип документа 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. Запросы ниже, как ни парадоксально, совершенно разные
ВЫБРАТЬ * ИЗ Документ.Реализация КАК Док
ГДЕ НЕ ТИПЗНАЧЕНИЯ(Поле) = &Тип
ВЫБРАТЬ * ИЗ Документ.Реализация КАК Док
ГДЕ ТИПЗНАЧЕНИЯ(Поле) <> &Тип
гибкости прибавилось ого-го
ВЫБРАТЬ * ИЗ Документ.Реализация КАК Док
ГДЕ НЕ ТИПЗНАЧЕНИЯ(Док.Товары.Поле) = &Тип
ВЫБРАТЬ * ИЗ Документ.Реализация КАК Док
ГДЕ ТИПЗНАЧЕНИЯ(Док.Товары.Поле) <> &Тип
Тип документа в запросе
Slypower; yurazyuraz; Trampic; One_Assembler; user1619761; Nikitos_NSK; uchenick; user1367144; SvetaBr; ЛИК1111; userMKA; Ryo3000; provost_ua; Elvira_Saydasheva; NeoMage; Andrei_Ivanov; Aspire1C; user1040665; Sergey_E; maksa2005; Accountant2310; user1296291; Dimeron; emilliya; Anchoret; + 25 – Ответить
2. antz 30.05.16 15:20 Сейчас в теме
КОГДА СотрудникиОсвободившиеСтавкиВОрганизациях.Регистратор ССЫЛКА Документ.ВозвратНаРаботуОрганизаций
freeek; Slypower; Ali_q; creatermc; user1619761; Night_Trap; Nikitos_NSK; uchenick; user1367144; criptid; maksa2005; KoshevoyEN; houpl; wowik; LIL_PIVO; provost_ua; Elvira_Saydasheva; nomad_irk; user640247; coder1c; adhocprog; bohdan-k; dante; Luisor; Ksant; romankoav; user895546; Tanya_o; Accountant2310; KurovD; MaximStav; sommid; + 32 – Ответить
Как в запросе получить Вид (тип) Документа?
Столкнулся с задачей, нужно было выбрать все документы по выплате и сгруппировать их по типу документа!
Перелистав все ЖКК и интернет, понял что простого способа получить Вид документа в запросе нет 🙁
Пришлось сделать так:
Код 1C v 8.х
Запрос = Новый Запрос;
Запрос.Текст ="
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.РасходныйКассовыйОрдер
| ТОГДА ""Расходный кассовый ордер""
| ИНАЧЕ ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
| ТОГДА ""Платежное поручение исходящее""
| ИНАЧЕ ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.ДепонированиеОрганизаций
| ТОГДА ""Депонирование""
| ИНАЧЕ ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер
| ТОГДА ""Приходный кассовый ордер""
| ИНАЧЕ """"
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ КАК ВидДокумента,
| ВзаиморасчетыСРаботникамиОрганизаций.Регистратор КАК Регистратор,
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизаций.Регистратор.Дата МЕЖДУ &ДатаН И &ДатаК
| И ВзаиморасчетыСРаботникамиОрганизаций.ВидДвижения = &ВидДвижения
|ИТОГИ
| СУММА(СуммаВзаиморасчетов)
|ПО
| ВидДокумента
|";
Запрос.УстановитьПараметр("ВидДвижения",ВидДвиженияНакопления.Расход);
Запрос.УстановитьПараметр("ДатаК",Дата("28.02.2010 23:59:59"));
Запрос.УстановитьПараметр("ДатаН",Дата("01.02.2010 0:00:00"));
Результат = Запрос.Выполнить();
Результат = Результат.Выбрать();
Пока Результат.Следующий() Цикл
// . код обработки.
КонецЦикла;