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

Отбор по значению дополнительных реквизитов

Я
   falselight

23.10.17 — 07:54

Здравствуйте! Подскажите пожалуйста по особенно важному вопросу.

Есть запрос. Состоит из нескольких пакетов. В нем подсчитывается

количество и сумма по различным условиям.

Сейчас задача отобрать запись этого запроса по источнику.

Источник хранится в табличной части Дополнительные реквизиты

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

отбор значения в таблице дополнительные реквизиты?

//

ВЫБРАТЬ

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказКлиента.Ссылка) КАК ИтогПоКоличествуЗаказов

ПОМЕСТИТЬ ВТ_ИтогПоКоличествуЗаказов

ИЗ

    Документ.ЗаказКлиента КАК ЗаказКлиента

ГДЕ

    ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата

    И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ

    И ЗаказКлиента.Проведен = ИСТИНА

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    ЗаказКлиента.Менеджер,

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ЗаказКлиента.Ссылка, 0)) КАК КоличествоЗаказов,

    СУММА(ЕСТЬNULL(ЗаказКлиента.СуммаДокумента, 0)) КАК СуммаЗаказов

ПОМЕСТИТЬ ВТ_КоличествоИСуммаЗаказов

ИЗ

    Документ.ЗаказКлиента КАК ЗаказКлиента

ГДЕ

    ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата

    И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ

    И ЗаказКлиента.Проведен = ИСТИНА

СГРУППИРОВАТЬ ПО

    ЗаказКлиента.Менеджер

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    СостоянияЗаказовКлиентов.Заказ.Менеджер,

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(СостоянияЗаказовКлиентов.Заказ.Ссылка, 0)) КАК КоличествоОтгруженныхЗаказов,

    СУММА(ЕСТЬNULL(СостоянияЗаказовКлиентов.СуммаОтгрузки, 0)) КАК СуммаОтгрузки

ПОМЕСТИТЬ ВТ_ОтгруженныеЗаказы

ИЗ

    РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов

ГДЕ

    СостоянияЗаказовКлиентов.Заказ.Дата МЕЖДУ &НачДата И &КонДата

    И СостоянияЗаказовКлиентов.Состояние = &Закрыт

    И СостоянияЗаказовКлиентов.ПроцентОтгрузки = 100

    И СостоянияЗаказовКлиентов.Заказ.ПометкаУдаления = ЛОЖЬ

    И СостоянияЗаказовКлиентов.Заказ.Проведен = ИСТИНА

СГРУППИРОВАТЬ ПО

    СостоянияЗаказовКлиентов.Заказ.Менеджер

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    СостоянияЗаказовКлиентов.Заказ.Менеджер,

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СостоянияЗаказовКлиентов.Заказ.Ссылка) КАК ЕщёВРаботе

ПОМЕСТИТЬ ВТ_ЗаказыЕщёВРаботе

ИЗ

    РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов

ГДЕ

    СостоянияЗаказовКлиентов.Заказ.Дата МЕЖДУ &НачДата И &КонДата

    И СостоянияЗаказовКлиентов.Состояние <> &ЗАКРЫТ

    И СостоянияЗаказовКлиентов.Заказ.ПометкаУдаления = ЛОЖЬ

    И СостоянияЗаказовКлиентов.Заказ.Проведен = ИСТИНА

СГРУППИРОВАТЬ ПО

    СостоянияЗаказовКлиентов.Заказ.Менеджер

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    ВТ_ИтогПоКоличествуЗаказов.ИтогПоКоличествуЗаказов КАК ИтогПоКоличествуЗаказов,

    ВТ_КоличествоИСуммаЗаказов.Менеджер,

    ЕСТЬNULL(ВТ_КоличествоИСуммаЗаказов.КоличествоЗаказов, 0) КАК КоличествоЗаказов,

    ВЫРАЗИТЬ(ЕСТЬNULL(ВТ_КоличествоИСуммаЗаказов.КоличествоЗаказов, 0) / ВТ_ИтогПоКоличествуЗаказов.ИтогПоКоличествуЗаказов * 100 КАК ЧИСЛО(15, 2)) КАК ПроцентОтОбщегоКоличества,

    ЕСТЬNULL(ВТ_КоличествоИСуммаЗаказов.СуммаЗаказов, 0) КАК СуммаЗаказов,

    ЕСТЬNULL(ВТ_ОтгруженныеЗаказы.КоличествоОтгруженныхЗаказов, 0) КАК КоличествоОтгруженныхЗаказов,

    ВЫРАЗИТЬ(ЕСТЬNULL(ВТ_КоличествоИСуммаЗаказов.КоличествоЗаказов, 0) — ЕСТЬNULL(ВТ_ОтгруженныеЗаказы.КоличествоОтгруженныхЗаказов, 0) / ЕСТЬNULL(ВТ_КоличествоИСуммаЗаказов.КоличествоЗаказов, 0) КАК ЧИСЛО(15, 2)) КАК КПД,

    ЕСТЬNULL(ВТ_ОтгруженныеЗаказы.СуммаОтгрузки, 0) КАК СуммаОтгруженныхЗаказов,

    ЕСТЬNULL(ВТ_ЗаказыЕщёВРаботе.ЕщёВРаботе, 0) КАК Поле1

ИЗ

    ВТ_ИтогПоКоличествуЗаказов КАК ВТ_ИтогПоКоличествуЗаказов,

    ВТ_КоличествоИСуммаЗаказов КАК ВТ_КоличествоИСуммаЗаказов

        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтгруженныеЗаказы КАК ВТ_ОтгруженныеЗаказы

        ПО ВТ_КоличествоИСуммаЗаказов.Менеджер = ВТ_ОтгруженныеЗаказы.ЗаказМенеджер

        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЗаказыЕщёВРаботе КАК ВТ_ЗаказыЕщёВРаботе

        ПО ВТ_КоличествоИСуммаЗаказов.Менеджер = ВТ_ЗаказыЕщёВРаботе.ЗаказМенеджер

  

