Отбор по значению дополнительных реквизитов |
Я |
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
ИЗ
ВТ_ИтогПоКоличествуЗаказов КАК ВТ_ИтогПоКоличествуЗаказов,
ВТ_КоличествоИСуммаЗаказов КАК ВТ_КоличествоИСуммаЗаказов
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтгруженныеЗаказы КАК ВТ_ОтгруженныеЗаказы
ПО ВТ_КоличествоИСуммаЗаказов.Менеджер = ВТ_ОтгруженныеЗаказы.ЗаказМенеджер
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЗаказыЕщёВРаботе КАК ВТ_ЗаказыЕщёВРаботе
ПО ВТ_КоличествоИСуммаЗаказов.Менеджер = ВТ_ЗаказыЕщёВРаботе.ЗаказМенеджер
1 — 23.10.17 — 07:59
(0+) Нет ссылки в запросе для связи с таблицей дополнительные реквизиты. Не соображу как её прицепить к нему(
2 — 23.10.17 — 08:00
(0) сначала отдельным запросом отобрази все доп реквизиты, определись с нужным допреквизитом после «свойство» если я не ошибаюсь допустим оно будет «источник» в условии получится
Где
допреквизиты.свойство=»источник»
и допреквизиты.значение=&НужноеЗначение
както так.
3 — 23.10.17 — 08:01
ИЗ
Документ.ЗаказКлиента КАК ЗаказКлиента
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты
ПО ЗаказКлиентаДополнительныеРеквизиты.Ссылка = ЗаказКлиента.Ссылка
4 — 23.10.17 — 08:03
И СостоянияЗаказовКлиентов.Заказ.ПометкаУдаления = ЛОЖЬ
И СостоянияЗаказовКлиентов.Заказ.Проведен = ИСТИНА
подстраховался на всякий случай?
5 — 23.10.17 — 08:05
(2) Важно кажется задавать только значение.
Да все правильно у вас.
Но вот этот запрос в (0), как сделать отбор по значению
дополнительных реквизитов в нем? Не пойму как прицепить к нему эти доп реквизиты.
(3) Это правильно. Но видите у меня в пакетных запросах подсчитывается количество. Получается отбор нужно накладывать на каждый пакет, т.к. нужно видеть данные с отбором по источнику.
Но возможно ли это сделать в запросе (0) Ссылки на заказ то в пакетах нет, что бы связывать с таблицей дополнительные реквизиты.
6 — 23.10.17 — 08:06
(4) Ну вроде это нужно делать. Не знаю стоит ли устанавлявать ложи на пометку удаления? Так как проведен в истину и так отберет же только проведенные. А проведенные не могут быть помеченными на удаление?!
7 — 23.10.17 — 08:08
(5) нифига не понял что тебе не нравится. В пакетных запросах ссылка есть. соединяй с ТЧ и фильтруй. Не вижу никаких проблем
8 — 23.10.17 — 08:11
(6)»ложи» — нет такого слова, есть слово «клади».
9 — 23.10.17 — 08:15
(8) Не сильно за грамматикой сейчас слежу.
(7) Есть группировка по менеджеру, ссылка используется для подсчета количества, и сумма.
Может я чего то не понимаю, но как вот в этих к примеру двух пакетах наложить отбор на значение таблицы дополнительных реквизитов?
Как её прицепить к ним, что бы наложить отбор?
10 — 23.10.17 — 08:15
(9+)
ВЫБРАТЬ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказКлиента.Ссылка) КАК ИтогПоКоличествуЗаказов
ПОМЕСТИТЬ ВТ_ИтогПоКоличествуЗаказов
ИЗ
Документ.ЗаказКлиента КАК ЗаказКлиента
ГДЕ
ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата
И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ
И ЗаказКлиента.Проведен = ИСТИНА
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗаказКлиента.Менеджер,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ЗаказКлиента.Ссылка, 0)) КАК КоличествоЗаказов,
СУММА(ЕСТЬNULL(ЗаказКлиента.СуммаДокумента, 0)) КАК СуммаЗаказов
ПОМЕСТИТЬ ВТ_КоличествоИСуммаЗаказов
ИЗ
Документ.ЗаказКлиента КАК ЗаказКлиента
ГДЕ
ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата
И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ
И ЗаказКлиента.Проведен = ИСТИНА
СГРУППИРОВАТЬ ПО
ЗаказКлиента.Менеджер
;
////////////////////////////////////////////////////////////////////////////////
11 — 23.10.17 — 08:18
(9)
ВЫБРАТЬ
ЗаказКлиента.Менеджер,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ЗаказКлиента.Ссылка, 0)) КАК КоличествоЗаказов,
СУММА(ЕСТЬNULL(ЗаказКлиента.СуммаДокумента, 0)) КАК СуммаЗаказов
ПОМЕСТИТЬ ВТ_КоличествоИСуммаЗаказов
ИЗ
Документ.ЗаказКлиента КАК ЗаказКлиента
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты
ПО ЗаказКлиентаДополнительныеРеквизиты.Ссылка = ЗаказКлиента.Ссылка
ГДЕ
ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата
И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ
И ЗаказКлиента.Проведен = ИСТИНА
И ЗаказКлиентаДополнительныеРеквизиты.Свойство = &Свойство
И ЗаказКлиентаДополнительныеРеквизиты.Значение = &Значение
СГРУППИРОВАТЬ ПО
ЗаказКлиента.Менеджер
Дальше сам думай
12 — 23.10.17 — 08:21
(11) А так нельзя?
ВЫБРАТЬ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказКлиента.Ссылка) КАК ИтогПоКоличествуЗаказов
ПОМЕСТИТЬ ВТ_ИтогПоКоличествуЗаказов
ИЗ
Документ.ЗаказКлиента КАК ЗаказКлиента
ГДЕ
ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата
И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ
И ЗаказКлиента.Проведен = ИСТИНА
И ЗаказКлиента.ДополнительныеРеквизиты.Значение = &Знач
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗаказКлиента.Менеджер,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ЗаказКлиента.Ссылка, 0)) КАК КоличествоЗаказов,
СУММА(ЕСТЬNULL(ЗаказКлиента.СуммаДокумента, 0)) КАК СуммаЗаказов
ПОМЕСТИТЬ ВТ_КоличествоИСуммаЗаказов
ИЗ
Документ.ЗаказКлиента КАК ЗаказКлиента
ГДЕ
ЗаказКлиента.Дата МЕЖДУ &НачДата И &КонДата
И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ
И ЗаказКлиента.Проведен = ИСТИНА
И ЗаказКлиента.ДополнительныеРеквизиты.Значение = &Знач
СГРУППИРОВАТЬ ПО
ЗаказКлиента.Менеджер
;
13 — 23.10.17 — 08:24
(12)Тебе можно, но 1С будет ругаться.
14 — 23.10.17 — 08:24
(12) попробуй, может и можно
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) КАК ЕщёВРаботе
ИЗ
ВТ_ИтогПоКоличествуЗаказов КАК ВТ_ИтогПоКоличествуЗаказов,
ВТ_КоличествоИСуммаЗаказов КАК ВТ_КоличествоИСуммаЗаказов
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтгруженныеЗаказы КАК ВТ_ОтгруженныеЗаказы
ПО ВТ_КоличествоИСуммаЗаказов.Менеджер = ВТ_ОтгруженныеЗаказы.ЗаказМенеджер
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЗаказыЕщёВРаботе КАК ВТ_ЗаказыЕщёВРаботе
ПО ВТ_КоличествоИСуммаЗаказов.Менеджер = ВТ_ЗаказыЕщёВРаботе.ЗаказМенеджер
16 — 23.10.17 — 08:36
(14)Ну и как? Что ощущаешь после провалившейся акции милосердия?))
17 — 23.10.17 — 08:37
Как у вас дела? Получилось донести до ТС мысли?
18 — 23.10.17 — 08:39
(16) ну вот запрос итоговый в (15) я сделал как подсказывали, он нормальный?
19 — 23.10.17 — 08:39
(16) Подскажите пожалуйста!
20 — 23.10.17 — 08:40
(18)Нет, ты сделал НЕ как подсказывали. Помнишь детскую игру «найди три отличия»? Сиди, сверяй.
21 — 23.10.17 — 08:41
(17)У него переполнение стека, то и дело всё выплескивается.
22 — 23.10.17 — 08:42
(20) вы про то что не хватает этого?
И ЗаказКлиентаДополнительныеРеквизиты.Свойство = &Свойство
это у меня на форме, и там только нужные значения уже, то есть я считал что = &Знач достаточно!
23 — 23.10.17 — 08:44
(21) И смех, и грех (С)
24 — 23.10.17 — 08:44
(20) Подскажите что именно не так в запросе?
25 — 23.10.17 — 08:45
(24) всё норм. не парься
falselight
26 — 23.10.17 — 08:47
(25) Спасибо большое за поддержку! Пойду вставлять в отчет.
В типовой 1С торговле 11 дополнительные реквизиты хранятся не в регистре сведений, а в табличной части справочника (речь идет не о справочнике номенклатуры). Табличная часть называется “ДополнительныеРеквизиты”. Строки табличной части содержат реквизиты: Значение и Свойство. Если в качестве источника значений выбрать таблицу справочника, то СКД не дает в качестве Поля Вида и Поля Значения выбрать реквизиты табличной части справочника, можно только саму табличную часть. То же и с запросом.
loginza7oi6IWyXZ5RHccDYmqYbcD
11 лет назад
Люди! Скажите пожалуйста, что это за секретное кунг-фу?:
В УТ 11 для номенклатуры создайте общий доп. реквизит, напр. “Бренд”
Потом в конфигураторе сделайте простейший внешний отчет с выборкой номенклатуры и группировкой по Номенклатура.Ссылка
Потом в режиме предприятия откройте этот отчет, измените вариант настройки, на закладке “Отбор” плюсиком разверните реквизиты номенклатуры. и что мы там видим? Помимо заданных в конфигураторе реквизитов обнаруживаем реквизит “Бренд”, по которому можно делать отбор, причем с правильным типом. Как такое возможно? Откуда компоновка знает о доп. реквизитах? Как она делает отбор по значениям реквизитов в ТЧ номенклатуры?
Бьюсь с тем же – как попадают доп.реквизиты в поля СКД в типовых?? откуда он их подхватывает?
Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Гарантия", ЗначениеРеквизита);
Этот способ подходит для поиска по реквизитам справочника. И он ищет только первый элемент и не годится, если их несколько.
Но, поскольку вы пишете что вам нужно осуществить поиск по дополнительному реквизиту, то вам прийдеться писать запрос, и решение зависит от того, как в вашей конфигурации реализованы дополнительные реквизиты.
Например, в конфигурации УНФ, дополнительные реквизиты, это элементы табличной части справочника Номенклатура. При этом «свойство», т.е. имя реквизита, в вашем случае «Гарантия», это план видов характеристик ДополнительныеРеквизитыИСведения. Запрос будет выглядеть примерно так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| НоменклатураДополнительныеРеквизиты.Ссылка КАК НоменклатураСсылка
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
| И НоменклатураДополнительныеРеквизиты.Значение = &Значение";
Запрос.УстановитьПараметр("Значение", ЗначениеГарантии);
Запрос.УстановитьПараметр("Свойство", СсылкаНаПВХ_Гарантия);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
Главная страница » Вопросы пользователей » Вопросы 1С Бухгалтерия » Можно ли установить отбор по двум Доп. реквизитам в журнале документов в 1С
Вопрос задал
Наталья М. (Саратов, Саратовская область)
Ответственный за ответ:
Шаврова Ирина (★9.90/10)
Можно поставить одновременно два условия? Подписан и Подпись УПД (доп.реквизит).
Обсуждение (30)
-
Приложение
Здравствуйте!
Подскажите, пожалуйста, я правильно поняла, что проблема именно в том, что вам не вывести в отбор дополнительный реквизит? Что вы его не видите в списке реквизитов при настройке списка и поэтому не можете вывести условие Подпись УПД … в Шапку для отбора?Если так, то я вам постараюсь помочь.
Я покажу в ответе вывод дополнительного реквизита/сведения в условия Отбора на двух примерах:— при добавлении дополнительного сведения в счф вданный (вы пишите про дополнительный реквизит к счф, но в типовой форме настройки объектов для дополнительных реквизитов нет возможности добавить к счф выданному дополнительный реквизит, только дополнительное сведение. Если вы добавили все-таки дополнительный реквизит (судя высланному по скрину это так), то, скорее всего, у вас доработанная программа).
— при добавлении дополнительного реквизита на примере Ведомости в банк (там типовая настройка позволяет добавить дополнительный реквизит).
Первый вариант для счф:
В разделе Администрирование — Обшие настройки — Дополнительные реквизиты и сведения переходим на ссылку Дополнительные сведения и добавляем данные Подпись УПД (Реализация (акты, накладные, УПД) , Булево. -
В списке сф выданных установка дополнительных сведений происходит по специальной кнопке, как показано на скрине.
После выставления дополнительного сведения в счф отрываем настройку списка формы по кн. Еще — Настроить список — вкладка Отбор.
Добавляем новое условие по дополнительному сведению: спускаемся на реквизит Ссылка, раскрываем по «плюсику» слева его вложенность и там обязательно будет нужное нам поле. Выбираем его, сохраняем настройку.В Шапке будут отражены все установленные нами условия: типовой реквизит счф выданной «Проведен» и дополнительное сведение «Подпись УПД…»
-
Приложение
Устанавливая флаги в указанных отборах, мы добиваемся получения нужной информации в нужном нам разрезе. В данном случае условия работают по схеме «И», т.е, например, при установке флага «Проведен» и флага «Подпись УПД…» отбираются все проведенные данные с подписью УПД. Хотя есть возможность настраивать более сложные схемы отборов, используя группировки условий по группам «ИЛИ», «И», «НЕ», используя кн. «Сгруппировать условия».
В моем примере оба условия «Проведен» (Нет) и «Подпись УПД…» (Да) отработали как показано на скрине.
-
Это настройка для списков счф выданной типовой конфигурации.
Второй вариант для дополнитильного РЕКВИЗИТА, например, для документа Ведомость в банк.
Добавляем дополнительный реквизит для указанного документа: он появляется в форме ведомости — именно там мы с ним работаем.
После этого открываем настройку списка по кн. ЕЩЕ — Настроить список, спускаемся к реквизиту Ссылка, раскрываем «плюсик» слева и находим наш новый реквизит «Дополнительный реквизит».
Переносим его в настройку Отбора и используем в работе.
Подробно по шагам показано на скринах.
Насколько я понимаю — это ваш случай, в Шапку условие отбора по вашему дополнительному реквизиту вы перенесете, раскрыв данные Ссылки.
-
Программа типовая. Возможно я добавила дополнительные сведения, а не реквизит.
У меня не получается сделать отбор по «Оригинал подписан», а потом еще одно условие добавить «Подпись УПД=ДА» -
Если отбор стоит только по Подписан, то работает. Если установить еще и Подпись УПД, то все пусто.
-
Добрый день, тогда соберите все скрины в один файл и прикрепите к ответу: все файлы от вас видит только куратор, поэтому пришлите все максимально подробно.
В файле укажите место обоих доп. реквизитов или сведений, где создали в программе (как сделала в ответе я). И как создаёте условия в настройке списка.
Прямо по шагам и уточните, в чем проблема?
Я очень подробно описала вывод условий и работу с ними для случаев как с доп. реквизитом, так и для доп. сведения. И как выбрать условие. Поэтому, не видя вашей базы, не могу понять, почему у вас не получается вывести в Шапку условия для использования.Пришлите в необходимую информацию по реквизитам или сведениям, а также как пытаетесь использовать их в отборе, чтобы полностью воспроизвести ситуацию.
-
-
Если поставить отбор Подпись УПД=ДА, тоже работает.
-
В шапку мне нет необходимости выводить, но я вывела. У меня не срабатывает сам ДВОЙНОЙ отбор по типу НЕТ в реквизите Подпись УПД.
-
Спасибо за файлы, теперь ещё два главных скрина: как созданы и где реквизиты Подписан и Подпись УПД.
-
Важно видеть создание данных, что не выводятся: какой тип задан при создании, как это выглядит при раскрытии карточки этого Подпись УПД и Подпись тоже желательно видеть, чтобы понимать их взаимосвязь.
-
И ещё сделайте скрин, где есть хотя бы один вариант с установленным значением Да для «Подпись УПД».
Если везде «Нет» то на некоторых платформах может не работать отбор, поскольку нет разных данных для него.
Но нужно всё-таки для начала посмотреть карточку слздания используемых данных. -
Подписан — это стандартный механизм для галочек. Подпись УПД — доп. сведения по умолчанию проставляется — НЕТ. Подпись УПД создавала если на документе есть подпись получателя, но нет ни печати, ни доверенности. Соответственно проставляю доп.сведения, но не ставлю галочку, что документ подписан.
-
Не вижу ошибок в создании доп. сведения. Поэтому уберите группировку в настройке отбора и выведите:
1. отбор только для Подпись УПД (проверьте для Да и Нет)
2. Добавьте условие Подпись. Без группировки! Это и так работает по схеме «И». Проверьте работу в различных вариантах.Удалите все настройки отбора перед этим, что есть сейчас: помимо схемы «И» у вас дважды использовано «Подпись».
Если не получится проверьте работает ли отбор из списка по командке контексного меню отобрать по значению: сначала по одному реквизиту, потом по второму.
Если там все ок, то попробуйте условие для Подпись УПЛ «Не» Да, возможно, ошибка в воспринятии программой значения Нет для данного реквизита — это уже смотреть только по тестированию базы.
Пока пробуем все вышеуказанное. -
Еще один момент давайте отработаем: проставьте принудительно в доп. сведение «Подпись УПД» в нескольких случаях «Нет» и сохраните. Не по умолчанию — сами. И сделайте отбор. Возможно, без ручного выбора что-то возвращается типа «Неопределено» на самом деле, поэтому нужно исключить и этот случай. Если все получится, то, чтобы не перебивать Нет — будете использовать отбор по «Не» Да.
Хотя в моих примерах все отработало корректно по доп. сведению Подпись УПД.
Я бы вам в любои случае рекомендовала провести тестирование и исправление базы данных, возможно, есть внутренние ошибки.
-
Да, вы были правы. Не срабатывает отбор по «НЕТ».
-
Даже принудительно поставила, все равно не срабатывает.
-
Приложение
Принудительно НЕТ ставили через кнопку в списке документов?
По идее, должно быть все хорошо и при автоматической установке НЕТ по умолчанию, но, похоже, что возвращается неопределено там. И тогда непонятно, почему не отрабатывает Не равно ДА, ведь в этом случае должны попасть значения любые отличные от ДА.
Хотя, возможно, при отборе все равно анализируется не все, а только два значения, заложенных в типе Булево: ДА и НЕТ, тогда ситуация более-менее понятна.
-
-
Не равно = Да, тоже не срабатывает.((
-
Тогда что-то с данными Подпись УПД по значению НЕТ.
Попробуйте создать новое доп. сведение Подпись УПД РТУ, например, в пару Подпись УПД и попробуйте взять в отбор его.
У меня отбор по созданному доп. сведению Подпись УПД (скрин приводила выше в ответах) нормально отрабатывает на НЕТ и ДА, поэтому есть вероятность довольно высокая, что что-то нехорошо с его данными — это может показать тестирование и исправление базы, которая ловит внутренние ошибки. -
Приложение
Еще однин момент, посмотрела сейчас по коду, программа реагирует еще на данные ЗАПОЛНЕНО (=ДА), НЕ ЗАПОЛНЕНО (=НЕТ).
Попробуйте по этим условиям выставить. Поменяйте принудительно где-нибудь на НЕТ, кн. ЕЩЕ — Обновить (обновляется список) и посмотрите результат.Это должно сработать, это более распространенное условие, которое работает для всех типов: Булево, Строка, объекты.
-
Новое доп.сведения тоже не срабатывает. А Ваше по отбору «НЕТ» я не увидела. У вас правда срабатывает?
-
-
До этого пробовала, не получалось.
-
Вот смотрите, прилагаю скрины — у меня все работает в тестовой базе (3.0.103.12)
-
Видно по номерам СФ, что не пересекаются отобранные данные. В форму списка я не выводила доп. сведение, работаю только в Шапке с условиями.
-
Спасибо! Можно закрывать.
-
Рада была помочь! Обращайтесь, пожалуйста.
-
-
Приложение
Вот вывела доп. сведение в форму списка, прилагаю скрины. Это условие точно должно работать. Это действует на все типы объектов.
Если нет — проверяйте базу на Тестирование и исправление. сначала в копии.
Комментарии закрыты
Что у нас есть?
Пример будем приводить на конфигурации «Управление производственным предприятием» версии 1.3. В информационной базе для всех элементов справочника «Организации» добавлены свойства «Основной склад», «Связанный контрагент» и «Страна размещения». Нам нужно создать отчет в системе компоновки данных (СКД), в котором мы сможем накладывать отбор по дополнительным характеристиками организаций.
При этом мы будем использовать стандартный функционал СКД для работы с характеристиками объектов. Также рассмотрим особенность разработки подобных отчетов, а именно — отсутствие возможности использовать дополнительные характеристики в конструкторе схемы компоновки данных в режиме «Конфигуратор». Последнее не позволяет использовать поля характеристик в настройке выводимых полей в отчете, отборах, группировка в структуре отчета и так далее.
Создаем отчет и настраиваем характеристики
Создадим простой отчет. В нем будет один набор данных со следующим запросом:
ВЫБРАТЬ Организации.Ссылка КАК Организация, Организации.ИНН, Организации.КПП ИЗ Справочник.Организации КАК Организации
Структура отчета будет иметь вывод только по детальным записям со всеми полями, выбираемыми в запросе. В конструкторе настройка структуры отчета будет выглядит следующим образом:
На скриншоте ниже представлен вывод отчета с текущими настройками.
Отлично. Теперь перейдем к настройке характеристик, но перед этим напомню в общих чертах работу механизма характеристик в большинстве типовых конфигураций, в том числе и УПП. Для этого используются несколько объектов конфигурации.
- План видов характеристик
СвойстваОбъектов
- Регистр сведений
ЗначенияСвойствОбъектов
Графически связь между объектом информационной базы и его характеристиками можно изобразить по такой схеме:
Опишем схему подробнее. В регистре сведений ЗначенияСвойствОбъектов
в измерении Объект
содержится ссылка на элемент информационной базы, для которого сохраняется свойство. В нашем примере это ссылка на элемент справочника Организации
. Все возможные свойства объекта определяются в плане видов характеристик (ПВХ) СвойстваОбъектов
. Значение характеристики, сохраняемое в регистре сведений, зависиот от доступных типов данных для элемента плана видов характеристик, записанного в измерение Свойство
. Это описание должно дать лишь общее представление о механизме доп.свойств. На практике он сложнее.
Теперь перейдем к настройке характеристик в схеме компоновки данных. Для этого запустим конструктор запроса и перейдем на вкладку «Характеристики». Здесь нужно добавить поле связи объекта информационной базы с таблицами свойств и значений свойств. Ранее мы рассматривали схему связи между объектами конфигурации для хранения доп.свойств/характеристик. В соответствии с этой информацией настройка будет следюущей:
После этого запрос набора данных дополнится инструкциями получения характеристик объектов.
ВЫБРАТЬ Организации.Ссылка КАК Организация, Организации.ИНН, Организации.КПП ИЗ Справочник.Организации КАК Организации // Доп. инструкции для получения характеристик {ХАРАКТЕРИСТИКИ ТИП(Справочник.Организации) ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.СвойстваОбъектов ПОЛЕКЛЮЧА Ссылка ПОЛЕИМЕНИ Наименование ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначенияСвойствОбъектов ПОЛЕОБЪЕКТА Объект ПОЛЕВИДА Свойство ПОЛЕЗНАЧЕНИЯ Значение}
На этом все. Функционал отчета теперь позволяет выбрать поля дополнительных характеристик в отчете (поля вывода, отборы и т.д.). Но есть одно НО. Использовать эти поля в настройках отчета мы можем только в режиме 1С:Предприятия. В конфигураторе мы не можем увидеть поля характеристик, что логично, ведь характеристики вводятся пользователем и хранятся в информационной базе.
Но если есть необходимость, мы можем добавить поля характеристик, например, в отбор перед его открытием. Рассмотрим небольшой пример.
Программная работа с характеристиками
При открытии формы отчета выполним следующим программный код:
ТекущиеНастройки = КомпоновщикНастроек.Настройки; КоллекцияОтборов = ТекущиеНастройки.Отбор.Элементы; // Добавляем отбор по доп. реквизиту номенклатуры "Основной склад" НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Основной склад]"); НовЭл.Использование = Ложь; // Добавляем отбор по доп. реквизиту номенклатуры "Страна размещения" НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Страна размещения]"); НовЭл.Использование = Ложь; // Добавляем отбор по доп. реквизиту номенклатуры "Связанный контрагент" НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]"); НовЭл.Использование = Ложь;
Тогда если мы посмотрим в отбор отчета в режиме 1С:Предприятие, то увидим следующиую картину:
Таким образом, мы программно добавили отбор по дополнительным характеристикам справочника Организации, не смотря на то, что в конструкторе СКД эти поля не были доступны. Обратите внимание на синтаксис определения поля компоновки данных.
Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]")
а именно на текст [Связанный контрагент]
. Если мы напишем вот так:
Новый ПолеКомпоновкиДанных("Организация.СвязанныйКонтрагент"),
то при запуске отчета СКД неправильно определит поля компоновки. В настройках поля отбора будут выделены как некорректные:
Для дополнительных свойст и реквизитов, которые не доступны в конструкторе СКД, при программном обращении необходимо использовать следующий синтаксис:
Новый ПолеКомпоновкиДанных(".[]")
Таким образом, мы можем устанавливать настройки отчета, даже если поля недоступны в конструкторе СКД.
Вывод
Использование настройки характеристик в СКД позволяет значительно упростить разработку сложных отчетов. Несмотря на некоторые недостатки в работе, такие как отсутствие возможности настройки отбора по доп. свойствам в конструкторе и т.д., механизм характеристик можно считать значительным шагом в упрощении разработки отчетов в системе 1С:Предприятие.
В статье мы рассмотрели далеко не все возможности характеристик в СКД. За рамками статьи остались такие возможности как: произвольное определение источников данных, как для свойств, так и для значений характеристик, а также отбор по владельцу для всех доступных характеристик в информационной базе и многое другое. Тема большая, есть куда расширять круг своих знания.
Дополнительные реквизиты объектов с помощью плана видов характеристик
Достаточно часто возникает необходимость в добавлении объектам дополнительных реквизитов (характеристик). При этом каждый раз вносить для этого изменения в конфигурацию и проводить реструктуризацию базы данных не хочется.
В этой статье я расскажу о том, как реализовать такую возможность с помощью плана видов характеристик и регистра сведений и поделюсь парой приёмов использования этих реквизитов в отчётах и списках.
Быстрый переход
- Изменения в конфигурации
- Использование дополнительных реквизитов в отчётах и списках
- Вариант №1
- Вариант №2
Изменения в конфигурации
Разработку конфигурации будем вести на базе платформе 1С: Предприятие 8.2 с установленным свойством “Основной режим запуска” – “Управляемое приложение”. В качестве основы для разработки подойдет любая демо-конфигурация. Добавим новый план видов характеристик “Виды характеристик”. На закладке “Основные” плана видов характеристик в поле “Тип значения характеристик” выберем необходимые типы.
В качестве одного из возможных типов значений характеристик выберем предварительно добавленный в конфигурацию справочник “Значения характеристик”, подчиненный плану видов характеристик “Виды характеристик”. Его же выберем в поле “Дополнительные значения характеристик”. Это позволит добавлять характеристики с произвольными ссылочными значениями (например, цвет или размер).
Создадим регистр сведений “Характеристики” с измерениями “Объект”, “Вид характеристики” и ресурсом “Значение”. Измерение “Объект” должно включать в себя все типы объектов для которых необходимо использовать дополнительные реквизиты. В нашем случае это будет справочник “Контрагенты”, В свойствах измерения “Объект” должны быть установлены флаги “Ведущее”, “Основной отбор” и “Запрет незаполненных”.
Это обеспечит связь объекта с записями регистра сведений. В форме элемента справочника “Контрагенты” переход к редактированию характеристик будет возможен с помощью соответствующего пункта меню “Перейти” в левой части формы.
Измерению “Вид характеристики” необходимо назначить тип “ПланВидовХарактеристикСсылка.ВидыХарактеристик”, а ресурсу “Значение” – “Характеристика.ВидыХарактеристик”.
Для обеспечения взаимосвязи значений ресурса “Значение” со значениями измерения “ВидХарактеристик” регистра “Характеристики” необходимо чтобы в свойстве “Связи параметров выбора” ресурса “Значение” было указано “Отбор.Владелец(ВидХарактеристики)”, а в свойстве “Связь по типу” – “ВидХарактеристики”
Теперь всё готово для того чтобы мы могли вводить в базу данных дополнительные реквизиты справочника “Контрагенты”.
Попробуем добавить дополнительный реквизит “Адрес”
Использование дополнительных реквизитов в отчётах и списках
После того как все необходимые изменения в конфигурации выполнены возникает вопрос о том как использовать дополнительные реквизиты для вывода и фильтрации данных в отчётах и списках.
Вариант №1
Начнём с использования характеристик в отчёте, разработанном с использованием системы компоновки данных. За основу возьмём отчёт “Ведомость взаиморасчетов”. Добавим в конфигурацию копию этого отчёта и назовём его “Ведомость взаиморасчетов (с характеристиками)”.
Оригинал отчёта нам понадобится для демонстрации второго варианта использования характеристик.
Итак, откроем набор данных “Взаиморасчеты” схемы компоновки данных нашего отчета в конструкторе запросов и перейдем на закладку “Характеристики”.
- В таблицу на вкладке “Характеристики” добавим строку.
- В поле “Тип” выберем “СправочникСсылка.Контрагенты” (это объект для которого в отчёте необходимо использовать дополнительные характеристики).
- В поле “Источник видов” выберем вариант “Запрос” (хотя в нашем случае можно ограничиться и вариантом “Таблица”).
- В колонку “Виды характеристик” внесём текст запроса, которым будут выбираться виды характеристик, используемые для справочника “Контрагенты”.
Текст запроса обязательно должен содержать три поля – ссылка на вид характеристики, наименование характеристики и тип значения характеристики. Наименования этих полей выбираются в колонках “Поле ключа”, “Поле имени” и “Поле типа значения” таблицы на закладке “Характеристики”.
- Для визуального выделения дополнительных реквизитов объекта в запросе по видам характеристик к наименованиям добавлен текст “(доп. реквизит)”.
- В колонке “Источник значений” на вкладке “Характеристики” выберем вариант “Таблица”.
- В колонке “Значения характеристик” выберем “РегистрСведений.Характеристики”,
- в колонке “Поле объекта” – наименование измерения регистра “Объект”,
- в колонке “Поле вида” – наименование измерения “ВидХарактеристики”,
- в колонке “Поле значения” – наименование ресурса “Значение”.
В тексте запроса схемы компоновки результат добавления характеристик выглядит следующим образом (в обычных запросах применение таких конструкций невозможно):
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Контрагенты)
ВИДЫХАРАКТЕРИСТИК (ВЫБРАТЬ
ВидыХарактеристик.Ссылка,
ВидыХарактеристик.Наименование + » (доп. реквизит)» КАК Наименование,
ВидыХарактеристик.ТипЗначения
ИЗ
ПланВидовХарактеристик.ВидыХарактеристик КАК ВидыХарактеристик)
ПОЛЕКЛЮЧА Ссылка
ПОЛЕИМЕНИ Наименование
ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.Характеристики
ПОЛЕОБЪЕКТА Объект
ПОЛЕВИДА ВидХарактеристики
ПОЛЕЗНАЧЕНИЯ Значение }
Проверим работу отчёта. Для этого откроем отчёт “Ведомость взаиморасчетов (с характеристиками)”. Перейдем в пункт меню “Все действия -> Изменить вариант”. В окне настроек перейдём на закладку “Отбор” и добавим отбора по дополнительному реквизиту контрагента “Адрес”
Вариант №2
Рассмотрим более универсальный вариант работы с характеристикам объектов, благодаря которому характеристики возможно будет использовать в любых отчетах, содержащих объект-владелец характеристик, а также устанавливать отборы по значению этих характеристик в формах списков.
Перейдём на закладку “Данные” справочника “Контрагенты” и нажмём кнопку “Характеристики”.
- В открывшемся окне “Дополнительных характеристик объекта метаданных” добавим строку.
- В колонке “Виды характеристик” выберем “ПланВидовХарактеристик.ВидыХарактеристик”, в колонке “Поле ключа” – “Ссылка”.
- В колонке “Значения характеристик” выберем “РегистрСведений.Характеристики”, в колонке “Поле объекта” – “Объект”,
- в колонке “Поле вида” – “ВидХарактеристики”, в колонке “Поле значения” – “Значение”.
Сохраним конфигурацию и попробуем воспользоваться дополнительными характеристиками справочника “Контрагенты” в форме списка (в отчёте “Ведомость взаиморасчетов” использование дополнительных реквизитов будет выглядеть аналогичному тому как это было описано в Варианте №1, с той лишь разницей, что наименованию вида характеристики не будет добавляться текст “(доп. реквизит)”).
Откроем список справочника “Контрагенты”, перейдем в пункт меню “Все действия -> Настройка списка” и установим отбор по дополнительному реквизиту “Адрес”.
Стоит отметить, что при использовании Варианта №1 в отчётах с использованием СКД отключается приведенный механизм платформы и используется описанный пользователем.
Статья найдена на просторах интернета.
Делать деньги без рекламы может только монетный двор.
Рассмотрим различные варианты установки отбора при выборе объекта на документе ДокументОтборПриемаТовара. У документа имеются следующие реквизиты (см. рисунок 1):
- ПоставщикОтбор (тип СправочникСсылка.Поставщики);
- ТоварОтбор (тип СправочникСсылка.Товары);
- ОтветственныйОтбор (тип СправочникСсылка.Ответственный);
- ПриемТовара (тип ДокументСсылка.ПриемТовара).
Рисунок 1. Структура документа ДокументОтборПриемаТовара |
Выбирать будем документ ПриемТовара, а отбор в форме выбора будет устанавливаться по реквизитам с постфиксом Отбор.
Документ ПриемТовара имеет реквизиты (см. рисунок 2):
- Поставщик (тип СправочникСсылка.Поставщики);
- Ответственный (тип СправочникСсылка.Ответственный);
- Комментарий (Тип Строка).
А так же табличную часть Товары, состоящую из реквизитов Товар (тип СправочникСсылка.Товары) и Количество (тип Число).
Рисунок 2. Структура документа ПриемТовара |
1. Установка отбора в свойствах реквизита объекта метаданных
Самый простой вариант отбора. Нужно всего лишь в свойствах реквизита «Связи параметров выбора» и «Параметры выбора» задать параметры выбора. Допустим, при выборе документа ПриемТовара, нужно в форме выбора показывать документы отобранные по поставщику и только проведенные. Для этого в связях параметров выбора задаем отбор по поставщику, а в параметрах выбора отбор только проведенных документов (см. рисунок 3).
Рисунок 3. Отбор в свойствах реквизита объекта метаданных |
Больше ничего делать не нужно, платформа сама завернет указанные параметры выбора в структуру (см. рисунок 4) и поместит её в параметр Отбор формы выбора, далее, анализируя данный параметр формы, платформа устанавливает отборы для динамического списка.
Рисунок 6. Значение параметра формы выбора Отбор |
2. Установка отбора в свойствах элемента формы
Такой же простой вариант как и первый, только те же самые свойства задаются для элемента формы (см. рисунок 5).
Рисунок 5. Отбор в свойствах элемента формы |
Свойства элемента формы имеют приоритет над свойствами реквизита объекта.
3. Установка собственного отбора при создании формы выбора на сервере
Усложним задачу и будем производить отбор документов по табличной части, а конкретно по товару в ней. Для этого в связях параметров выбора зададим связь, где параметр будет Товар (прям ручками пишем), а реквизит ТоварОтбор (см. рисунок 6).
Рисунок 6. Связь параметра Товар с реквизитом ТоварОтбор |
Именно такую задаем связь, так как более одной точки(.) в колонке Имя при написании параметра мы не можем использовать (платформенное ограничение), то есть написать «Отбор.Товары.Товар» мы не сможем.
Так как имя параметра мы задали вручную, то платформа его не поместит в параметр Отбор формы выбора, поэтому в форме выбора документа ПриемТовара в обработчике события ПриСозданииНаСервере напишем программный код, который будет обрабатывать наш параметр Товар и устанавливать отбор по реквизиту табличной части:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Товар = Неопределено;
ЭтотОбъект.Параметры.Свойство("Товар", Товар);
Если Товар <> Неопределено Тогда
ФиксОтбор = ЭтотОбъект.Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
ЭлементОтбора = ФиксОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Товары.Товар");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Товар;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
КонецПроцедуры
4. Программная установка параметров выбора
Так как у элемента формы есть свойства СвязиПараметровВыбора и ПараметрыВыбора, и они доступны не только для чтения, но и на запись, то все что описано выше можно выполнить с помощью программного кода. Для этого в форме документа ДокументОтборПриемаТовара в событии ПриСозданииНаСервере напишем код, который будет формировать массив связей параметров и параметров выбора, и устанавливать их в соответствующие свойства элемента формы ПриемТовара, который связан с реквизитом объекта ПриемТовара:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Создаем связи параметров выбора.
МассивСвязей = Новый Массив;
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Поставщик", "Объект.ПоставщикОтбор");
МассивСвязей.Добавить(НоваяСвязь);
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Ответственный", "Объект.ОтветственныйОтбор");
МассивСвязей.Добавить(НоваяСвязь);
НоваяСвязь = Новый СвязьПараметраВыбора("Товар", "Объект.ТоварОтбор");
МассивСвязей.Добавить(НоваяСвязь);
// Создаем параметры выбора.
МассивПараметров = Новый Массив;
НовыйПараметр = Новый ПараметрВыбора("Отбор.Проведен", Истина);
МассивПараметров.Добавить(НовыйПараметр);
// Устанавливаем связи параметров и параметры выбора для элемента формы.
Элементы.ПриемТовара.СвязиПараметровВыбора = Новый ФиксированныйМассив(МассивСвязей);
Элементы.ПриемТовара.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
КонецПроцедуры
Для корректной работы отборов необходимо создать событие ПриСозданииНаСервере с таким же программным кодом как в варианте №3 у формы выбора документа ПриемТовара.
5. Установка параметров выбора в момент начала выбора
Этот вариант позволяет «на лету» устанавливать параметры выбора. Усложним задачу и будем устанавливать отбор только по заполненным реквизитам отбора.
В модуле формы документа ДокументОтборПриемаТовара в событии НачалоВыбора для элемента ПриемТовара, который связан с реквизитом объекта ПриемТовара, напишем код, который будет устанавливать параметры выбора в зависимости от заполненности реквизитов отбора:
&НаКлиенте
Процедура ПриемТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
МассивПараметров = Новый Массив;
Если ЗначениеЗаполнено(Объект.ПоставщикОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Отбор.Поставщик", Объект.ПоставщикОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ОтветственныйОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Отбор.Ответственный", Объект.ОтветственныйОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ТоварОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Товар", Объект.ТоварОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
НовыйПараметр = Новый ПараметрВыбора("Отбор.Проведен", Истина);
МассивПараметров.Добавить(НовыйПараметр);
Элементы.ПриемТовара.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
КонецПроцедуры
Для корректной работы отборов необходимо создать событие ПриСозданииНаСервере с таким же программным кодом как в варианте №3 у формы выбора документа ПриемТовара.
6. Открытие формы выбора с установленным параметром формы Отбор в момент начала выбора
Данный способ отличается от предыдущего тем, что мы отменяем стандартную обработку события НачалоВыбора, сами формируем параметр формы Отбор, передаем его в открываемую форму выбора с указанием владельца формы, то есть все делаем за платформу. Обратите внимание, что в данном случае нам не нужно обходить ограничение платформы (больше одной точки в имени параметра), что бы установить отбор по товару в табличной части, достаточно указать параметр отбора Товары типа Структура, в котором ключом будет имя колонки «Товар», а значение ссылка на товар.
&НаКлиенте
Процедура ПриемТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Отбор = Новый Структура;
Если ЗначениеЗаполнено(Объект.ПоставщикОтбор) Тогда
Отбор.Вставить("Поставщик", Объект.ПоставщикОтбор);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ОтветственныйОтбор) Тогда
Отбор.Вставить("Ответственный", Объект.ОтветственныйОтбор);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ТоварОтбор) Тогда
Отбор.Вставить("Товары", Новый Структура("Товар", Объект.ТоварОтбор));
КонецЕсли;
Отбор.Вставить("Проведен", Истина);
ПараметрыФормы = Новый Структура("Отбор", Отбор);
ОткрытьФорму("Документ.ПриемТовара.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры
Отборы на динамический список платформа наложит сама, писать дополнительно код больше не нужно, как в варианте №3.
А что будет, если отбор в связях параметров выбора и параметры выбора пересекаются?
Как показал мой эксперимент, страшного ничего не случится, платформа установит отбор по связям параметров выбора.