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С Бухгалтерия » Можно ли установить отбор по двум Доп. реквизитам в журнале документов в 1С

Вопрос задал
Наталья М. (Саратов, Саратовская область)

Ответственный за ответ:
Шаврова Ирина (★9.90/10)

Можно поставить одновременно два условия? Подписан и Подпись УПД (доп.реквизит).

Обсуждение (30)

  1. Приложение

    Здравствуйте!
    Подскажите, пожалуйста, я правильно поняла, что проблема именно в том, что вам не вывести в отбор дополнительный реквизит? Что вы его не видите в списке реквизитов при настройке списка и поэтому не можете вывести условие Подпись УПД … в Шапку для отбора?

    Если так, то я вам постараюсь помочь.
    Я покажу в ответе вывод дополнительного реквизита/сведения в условия Отбора на двух примерах:

    — при добавлении дополнительного сведения в счф вданный (вы пишите про дополнительный реквизит к счф, но в типовой форме настройки объектов для дополнительных реквизитов нет возможности добавить к счф выданному дополнительный реквизит, только дополнительное сведение. Если вы добавили все-таки дополнительный реквизит (судя высланному по скрину это так), то, скорее всего, у вас доработанная программа).

    — при добавлении дополнительного реквизита на примере Ведомости в банк (там типовая настройка позволяет добавить дополнительный реквизит).

    Первый вариант для счф:
    В разделе Администрирование — Обшие настройки — Дополнительные реквизиты и сведения переходим на ссылку Дополнительные сведения и добавляем данные Подпись УПД (Реализация (акты, накладные, УПД) , Булево.

  2. В списке сф выданных установка дополнительных сведений происходит по специальной кнопке, как показано на скрине.

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

    В Шапке будут отражены все установленные нами условия: типовой реквизит счф выданной «Проведен» и дополнительное сведение «Подпись УПД…»

  3. Приложение

    Устанавливая флаги в указанных отборах, мы добиваемся получения нужной информации в нужном нам разрезе. В данном случае условия работают по схеме «И», т.е, например, при установке флага «Проведен» и флага «Подпись УПД…» отбираются все проведенные данные с подписью УПД. Хотя есть возможность настраивать более сложные схемы отборов, используя группировки условий по группам «ИЛИ», «И», «НЕ», используя кн. «Сгруппировать условия».

    В моем примере оба условия «Проведен» (Нет) и «Подпись УПД…» (Да) отработали как показано на скрине.

  4. Это настройка для списков счф выданной типовой конфигурации.

    Второй вариант для дополнитильного РЕКВИЗИТА, например, для документа Ведомость в банк.

    Добавляем дополнительный реквизит для указанного документа: он появляется в форме ведомости — именно там мы с ним работаем.

    После этого открываем настройку списка по кн. ЕЩЕ — Настроить список, спускаемся к реквизиту Ссылка, раскрываем «плюсик» слева и находим наш новый реквизит «Дополнительный реквизит».

    Переносим его в настройку Отбора и используем в работе.

    Подробно по шагам показано на скринах.

    Насколько я понимаю — это ваш случай, в Шапку условие отбора по вашему дополнительному реквизиту вы перенесете, раскрыв данные Ссылки.

  5. Программа типовая. Возможно я добавила дополнительные сведения, а не реквизит.
    У меня не получается сделать отбор по «Оригинал подписан», а потом еще одно условие добавить «Подпись УПД=ДА»

  6. Если отбор стоит только по Подписан, то работает. Если установить еще и Подпись УПД, то все пусто.

  7. Добрый день, тогда соберите все скрины в один файл и прикрепите к ответу: все файлы от вас видит только куратор, поэтому пришлите все максимально подробно.
    В файле укажите место обоих доп. реквизитов или сведений, где создали в программе (как сделала в ответе я). И как создаёте условия в настройке списка.
    Прямо по шагам и уточните, в чем проблема?
    Я очень подробно описала вывод условий и работу с ними для случаев как с доп. реквизитом, так и для доп. сведения. И как выбрать условие. Поэтому, не видя вашей базы, не могу понять, почему у вас не получается вывести в Шапку условия для использования.

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

  8. Если поставить отбор Подпись УПД=ДА, тоже работает.

  9. В шапку мне нет необходимости выводить, но я вывела. У меня не срабатывает сам ДВОЙНОЙ отбор по типу НЕТ в реквизите Подпись УПД.

  10. Спасибо за файлы, теперь ещё два главных скрина: как созданы и где реквизиты Подписан и Подпись УПД.

  11. Важно видеть создание данных, что не выводятся: какой тип задан при создании, как это выглядит при раскрытии карточки этого Подпись УПД и Подпись тоже желательно видеть, чтобы понимать их взаимосвязь.

  12. И ещё сделайте скрин, где есть хотя бы один вариант с установленным значением Да для «Подпись УПД».
    Если везде «Нет» то на некоторых платформах может не работать отбор, поскольку нет разных данных для него.
    Но нужно всё-таки для начала посмотреть карточку слздания используемых данных.

  13. Подписан — это стандартный механизм для галочек. Подпись УПД — доп. сведения по умолчанию проставляется — НЕТ. Подпись УПД создавала если на документе есть подпись получателя, но нет ни печати, ни доверенности. Соответственно проставляю доп.сведения, но не ставлю галочку, что документ подписан.

  14. Не вижу ошибок в создании доп. сведения. Поэтому уберите группировку в настройке отбора и выведите:
    1. отбор только для Подпись УПД (проверьте для Да и Нет)
    2. Добавьте условие Подпись. Без группировки! Это и так работает по схеме «И». Проверьте работу в различных вариантах.

    Удалите все настройки отбора перед этим, что есть сейчас: помимо схемы «И» у вас дважды использовано «Подпись».

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

    Если там все ок, то попробуйте условие для Подпись УПЛ «Не» Да, возможно, ошибка в воспринятии программой значения Нет для данного реквизита — это уже смотреть только по тестированию базы.
    Пока пробуем все вышеуказанное.

  15. Еще один момент давайте отработаем: проставьте принудительно в доп. сведение «Подпись УПД» в нескольких случаях «Нет» и сохраните. Не по умолчанию — сами. И сделайте отбор. Возможно, без ручного выбора что-то возвращается типа «Неопределено» на самом деле, поэтому нужно исключить и этот случай. Если все получится, то, чтобы не перебивать Нет — будете использовать отбор по «Не» Да.

    Хотя в моих примерах все отработало корректно по доп. сведению Подпись УПД.

    Я бы вам в любои случае рекомендовала провести тестирование и исправление базы данных, возможно, есть внутренние ошибки.

  16. Да, вы были правы. Не срабатывает отбор по «НЕТ».

  17. Даже принудительно поставила, все равно не срабатывает.

    1. Приложение

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

      По идее, должно быть все хорошо и при автоматической установке НЕТ по умолчанию, но, похоже, что возвращается неопределено там. И тогда непонятно, почему не отрабатывает Не равно ДА, ведь в этом случае должны попасть значения любые отличные от ДА.
      Хотя, возможно, при отборе все равно анализируется не все, а только два значения, заложенных в типе Булево: ДА и НЕТ, тогда ситуация более-менее понятна.

  18. Не равно = Да, тоже не срабатывает.((

  19. Тогда что-то с данными Подпись УПД по значению НЕТ.

    Попробуйте создать новое доп. сведение Подпись УПД РТУ, например, в пару Подпись УПД и попробуйте взять в отбор его.
    У меня отбор по созданному доп. сведению Подпись УПД (скрин приводила выше в ответах) нормально отрабатывает на НЕТ и ДА, поэтому есть вероятность довольно высокая, что что-то нехорошо с его данными — это может показать тестирование и исправление базы, которая ловит внутренние ошибки.

  20. Приложение

    Еще однин момент, посмотрела сейчас по коду, программа реагирует еще на данные ЗАПОЛНЕНО (=ДА), НЕ ЗАПОЛНЕНО (=НЕТ).
    Попробуйте по этим условиям выставить. Поменяйте принудительно где-нибудь на НЕТ, кн. ЕЩЕ — Обновить (обновляется список) и посмотрите результат.

    Это должно сработать, это более распространенное условие, которое работает для всех типов: Булево, Строка, объекты.

  21. Новое доп.сведения тоже не срабатывает. А Ваше по отбору «НЕТ» я не увидела. У вас правда срабатывает?

  22. До этого пробовала, не получалось.

  23. Вот смотрите, прилагаю скрины — у меня все работает в тестовой базе (3.0.103.12)

  24. Видно по номерам СФ, что не пересекаются отобранные данные. В форму списка я не выводила доп. сведение, работаю только в Шапке с условиями.

  25. Спасибо! Можно закрывать.

    1. Рада была помочь! Обращайтесь, пожалуйста.

  26. Приложение

    Вот вывела доп. сведение в форму списка, прилагаю скрины. Это условие точно должно работать. Это действует на все типы объектов.
    Если нет — проверяйте базу на Тестирование и исправление. сначала в копии.

Комментарии закрыты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вывод

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

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

Дополнительные реквизиты объектов с помощью плана видов характеристик

Достаточно часто возникает необходимость в добавлении объектам дополнительных реквизитов (характеристик). При этом каждый раз вносить для этого изменения в конфигурацию и проводить реструктуризацию базы данных не хочется.

В этой статье я расскажу о том, как реализовать такую возможность с помощью плана видов характеристик и регистра сведений и поделюсь парой приёмов использования этих реквизитов в отчётах и списках.

Быстрый переход

  • Изменения в конфигурации
  • Использование дополнительных реквизитов в отчётах и списках
    • Вариант №1
    • Вариант №2

Изменения в конфигурации

Разработку конфигурации будем вести на базе платформе 1С: Предприятие 8.2 с установленным свойством “Основной режим запуска” – “Управляемое приложение”. В качестве основы для разработки подойдет любая демо-конфигурация. Добавим новый план видов характеристик “Виды характеристик”. На закладке “Основные” плана видов характеристик в поле “Тип значения характеристик” выберем необходимые типы.

plany-vidov-harakteristik-tip-znacheniya

В качестве одного из возможных типов значений характеристик выберем предварительно добавленный в конфигурацию справочник “Значения характеристик”, подчиненный плану видов характеристик “Виды характеристик”. Его же выберем в поле “Дополнительные значения характеристик”. Это позволит добавлять характеристики с произвольными ссылочными значениями (например, цвет или размер).

Создадим регистр сведений “Характеристики” с измерениями “Объект”, “Вид характеристики” и ресурсом “Значение”. Измерение “Объект” должно включать в себя все типы объектов для которых необходимо использовать дополнительные реквизиты. В нашем случае это будет справочник “Контрагенты”, В свойствах измерения “Объект” должны быть установлены флаги “Ведущее”, “Основной отбор” и “Запрет незаполненных”.

osnovnoj-otbor-u-rekvizitaЭто обеспечит связь объекта с записями регистра сведений. В форме элемента справочника “Контрагенты” переход к редактированию характеристик будет возможен с помощью соответствующего пункта меню “Перейти” в левой части формы.

Измерению “Вид характеристики” необходимо назначить тип “ПланВидовХарактеристикСсылка.ВидыХарактеристик”, а ресурсу “Значение” – “Характеристика.ВидыХарактеристик”.

Для обеспечения взаимосвязи значений ресурса “Значение” со значениями измерения “ВидХарактеристик” регистра “Характеристики” необходимо чтобы в свойстве “Связи параметров выбора” ресурса “Значение” было указано “Отбор.Владелец(ВидХарактеристики)”, а в свойстве “Связь по типу” – “ВидХарактеристики”

otbor-znacheniya-po-tipu-v-harakteristka

Теперь всё готово для того чтобы мы могли вводить в базу данных дополнительные реквизиты справочника “Контрагенты”.

Попробуем добавить дополнительный реквизит “Адрес”

primer-ispolzovaniya-plana-harakteristik

Использование дополнительных реквизитов в отчётах и списках

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

Вариант №1

Начнём с использования характеристик в отчёте, разработанном с использованием системы компоновки данных. За основу возьмём отчёт “Ведомость взаиморасчетов”. Добавим в конфигурацию копию этого отчёта и назовём его “Ведомость взаиморасчетов (с характеристиками)”.

Оригинал отчёта нам понадобится для демонстрации второго варианта использования характеристик.

Итак, откроем набор данных “Взаиморасчеты” схемы компоновки данных нашего отчета в конструкторе запросов и перейдем на закладку “Характеристики”.

konstruktor-harakteristika

  • В таблицу на вкладке “Характеристики” добавим строку.
  • В поле “Тип” выберем “СправочникСсылка.Контрагенты” (это объект для которого в отчёте необходимо использовать дополнительные характеристики).
  • В поле “Источник видов” выберем вариант “Запрос” (хотя в нашем случае можно ограничиться и вариантом “Таблица”).
  • В колонку “Виды характеристик” внесём текст запроса, которым будут выбираться виды характеристик, используемые для справочника “Контрагенты”.

Текст запроса обязательно должен содержать три поля – ссылка на вид характеристики, наименование характеристики и тип значения характеристики. Наименования этих полей выбираются в колонках “Поле ключа”, “Поле имени” и “Поле типа значения” таблицы на закладке “Характеристики”.

  • Для визуального выделения дополнительных реквизитов объекта в запросе по видам характеристик к наименованиям добавлен текст “(доп. реквизит)”.
  • В колонке “Источник значений” на вкладке “Характеристики” выберем вариант “Таблица”.
  • В колонке “Значения характеристик” выберем “РегистрСведений.Характеристики”,
  • в колонке “Поле объекта” – наименование измерения регистра “Объект”,
  • в колонке “Поле вида” – наименование измерения “ВидХарактеристики”,
  • в колонке “Поле значения” – наименование ресурса “Значение”.

В тексте запроса схемы компоновки результат добавления характеристик выглядит следующим образом (в обычных запросах применение таких конструкций невозможно):

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

Проверим работу отчёта. Для этого откроем отчёт “Ведомость взаиморасчетов (с характеристиками)”. Перейдем в пункт меню “Все действия -> Изменить вариант”. В окне настроек перейдём на закладку “Отбор” и добавим отбора по дополнительному реквизиту контрагента “Адрес”

otbor-v-skd

Вариант №2

Рассмотрим более универсальный вариант работы с характеристикам объектов, благодаря которому характеристики возможно будет использовать в любых отчетах, содержащих объект-владелец характеристик, а также устанавливать отборы по значению этих характеристик в формах списков.
Перейдём на закладку “Данные” справочника “Контрагенты” и нажмём кнопку “Характеристики”.

dopolnitelnye-harakteristiki-obekta-metadannyh

  • В открывшемся окне “Дополнительных характеристик объекта метаданных” добавим строку.
  • В колонке “Виды характеристик” выберем “ПланВидовХарактеристик.ВидыХарактеристик”, в колонке “Поле ключа” – “Ссылка”.
  • В колонке “Значения характеристик” выберем “РегистрСведений.Характеристики”, в колонке “Поле объекта” – “Объект”,
  • в колонке “Поле вида” – “ВидХарактеристики”, в колонке “Поле значения” – “Значение”.

Сохраним конфигурацию и попробуем воспользоваться дополнительными характеристиками справочника “Контрагенты” в форме списка (в отчёте “Ведомость взаиморасчетов” использование дополнительных реквизитов будет выглядеть аналогичному тому как это было описано в Варианте №1, с той лишь разницей, что наименованию вида характеристики не будет добавляться текст “(доп. реквизит)”).

Откроем список справочника “Контрагенты”, перейдем в пункт меню “Все действия -> Настройка списка” и установим отбор по дополнительному реквизиту “Адрес”.

nastrojka-spiska-dobavlenie-v-otbor

Стоит отметить, что при использовании Варианта №1 в отчётах с использованием СКД отключается приведенный механизм платформы и используется описанный пользователем.

Статья найдена на просторах интернета.

Делать деньги без рекламы может только монетный двор.

Рассмотрим различные варианты установки отбора при выборе объекта на документе ДокументОтборПриемаТовара. У документа имеются следующие реквизиты (см. рисунок 1):

  • ПоставщикОтбор (тип СправочникСсылка.Поставщики);
  • ТоварОтбор (тип СправочникСсылка.Товары);
  • ОтветственныйОтбор (тип СправочникСсылка.Ответственный);
  • ПриемТовара (тип ДокументСсылка.ПриемТовара).
Рисунок 1. Структура документа ДокументОтборПриемаТовара

Выбирать будем документ ПриемТовара, а отбор в форме выбора будет устанавливаться по реквизитам с постфиксом Отбор.

Документ ПриемТовара имеет реквизиты (см. рисунок 2):

  • Поставщик (тип СправочникСсылка.Поставщики);
  • Ответственный (тип СправочникСсылка.Ответственный);
  • Комментарий (Тип Строка).

А так же табличную часть Товары, состоящую из реквизитов Товар (тип СправочникСсылка.Товары) и Количество (тип Число).

Рисунок 2. Структура документа ПриемТовара

1. Установка отбора в свойствах реквизита объекта метаданных

Самый простой вариант отбора. Нужно всего лишь в свойствах реквизита «Связи параметров выбора»  и «Параметры выбора» задать параметры выбора. Допустим, при выборе документа ПриемТовара, нужно в форме выбора показывать документы отобранные по поставщику и только проведенные. Для этого в связях параметров выбора задаем отбор по поставщику, а в параметрах выбора отбор только проведенных документов (см. рисунок 3).

Рисунок 3. Отбор в свойствах реквизита объекта метаданных

Больше ничего делать не нужно, платформа сама завернет указанные параметры выбора в структуру (см. рисунок 4) и поместит её в параметр Отбор формы выбора, далее, анализируя данный параметр формы, платформа устанавливает отборы для динамического списка.

Рисунок 6. Значение параметра формы выбора Отбор

2. Установка отбора в свойствах элемента формы

Такой же простой вариант как и первый, только те же самые свойства задаются для элемента формы (см. рисунок 5).

Рисунок 5. Отбор в свойствах элемента формы

Свойства элемента формы имеют приоритет над свойствами реквизита объекта.

3. Установка собственного отбора при создании формы выбора на сервере

Усложним задачу и будем производить отбор документов по табличной части, а конкретно по товару в ней. Для этого в связях параметров выбора зададим связь, где параметр будет Товар (прям ручками пишем), а реквизит ТоварОтбор (см. рисунок 6).

Рисунок 6. Связь параметра Товар с реквизитом ТоварОтбор

Именно такую задаем связь, так как более одной точки(.) в колонке Имя при написании параметра мы не можем использовать (платформенное ограничение), то есть написать «Отбор.Товары.Товар» мы не сможем.
Так как имя параметра мы задали вручную, то платформа его не поместит в параметр Отбор формы выбора, поэтому в форме выбора документа ПриемТовара в обработчике события ПриСозданииНаСервере напишем программный код, который будет обрабатывать наш параметр Товар и устанавливать отбор по реквизиту табличной части:

  
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

4. Программная установка параметров выбора

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

  
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Создаем связи параметров выбора.
МассивСвязей = Новый Массив;
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Поставщик", "Объект.ПоставщикОтбор");
МассивСвязей.Добавить(НоваяСвязь);
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Ответственный", "Объект.ОтветственныйОтбор");
МассивСвязей.Добавить(НоваяСвязь);
НоваяСвязь = Новый СвязьПараметраВыбора("Товар", "Объект.ТоварОтбор");
МассивСвязей.Добавить(НоваяСвязь);

// Создаем параметры выбора.
МассивПараметров = Новый Массив;
НовыйПараметр = Новый ПараметрВыбора("Отбор.Проведен", Истина);
МассивПараметров.Добавить(НовыйПараметр);

// Устанавливаем связи параметров и параметры выбора для элемента формы.
Элементы.ПриемТовара.СвязиПараметровВыбора = Новый ФиксированныйМассив(МассивСвязей);
Элементы.ПриемТовара.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);

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

Для корректной работы отборов необходимо создать событие ПриСозданииНаСервере с таким же программным кодом как в варианте №3 у формы выбора документа ПриемТовара.

5. Установка параметров выбора в момент начала выбора

Этот вариант позволяет «на лету» устанавливать параметры выбора. Усложним задачу и будем устанавливать отбор только по заполненным реквизитам отбора.
В модуле формы документа ДокументОтборПриемаТовара в событии НачалоВыбора для элемента ПриемТовара, который связан с реквизитом объекта ПриемТовара, напишем код, который будет устанавливать параметры выбора в зависимости от заполненности реквизитов отбора:

  
&НаКлиенте
Процедура ПриемТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

МассивПараметров = Новый Массив;
Если ЗначениеЗаполнено(Объект.ПоставщикОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Отбор.Поставщик", Объект.ПоставщикОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ОтветственныйОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Отбор.Ответственный", Объект.ОтветственныйОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ТоварОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Товар", Объект.ТоварОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
НовыйПараметр = Новый ПараметрВыбора("Отбор.Проведен", Истина);
МассивПараметров.Добавить(НовыйПараметр);
Элементы.ПриемТовара.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);

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

Для корректной работы отборов необходимо создать событие ПриСозданииНаСервере с таким же программным кодом как в варианте №3 у формы выбора документа ПриемТовара.

6. Открытие формы выбора с установленным параметром формы Отбор в момент начала выбора

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

  
&НаКлиенте
Процедура ПриемТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

Отбор = Новый Структура;
Если ЗначениеЗаполнено(Объект.ПоставщикОтбор) Тогда
Отбор.Вставить("Поставщик", Объект.ПоставщикОтбор);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ОтветственныйОтбор) Тогда
Отбор.Вставить("Ответственный", Объект.ОтветственныйОтбор);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ТоварОтбор) Тогда
Отбор.Вставить("Товары", Новый Структура("Товар", Объект.ТоварОтбор));
КонецЕсли;
Отбор.Вставить("Проведен", Истина);
ПараметрыФормы = Новый Структура("Отбор", Отбор);
ОткрытьФорму("Документ.ПриемТовара.ФормаВыбора", ПараметрыФормы, Элемент);

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

Отборы на динамический список платформа наложит сама, писать дополнительно код больше не нужно, как в варианте №3.

А что будет, если отбор в связях параметров выбора и параметры выбора пересекаются?

Как показал мой эксперимент, страшного ничего не случится, платформа установит отбор по связям параметров выбора.

Понравилась статья? Поделить с друзьями:
  • 1с перед записью проверить изменение реквизита
  • 1с передать с клиента на сервер реквизит формы
  • 1с получить значение реквизита формы документа
  • 1с получить список всех реквизитов справочника
  • 1с предприятие как проверить что есть реквизит