Партнерская программа EFSOL Oblako

   falselight

1 — 23.10.17 — 07:59

(0+) Нет ссылки в запросе для связи с таблицей дополнительные реквизиты. Не соображу как её прицепить к нему(

   riks05

2 — 23.10.17 — 08:00

(0) сначала отдельным запросом отобрази все доп реквизиты, определись с нужным допреквизитом после «свойство» если я не ошибаюсь допустим оно будет «источник» в условии получится

Где

допреквизиты.свойство=»источник»

и допреквизиты.значение=&НужноеЗначение

както так.

   1dvd

3 — 23.10.17 — 08:01

ИЗ

    Документ.ЗаказКлиента КАК ЗаказКлиента

    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты

        ПО ЗаказКлиентаДополнительныеРеквизиты.Ссылка = ЗаказКлиента.Ссылка

   Fram

4 — 23.10.17 — 08:03

И СостоянияЗаказовКлиентов.Заказ.ПометкаУдаления = ЛОЖЬ

    И СостоянияЗаказовКлиентов.Заказ.Проведен = ИСТИНА

подстраховался на всякий случай?

   falselight

5 — 23.10.17 — 08:05

(2) Важно кажется задавать только значение.

Да все правильно у вас.

Но вот этот запрос в (0), как сделать отбор по значению

дополнительных реквизитов в нем? Не пойму как прицепить к нему эти доп реквизиты.

(3) Это правильно. Но видите у меня в пакетных запросах подсчитывается количество. Получается отбор нужно накладывать на каждый пакет, т.к. нужно видеть данные с отбором по источнику.

Но возможно ли это сделать в запросе (0) Ссылки на заказ то в пакетах нет, что бы связывать с таблицей дополнительные реквизиты.

   falselight

6 — 23.10.17 — 08:06

(4) Ну вроде это нужно делать. Не знаю стоит ли устанавлявать ложи на пометку удаления? Так как проведен в истину и так отберет же только проведенные. А проведенные не могут быть помеченными на удаление?!

   1dvd

7 — 23.10.17 — 08:08

(5) нифига не понял что тебе не нравится. В пакетных запросах ссылка есть. соединяй с ТЧ и фильтруй. Не вижу никаких проблем

   catena

8 — 23.10.17 — 08:11

(6)»ложи» — нет такого слова, есть слово «клади».

   falselight

9 — 23.10.17 — 08:15

(8) Не сильно за грамматикой сейчас слежу.

(7) Есть группировка по менеджеру, ссылка используется для подсчета количества, и сумма.

Может я чего то не понимаю, но как вот в этих к примеру двух пакетах наложить отбор на значение таблицы дополнительных реквизитов?

Как её прицепить к ним, что бы наложить отбор?

   falselight

10 — 23.10.17 — 08:15

(9+)

ВЫБРАТЬ

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказКлиента.Ссылка) КАК ИтогПоКоличествуЗаказов

ПОМЕСТИТЬ ВТ_ИтогПоКоличествуЗаказов

ИЗ

    Документ.ЗаказКлиента КАК ЗаказКлиента

ГДЕ

    ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата

    И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ

    И ЗаказКлиента.Проведен = ИСТИНА

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    ЗаказКлиента.Менеджер,

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ЗаказКлиента.Ссылка, 0)) КАК КоличествоЗаказов,

    СУММА(ЕСТЬNULL(ЗаказКлиента.СуммаДокумента, 0)) КАК СуммаЗаказов

ПОМЕСТИТЬ ВТ_КоличествоИСуммаЗаказов

ИЗ

    Документ.ЗаказКлиента КАК ЗаказКлиента

ГДЕ

    ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата

    И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ

    И ЗаказКлиента.Проведен = ИСТИНА

СГРУППИРОВАТЬ ПО

    ЗаказКлиента.Менеджер

;

////////////////////////////////////////////////////////////////////////////////

   1dvd

11 — 23.10.17 — 08:18

(9)

ВЫБРАТЬ

    ЗаказКлиента.Менеджер,

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ЗаказКлиента.Ссылка, 0)) КАК КоличествоЗаказов,

    СУММА(ЕСТЬNULL(ЗаказКлиента.СуммаДокумента, 0)) КАК СуммаЗаказов

ПОМЕСТИТЬ ВТ_КоличествоИСуммаЗаказов

ИЗ

    Документ.ЗаказКлиента КАК ЗаказКлиента

    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты

        ПО ЗаказКлиентаДополнительныеРеквизиты.Ссылка = ЗаказКлиента.Ссылка

ГДЕ

    ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата

    И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ

    И ЗаказКлиента.Проведен = ИСТИНА

    И ЗаказКлиентаДополнительныеРеквизиты.Свойство = &Свойство

    И ЗаказКлиентаДополнительныеРеквизиты.Значение = &Значение

СГРУППИРОВАТЬ ПО

    ЗаказКлиента.Менеджер

Дальше сам думай

   falselight

12 — 23.10.17 — 08:21

(11) А так нельзя?

ВЫБРАТЬ

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказКлиента.Ссылка) КАК ИтогПоКоличествуЗаказов

ПОМЕСТИТЬ ВТ_ИтогПоКоличествуЗаказов

ИЗ

    Документ.ЗаказКлиента КАК ЗаказКлиента

ГДЕ

    ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата

    И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ

    И ЗаказКлиента.Проведен = ИСТИНА

    И ЗаказКлиента.ДополнительныеРеквизиты.Значение = &Знач

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    ЗаказКлиента.Менеджер,

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ЗаказКлиента.Ссылка, 0)) КАК КоличествоЗаказов,

    СУММА(ЕСТЬNULL(ЗаказКлиента.СуммаДокумента, 0)) КАК СуммаЗаказов

ПОМЕСТИТЬ ВТ_КоличествоИСуммаЗаказов

ИЗ

    Документ.ЗаказКлиента КАК ЗаказКлиента

ГДЕ

    ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата

    И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ

    И ЗаказКлиента.Проведен = ИСТИНА

    И ЗаказКлиента.ДополнительныеРеквизиты.Значение = &Знач

СГРУППИРОВАТЬ ПО

    ЗаказКлиента.Менеджер

;

   catena

13 — 23.10.17 — 08:24

(12)Тебе можно, но 1С будет ругаться.

   1dvd

14 — 23.10.17 — 08:24

(12) попробуй, может и можно

   falselight

15 — 23.10.17 — 08:32

Подскажите пожалуйста по итоговому запросу, я попытался добавить таблицу. Все ли в нем верно?

||

ВЫБРАТЬ

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказКлиента.Ссылка) КАК ИтогПоКоличествуЗаказов

ПОМЕСТИТЬ ВТ_ИтогПоКоличествуЗаказов

ИЗ

    Документ.ЗаказКлиента КАК ЗаказКлиента

        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты

        ПО ЗаказКлиента.Ссылка = ЗаказКлиентаДополнительныеРеквизиты.Ссылка

ГДЕ

    ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата

    И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ

    И ЗаказКлиента.Проведен = ИСТИНА

    И ЗаказКлиента.ДополнительныеРеквизиты.Значение = &Знач

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    ЗаказКлиента.Менеджер,

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ЗаказКлиента.Ссылка, 0)) КАК КоличествоЗаказов,

    СУММА(ЕСТЬNULL(ЗаказКлиента.СуммаДокумента, 0)) КАК СуммаЗаказов

ПОМЕСТИТЬ ВТ_КоличествоИСуммаЗаказов

ИЗ

    Документ.ЗаказКлиента КАК ЗаказКлиента

        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты

        ПО ЗаказКлиента.Ссылка = ЗаказКлиентаДополнительныеРеквизиты.Ссылка

ГДЕ

    ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата

    И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ

    И ЗаказКлиента.Проведен = ИСТИНА

    И ЗаказКлиента.ДополнительныеРеквизиты.Значение = &Знач

СГРУППИРОВАТЬ ПО

    ЗаказКлиента.Менеджер

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    СостоянияЗаказовКлиентов.Заказ.Менеджер,

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(СостоянияЗаказовКлиентов.Заказ.Ссылка, 0)) КАК КоличествоОтгруженныхЗаказов,

    СУММА(ЕСТЬNULL(СостоянияЗаказовКлиентов.СуммаОтгрузки, 0)) КАК СуммаОтгрузки

ПОМЕСТИТЬ ВТ_ОтгруженныеЗаказы

ИЗ

    РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов

        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты

        ПО СостоянияЗаказовКлиентов.Заказ.Ссылка = ЗаказКлиентаДополнительныеРеквизиты.Ссылка

ГДЕ

    СостоянияЗаказовКлиентов.Заказ.Дата МЕЖДУ &НачДата И &КонДата

    И СостоянияЗаказовКлиентов.Состояние = &Закрыт

    И СостоянияЗаказовКлиентов.ПроцентОтгрузки = 100

    И СостоянияЗаказовКлиентов.Заказ.ПометкаУдаления = ЛОЖЬ

    И СостоянияЗаказовКлиентов.Заказ.Проведен = ИСТИНА

    И ЗаказКлиентаДополнительныеРеквизиты.Значение = &Знач

СГРУППИРОВАТЬ ПО

    СостоянияЗаказовКлиентов.Заказ.Менеджер

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    СостоянияЗаказовКлиентов.Заказ.Менеджер,

    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СостоянияЗаказовКлиентов.Заказ.Ссылка) КАК ЕщёВРаботе

ПОМЕСТИТЬ ВТ_ЗаказыЕщёВРаботе

ИЗ

    РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов

        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты

        ПО СостоянияЗаказовКлиентов.Заказ.Ссылка = ЗаказКлиентаДополнительныеРеквизиты.Ссылка

ГДЕ

    СостоянияЗаказовКлиентов.Заказ.Дата МЕЖДУ &НачДата И &КонДата

    И СостоянияЗаказовКлиентов.Состояние <> &ЗАКРЫТ

    И СостоянияЗаказовКлиентов.Заказ.ПометкаУдаления = ЛОЖЬ

    И СостоянияЗаказовКлиентов.Заказ.Проведен = ИСТИНА

    И ЗаказКлиентаДополнительныеРеквизиты.Значение = &Знач

СГРУППИРОВАТЬ ПО

    СостоянияЗаказовКлиентов.Заказ.Менеджер

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    ВТ_ИтогПоКоличествуЗаказов.ИтогПоКоличествуЗаказов КАК ИтогПоКоличествуЗаказов,

    ВТ_КоличествоИСуммаЗаказов.Менеджер,

    ЕСТЬNULL(ВТ_КоличествоИСуммаЗаказов.КоличествоЗаказов, 0) КАК КоличествоЗаказов,

    ВЫРАЗИТЬ(ЕСТЬNULL(ВТ_КоличествоИСуммаЗаказов.КоличествоЗаказов, 0) / ВТ_ИтогПоКоличествуЗаказов.ИтогПоКоличествуЗаказов * 100 КАК ЧИСЛО(15, 2)) КАК ПроцентОтОбщегоКоличества,

    ЕСТЬNULL(ВТ_КоличествоИСуммаЗаказов.СуммаЗаказов, 0) КАК СуммаЗаказов,

    ЕСТЬNULL(ВТ_ОтгруженныеЗаказы.КоличествоОтгруженныхЗаказов, 0) КАК КоличествоОтгруженныхЗаказов,

    ВЫРАЗИТЬ(ЕСТЬNULL(ВТ_КоличествоИСуммаЗаказов.КоличествоЗаказов, 0) — ЕСТЬNULL(ВТ_ОтгруженныеЗаказы.КоличествоОтгруженныхЗаказов, 0) / ЕСТЬNULL(ВТ_КоличествоИСуммаЗаказов.КоличествоЗаказов, 0) КАК ЧИСЛО(15, 2)) КАК КПД,

    ЕСТЬNULL(ВТ_ОтгруженныеЗаказы.СуммаОтгрузки, 0) КАК СуммаОтгруженныхЗаказов,

    ЕСТЬNULL(ВТ_ЗаказыЕщёВРаботе.ЕщёВРаботе, 0) КАК ЕщёВРаботе

ИЗ

    ВТ_ИтогПоКоличествуЗаказов КАК ВТ_ИтогПоКоличествуЗаказов,

    ВТ_КоличествоИСуммаЗаказов КАК ВТ_КоличествоИСуммаЗаказов

        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтгруженныеЗаказы КАК ВТ_ОтгруженныеЗаказы

        ПО ВТ_КоличествоИСуммаЗаказов.Менеджер = ВТ_ОтгруженныеЗаказы.ЗаказМенеджер

        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЗаказыЕщёВРаботе КАК ВТ_ЗаказыЕщёВРаботе

        ПО ВТ_КоличествоИСуммаЗаказов.Менеджер = ВТ_ЗаказыЕщёВРаботе.ЗаказМенеджер

   catena

16 — 23.10.17 — 08:36

(14)Ну и как? Что ощущаешь после провалившейся акции милосердия?))

   Масянька

17 — 23.10.17 — 08:37

Как у вас дела? Получилось донести до ТС мысли?

   falselight

18 — 23.10.17 — 08:39

(16) ну вот запрос итоговый в (15) я сделал как подсказывали, он нормальный?

   falselight

19 — 23.10.17 — 08:39

(16) Подскажите пожалуйста!

   catena

20 — 23.10.17 — 08:40

(18)Нет, ты сделал НЕ как подсказывали. Помнишь детскую игру «найди три отличия»? Сиди, сверяй.

   catena

21 — 23.10.17 — 08:41

(17)У него переполнение стека, то и дело всё выплескивается.

   falselight

22 — 23.10.17 — 08:42

(20) вы про то что не хватает этого?

    И ЗаказКлиентаДополнительныеРеквизиты.Свойство = &Свойство

это у меня на форме, и там только нужные значения уже, то есть я считал что = &Знач достаточно!

   Масянька

23 — 23.10.17 — 08:44

(21) И смех, и грех (С)

   falselight

24 — 23.10.17 — 08:44

(20) Подскажите что именно не так в запросе?

   1dvd

25 — 23.10.17 — 08:45

(24) всё норм. не парься

  

falselight

26 — 23.10.17 — 08:47

(25) Спасибо большое за поддержку! Пойду вставлять в отчет.

igforu

В типовой 1С торговле 11 дополнительные реквизиты хранятся не в регистре сведений, а в табличной части справочника (речь идет не о справочнике номенклатуры). Табличная часть называется “ДополнительныеРеквизиты”. Строки табличной части содержат реквизиты: Значение и Свойство. Если в качестве источника значений выбрать таблицу справочника, то СКД не дает в качестве Поля Вида и Поля Значения выбрать реквизиты табличной части справочника, можно только саму табличную часть. То же и с запросом.

loginza7oi6IWyXZ5RHccDYmqYbcD

loginza7oi6IWyXZ5RHccDYmqYbcD

11 лет назад

Люди! Скажите пожалуйста, что это за секретное кунг-фу?:
В УТ 11 для номенклатуры создайте общий доп. реквизит, напр. “Бренд”
Потом в конфигураторе сделайте простейший внешний отчет с выборкой номенклатуры и группировкой по Номенклатура.Ссылка
Потом в режиме предприятия откройте этот отчет, измените вариант настройки, на закладке “Отбор” плюсиком разверните реквизиты номенклатуры. и что мы там видим? Помимо заданных в конфигураторе реквизитов обнаруживаем реквизит “Бренд”, по которому можно делать отбор, причем с правильным типом. Как такое возможно? Откуда компоновка знает о доп. реквизитах? Как она делает отбор по значениям реквизитов в ТЧ номенклатуры?

MrGray

Бьюсь с тем же – как попадают доп.реквизиты в поля СКД в типовых?? откуда он их подхватывает?

  1. Уважаемые коллеги, подскажите пожалуйста как можно сделать отбор документа Авансовый отчет по дополнительному реквизиту Оплачено с типом булево, который хранится затем в Плане видов характеристик Дополнительные реквизиты?
    Например:

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

  2. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    Уточните.
    «Оплачено» — это реквизит документа АвансовыйОтчет (тип булево)?
    Вам надо отобрать по принципу оплачено/неоплачено?
    Так если это реквизит документа, почему нельзя наложить отбор на него? (хочу спросить — не совсем понял причем здесь ПланВидовХарактеристик). Или я неправильно понял?


  3. Stack_G

    Offline

    Stack_G
    Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    29

    Как я понимаю, JVN имееет ввиду свойство/категорию.
    JVN, поищите по форуму «свойство», ну или нечто вроде — не раз обсуждалось.

  4. Речь идет об Авансовом отчете в конфигурации Бух 2.0 КОРП, реквизита, как например у пратежки в этом документе нет, поэтому был заведен Дополнительный реквизит «Оплачено», записанный в вышеупомянутый План вида характеристик, по нему и необходимо отобрать документы в запросе (неоплаченные). Принтскрин в аттаче.

    Вложения:

    • ex01.png
      ex01.png
      Размер файла:
      36,8 КБ
      Просмотров:
      72

  5. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    Бух 2.0 КОРП нет, уточните у себя как называется соответствующий РС.

    "ВЫБРАТЬ
    АвансовыйОтчет.Ссылка,
    АвансовыйОтчет.ФизЛицо,
    АвансовыйОтчет.СуммаДокумента
    ИЗ
    Документ.АвансовыйОтчет КАК АвансовыйОтчет
    ГДЕ
    АвансовыйОтчет.Ссылка В
    (ВЫБРАТЬ
    КатегорииОбъектов.Объект КАК Объект
    ИЗ
    РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
    ГДЕ
    КатегорииОбъектов.Категория = &Категория
    И КатегорииОбъектов.Объект ССЫЛКА Документ.АвансовыйОтчет)"
    
    

    параметр в запрос передаете например так:

    Запрос.УстановитьПараметр("Категория",  ПланыВидовХарактеристик.ДополнительныеРеквизиты.НайтиПоНаименованию("Оплачено"));
    
    
  6. большое спасибо, подошло с небольшим исправлением!
    только почему Бух 2.0 КОРП нет: текущие релизы
    24.08.2010 13:34 Конфигурация «Бухгалтерия Предприятия КОРП» 2.0.14.8


  7. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    Я имел ввиду «у меня нет» :angry:


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Как в языке запросов 1С отобрать не заполненное значение. Какое условие указать в запросе после ключевого слова «ГДЕ», когда нужно сделать отбор по не заполненным полям?
Есть запрос:

    Запрос.Текст =
    "ВЫБРАТЬ 
    |    усЕдиницыХранения.Ссылка
    |ИЗ
    |    Справочник.усЕдиницыХранения КАК усЕдиницыХранения

Требуется отобрать по условию, что у справочника усЕдиницыХранения реквизит РазрешитьОтборИзРезервнойЗоны пустой
Реквизит РазрешитьОтборИзРезервнойЗоны имеет тип булево
Вариант 1. сравнение с не заполненным булевым значением:

    |ГДЕ
    |     усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны = Ложь

Вариант 2. Если это булево определено, то лучше так:

    // условие на отрицательное булево значение:
    |ГДЕ
    |     НЕ усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны

Требуется отобрать по условию, что у справочника усЕдиницыХранения реквизит АктивнаяОбластьОтбора пустой
Реквизит АктивнаяОбластьОтбора имеет тип Справочник.усОбластиОтбора

    // Пример 3. выборка по условию не заполненного поля, имеющего тип "справочник конкретного типа"
     |ГДЕ
    |    усЕдиницыХранения.АктивнаяОбластьОтбора = ЗНАЧЕНИЕ(Справочник.усОбластиОтбора.ПустаяСсылка)

Требуется отобрать по условию, что у регистра сведений НашРегистрСведений реквизит Документ пустой
Реквизит Документ имеет тип Документ.НашДокумент1

    // Пример 3а. выборка по условию не заполненного поля, имеющего тип "документ конкретного типа"
    |ГДЕ
    |    НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент.ПустаяСсылка)

Требуется отобрать по условию, что у регистра сведений НашРегистрСведений реквизит Документ пустой
Реквизит Документ имеет составной тип значения: Документ.НашДокумент1, Документ.НашДокумент2 и т.д.

    // Пример 3б. выборка по условию не заполненного поля, имеющего тип "документы разных типов" (составное поле)
    |ГДЕ
    |    (НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент1.ПустаяСсылка)
    |    ИЛИ НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент2.ПустаяСсылка) 
    |    ИЛИ ...(и т.д. - последовательно перечисляем условия для всех возможных типов этого составного поля))

Требуется отобрать по условию, что реквизит не пустой (заполнен хоть чем-то)
Тип значения реквизита — Строка.

    
    // Пример 4. или наоборот, если нужно выбрать заполненное значение типа "строка", то поможет условие:
    |ГДЕ
    |    усЕдиницыХранения.Наименование > """"

Допустим требуется отобрать данные, при условии, что реквизит Задание регистра сведений ВыполняемыеЗадания содержит какой-либо Документ.Отбор
Реквизит Задание имеет составной тип значения: Документ.Отбор, Документ.Поступление и т.д.

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

Еще аналогичный пример, когда нужно выбрать документы конкретного типа

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

Отобрать по условию не определенного значения:

    // Пример 6. выбор по условию не определенного значения:
    |ГДЕ
    |    СохраненныеНастройки.Пользователь = НЕОПРЕДЕЛЕНО

Отобрать по условию, что вид движения — Приход

    // Пример 7. выбор по виду движения "Приход" регистра накопления, "Расход" - аналогично):
    |ГДЕ
    |    РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)

Как в запросе указать, что выполнять запрос не нужно (например, нужно программно, в зависимости от какого-то условия, вернуть пустой результат запроса: Запрос.Текст = СтрЗаменить(Запрос.Текст, «ГДЕ Док.Ссылка = &ДокументСсылка», «ГДЕ ЛОЖЬ»);).
Для этого достаточно добавить условие «Где Ложь». Кстати, независимо от объема запрашиваемых в выборке данных, такой запрос будет выполнен мгновенно.

    // Пример 8. Не исполнять запрос:
    |ГДЕ ЛОЖЬ

Проверка на то, что результат выполнения запроса содержит данные:

    // Пример 9. Проверка на то, что результат выполнения запроса содержит данные:
    Если НЕ Запрос.Выполнить().Пустой() Тогда

Отобрать записи с не заполненной датой (реквизит ДатаОтмены имеет тип Дата)

    // Пример 10. выбор по условию не заполненной даты:
    |ГДЕ
    |    тбСтроки.ДатаОтмены = ДАТАВРЕМЯ(1, 1, 1)

Next Post

  • SQL Server

  • v8

  • Программисту 1C

Установка 1С: Предприятие. Установка 1С:Предприятия 8 в варианте «клиент-сервер» (на SQLServer) (1С)

Вт Май 18 , 2010

Вопрос Как установить 1С: Предприятие в клиент-серверном варианте. Раздел содержит практические рекомендации по решению проблем, возникающих при установке и настройке клиент-серверного варианта 1С:Предприятия 8. При подготовке раздела учтен опыт партнеров и пользователей, которым в процессе установки 1С:Предприятия потребовалась дополнительная настройка различных служб Microsoft Windows. Более подробно с материалом можно ознакомиться […]

Yulunga

1142 / 689 / 203

Регистрация: 22.04.2013

Сообщений: 5,160

Записей в блоге: 1

1

запрос к доп реквизитам

23.03.2021, 08:49. Показов 9639. Ответов 5

Метки нет (Все метки)


всем добра.
есть доп реквизит (для простоты — булево) в документе кадровом документе
как мне вывести
иванов иван ИСТИНА если есть этот доп реквизит (если его кто-то уже установил)
или
иванов иван ЛОЖЬ если он установлен в ложь или если его ещё никто не устанавливал (ну и как следствие — его нет в ТЧ допреквизиты)
запросом это можно сделать?

Добавлено через 3 минуты
а, да
вопрос, который я всегда сам задаю — а что вы сделали?
таки вот

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ВЫБРАТЬ
    КадровыйПеревод.Сотрудник КАК Сотрудник,
    КадровыйПеревод.Сотрудник.Код КАК СотрудникКод,
    КадровыйПеревод.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_Сотрудник
ИЗ
    Документ.КадровыйПеревод КАК КадровыйПеревод
ГДЕ
    КадровыйПеревод.Сотрудник = &Сотрудник
;
 
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КадровыйПереводДополнительныеРеквизиты.Ссылка.Сотрудник КАК Сотрудник,
    КадровыйПереводДополнительныеРеквизиты.Ссылка.Сотрудник.Код КАК СотрудникКод,
    ВЫБОР КОГДА КадровыйПереводДополнительныеРеквизиты.Свойство = Неопределено
        ТОГДА  "Нету"
        ИНАЧЕ КадровыйПереводДополнительныеРеквизиты.Значение
    КОНЕЦ КАК Значение,
    КадровыйПереводДополнительныеРеквизиты.Ссылка.Номер КАК Номер,
    КадровыйПереводДополнительныеРеквизиты.Ссылка.Дата КАК Дата
ИЗ
    ВТ_Сотрудник КАК ВТ_Сотрудник
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.КадровыйПеревод.ДополнительныеРеквизиты КАК КадровыйПереводДополнительныеРеквизиты
        ПО ВТ_Сотрудник.Ссылка = КадровыйПереводДополнительныеРеквизиты.Ссылка
ГДЕ
    КадровыйПереводДополнительныеРеквизиты.Свойство.Имя = "моёиммя"

танцевал с этим условием по-разному, которое щас выглядит как выбор когда тогда
но безуспешно

Добавлено через 19 минут
только если разделить на два и выполнить пакет? если результат второго пустой, то брать первый.
а тогда если там два кадровых документа . один заполнен второй нет этот доп реквизит. вроде тоже не выходит.



0



Scratchsv

369 / 173 / 74

Регистрация: 04.03.2020

Сообщений: 659

23.03.2021, 09:36

2

Лучший ответ Сообщение было отмечено Tklwegsd как решение

Решение

Может так:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
"ВЫБРАТЬ
    |   КадровыйПеревод.Сотрудник КАК Сотрудник,
    |   КадровыйПеревод.Сотрудник.Код КАК СотрудникКод,
    |   КадровыйПеревод.Ссылка КАК Ссылка,
    |   КадровыйПеревод.Номер КАК Номер,
    |   КадровыйПеревод.Дата КАК Дата,
    |   ЕСТЬNULL(КадровыйПереводДополнительныеРеквизиты.Значение, ЛОЖЬ) КАК Значение
    |ИЗ
    |   Документ.КадровыйПеревод КАК КадровыйПеревод
    |       ЛЕВОЕ СОЕДИНЕНИЕ Документ.КадровыйПеревод.ДополнительныеРеквизиты КАК КадровыйПереводДополнительныеРеквизиты
    |       ПО КадровыйПеревод.Ссылка = КадровыйПереводДополнительныеРеквизиты.Ссылка
    |           И (КадровыйПереводДополнительныеРеквизиты.Свойство.Имя = ""моёиммя"")
    |ГДЕ
    |   КадровыйПеревод.Сотрудник = &Сотрудник"



1



Phil

Эксперт 1С

434 / 305 / 92

Регистрация: 28.05.2014

Сообщений: 1,247

23.03.2021, 09:40

3

Yulunga, Ничего не понял, но очень интересно)

Есть документ и из него нужно получить значение доп реквизита?

Если есть БСП более-менее не старая, то

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Возвращает значение дополнительного свойства объекта.
//
// Параметры:
//  Объект   - ЛюбаяСсылка - ссылка на объект, например, СправочникСсылка.Номенклатура,
//                           ДокументСсылка.ЗаказПокупателя, ...
//  Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на
//                           дополнительный реквизит, значение которого нужно получить.
//           - Строка - имя дополнительного свойства.
//
// Возвращаемое значение:
//  Произвольный - любое значение, допустимое для свойства.
 
 
УправлениеСвойствами.ЗначениеСвойства(Объект,Свойство)



0



1142 / 689 / 203

Регистрация: 22.04.2013

Сообщений: 5,160

Записей в блоге: 1

23.03.2021, 10:09

 [ТС]

4

Scratchsv, спасибо.
это было самое очевидное решение
и, соответственно, самое первое, которое я попробовал
и не получилось
переделал с = неопределено — тоже не получилось.
хз кагтаг



0



369 / 173 / 74

Регистрация: 04.03.2020

Сообщений: 659

23.03.2021, 10:29

5

А чё не получилось-та. Не находит? Даёт ошибку?
Что говорит, когда нет? Когда истина? Ложь?
У меня подобный запрос нормально работает.

Добавлено через 8 минут
А, понял.
Могут быть глюки в СКД.
Там может так заоптимизировать запрос, что не дай БГ.
Тогда действительно, бубен нужен.
Или запрос на временные таблицы разбивать, или подзапросы, или вообще, запросом в таблицу выгружать, а уже оттуда формировать.



0



1142 / 689 / 203

Регистрация: 22.04.2013

Сообщений: 5,160

Записей в блоге: 1

23.03.2021, 11:10

 [ТС]

6

щас получилось. чо не получилось вчера — уже не найти. я запрос удалил. но делал также
интересно конечно что было не так. раз этот сработал а мой вчерашний — нет.
а то я уже начал в обработке запроса искать в плане видов арактеристик для данного документа заполнен реквизит или нет и на основании этого уже строить дальнейшие действия свои ))



0



Что у нас есть?

Пример будем приводить на конфигурации «Управление производственным предприятием» версии 1.3. В информационной базе для всех элементов справочника «Организации» добавлены свойства «Основной склад», «Связанный контрагент» и «Страна размещения». Нам нужно создать отчет в системе компоновки данных (СКД), в котором мы сможем накладывать отбор по дополнительным характеристиками организаций.

При этом мы будем использовать стандартный функционал СКД для работы с характеристиками объектов. Также рассмотрим особенность разработки подобных отчетов, а именно — отсутствие возможности использовать дополнительные характеристики в конструкторе схемы компоновки данных в режиме «Конфигуратор». Последнее не позволяет использовать поля характеристик в настройке выводимых полей в отчете, отборах, группировка в структуре отчета и так далее.

Создаем отчет и настраиваем характеристики

Создадим простой отчет. В нем будет один набор данных со следующим запросом:

ВЫБРАТЬ
  Организации.Ссылка КАК Организация,
  Организации.ИНН,
  Организации.КПП
ИЗ
  Справочник.Организации КАК Организации

Структура отчета будет иметь вывод только по детальным записям со всеми полями, выбираемыми в запросе. В конструкторе настройка структуры отчета будет выглядит следующим образом:

На скриншоте ниже представлен вывод отчета с текущими настройками.

Отлично. Теперь перейдем к настройке характеристик, но перед этим напомню в общих чертах работу механизма характеристик в большинстве типовых конфигураций, в том числе и УПП. Для этого используются несколько объектов конфигурации.

  • План видов характеристик СвойстваОбъектов
  • Регистр сведений ЗначенияСвойствОбъектов

Графически связь между объектом информационной базы и его характеристиками можно изобразить по такой схеме:

Опишем схему подробнее. В регистре сведений ЗначенияСвойствОбъектов в измерении Объект содержится ссылка на элемент информационной базы, для которого сохраняется свойство. В нашем примере это ссылка на элемент справочника Организации. Все возможные свойства объекта определяются в плане видов характеристик (ПВХ) СвойстваОбъектов. Значение характеристики, сохраняемое в регистре сведений, зависиот от доступных типов данных для элемента плана видов характеристик, записанного в измерение Свойство. Это описание должно дать лишь общее представление о механизме доп.свойств. На практике он сложнее.

Теперь перейдем к настройке характеристик в схеме компоновки данных. Для этого запустим конструктор запроса и перейдем на вкладку «Характеристики». Здесь нужно добавить поле связи объекта информационной базы с таблицами свойств и значений свойств. Ранее мы рассматривали схему связи между объектами конфигурации для хранения доп.свойств/характеристик. В соответствии с этой информацией настройка будет следюущей:

После этого запрос набора данных дополнится инструкциями получения характеристик объектов.

ВЫБРАТЬ
  Организации.Ссылка КАК Организация,
  Организации.ИНН,
  Организации.КПП
ИЗ
  Справочник.Организации КАК Организации
// Доп. инструкции для получения характеристик
{ХАРАКТЕРИСТИКИ
  ТИП(Справочник.Организации)
  ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.СвойстваОбъектов
  ПОЛЕКЛЮЧА Ссылка
  ПОЛЕИМЕНИ Наименование
  ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
  ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначенияСвойствОбъектов
  ПОЛЕОБЪЕКТА Объект
  ПОЛЕВИДА Свойство
  ПОЛЕЗНАЧЕНИЯ Значение}

На этом все. Функционал отчета теперь позволяет выбрать поля дополнительных характеристик в отчете (поля вывода, отборы и т.д.). Но есть одно НО. Использовать эти поля в настройках отчета мы можем только в режиме 1С:Предприятия. В конфигураторе мы не можем увидеть поля характеристик, что логично, ведь характеристики вводятся пользователем и хранятся в информационной базе.

Но если есть необходимость, мы можем добавить поля характеристик, например, в отбор перед его открытием. Рассмотрим небольшой пример.

Программная работа с характеристиками

При открытии формы отчета выполним следующим программный код:

ТекущиеНастройки = КомпоновщикНастроек.Настройки;
КоллекцияОтборов = ТекущиеНастройки.Отбор.Элементы;

// Добавляем отбор по доп. реквизиту номенклатуры "Основной склад" 
НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Основной склад]");
НовЭл.Использование = Ложь;

// Добавляем отбор по доп. реквизиту номенклатуры "Страна размещения"
НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Страна размещения]");
НовЭл.Использование = Ложь;

// Добавляем отбор по доп. реквизиту номенклатуры "Связанный контрагент"
НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]");
НовЭл.Использование = Ложь;

Тогда если мы посмотрим в отбор отчета в режиме 1С:Предприятие, то увидим следующиую картину:

Таким образом, мы программно добавили отбор по дополнительным характеристикам справочника Организации, не смотря на то, что в конструкторе СКД эти поля не были доступны. Обратите внимание на синтаксис определения поля компоновки данных.

Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]")

а именно на текст [Связанный контрагент]. Если мы напишем вот так:

Новый ПолеКомпоновкиДанных("Организация.СвязанныйКонтрагент"),

то при запуске отчета СКД неправильно определит поля компоновки. В настройках поля отбора будут выделены как некорректные:

Для дополнительных свойст и реквизитов, которые не доступны в конструкторе СКД, при программном обращении необходимо использовать следующий синтаксис:

Новый ПолеКомпоновкиДанных(".[]")

Таким образом, мы можем устанавливать настройки отчета, даже если поля недоступны в конструкторе СКД.

Вывод

Использование настройки характеристик в СКД позволяет значительно упростить разработку сложных отчетов. Несмотря на некоторые недостатки в работе, такие как отсутствие возможности настройки отбора по доп. свойствам в конструкторе и т.д., механизм характеристик можно считать значительным шагом в упрощении разработки отчетов в системе 1С:Предприятие.

В статье мы рассмотрели далеко не все возможности характеристик в СКД. За рамками статьи остались такие возможности как: произвольное определение источников данных, как для свойств, так и для значений характеристик, а также отбор по владельцу для всех доступных характеристик в информационной базе и многое другое. Тема большая, есть куда расширять круг своих знания.

Доброго дня, коллеги!

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

Сегодня у нас похожий случай, когда очередной слушатель, изучая курс Разработка и оптимизация запросов в 1С:Предприятие 8.3, разбираясь в синтаксисе языка запросов 1С, обнаружил занятную деталь.

Вопрос

Если необходимо отобрать тип регистратора для записей регистра, то можно воспользоваться несколькими разными вариантами:

● ГДЕ ТИПЗНАЧЕНИЯ(ТоварныеЗапасы.Регистратор) = ТИП(Документ.РасходТовара)
● ГДЕ ТоварныеЗапасы.Регистратор ССЫЛКА Документ.РасходТовара
● ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РасходТовара)

А какой из вариантов оптимален с методической точки зрения? Предположительно ВЫРАЗИТЬ исполнится до отбора данных. Так ли это?

Ответ

Можно использовать первые два варианта – оператор ССЫЛКА или функцию ТИПЗНАЧЕНИЯ.
При помощи оператора ВЫРАЗИТЬ можно привести значение только к одному типу:

ВЫРАЗИТЬ Поле КАК Тип

Т.е. сам по себе он не выполняет отбор. Нужно дополнительно в секции ГДЕ установить отбор.


Оператор ССЫЛКА не убирает лишние неявные соединения (это можно проверить при помощи просмотра плана запроса в консоли), а накладывает отбор по типу. А ВЫРАЗИТЬ явно говорит, что поле будет иметь не составной тип, а одну конкретную ссылку, поэтому не будет лишних соединений.

У оператора ССЫЛКА есть особенность.


Пусть используется следующий фрагмент запроса:

&ЦеноваяГруппа ССЫЛКА Справочник.ЦеновыеГруппы


Если в качестве значения параметра ЦеноваяГруппа установить, например, ссылку на справочник «Номенклатура», система выдаст ошибку:


Несовместимые типы “ССЫЛКА”
& ЦеноваяГруппа <<?>>ССЫЛКА Справочник.ЦеновыеГруппы


При работе с реквизитами составного типа тоже может возникать такая же ошибка. Например, документ «РеализацияТоваровУслуг» не входит в составной тип реквизита ДокументОснование документа «Авансовый Отчет». При выполнении запроса будет ошибка:

ВЫБРАТЬ
    АвансовыйОтчет.ДокументОснование ССЫЛКА Документ.РеализацияТоваровУслуг
 ИЗ Документ.АвансовыйОтчет КАК АвансовыйОтчет

Причем конструктор запроса даже не будет открываться. ТИПЗНАЧЕНИЯ при этом отработает корректно.


Фирма 1С поясняет это следующим образом:
«Язык запросов выдает эту ошибку, если в типе проверяемого выражения отсутствует ссылка на проверяемую таблицу

Вот такую особенность нужно учитывать при разработке запросов.

Кстати, завтра мы вновь вернемся к запросам. Обещаем, будет интересно!

P.S.

Понимать, как работают запросы и уметь их строить — обязательный навык для всех, кто дорабатывает и внедряет 1С.

После курса Вы сможете:

  • Строить сложные запросы с несколькими источниками данных
  • Уверенно задействовать вложенные запросы и временные таблицы
  • Использовать встроенный язык для обработки результатов запроса
  • Учитывать особенности соединений и объединений нескольких таблиц.
  • Разрабатывать запросы на уровне задач Аттестации 1С:Специалист по платформе.

Понравилась статья? Поделить с друзьями:
  • Авито сменить частное лицо на компанию на авито
  • Акционерное общество страховая компания аскомед
  • Азбука вкуса лермонтовский проспект часы работы
  • 1с ошибка при добавлении реквизита в расширение
  • Авто бизнес класса для такси под выкуп в москве