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

ФормаВыбора=ОткрытьФорму(«Документ.РасходнаяНакладная.Форма.ФормаВыбора»,,, ,,,Новый ОписаниеОповещения( «Расш2_ВыборЗавершение», ЭтотОбъект),РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

              ОтборВладелец=ФормаВыбора.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

              ОтборВладелец.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;

              ОтборВладелец.Использование=Истина;

              ОтборВладелец.ЛевоеЗначение=Новый ПолеКомпоновкиДанных(«Контрагент»);

              ОтборВладелец.ПравоеЗначение=КонтрагентДокумента;

            
            //ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Бух. документ)», Истина);

            
              ОтборБух=ФормаВыбора.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

              ОтборБух.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;

              ОтборБух.Использование=Истина;

              ОтборБух.ЛевоеЗначение=Новый ПолеКомпоновкиДанных(«Доп рквизит»);

              ОтборБух.ПравоеЗначение=Ложь;

что написать вместо «Доп рквизит», чтобы он сделал отбор.

Наименование доп реквизита Бух. документ

Главная страница » Вопросы пользователей » Вопросы 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):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

igforu

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

loginza7oi6IWyXZ5RHccDYmqYbcD

loginza7oi6IWyXZ5RHccDYmqYbcD

11 лет назад

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

MrGray

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

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

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

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

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

  • Изменения в конфигурации
  • Использование дополнительных реквизитов в отчётах и списках
    • Вариант №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 в отчётах с использованием СКД отключается приведенный механизм платформы и используется описанный пользователем.

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

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

Как установить отбор в открываемой форме

Содержание[Убрать]

    • Установка отбора в форме при открытии
      • Установка отбора в 8.1 обычное приложение
      • Установка отбора в 8.2, 8.3 тонкий клиент (управляемая форма)
        • Фильтр по одному элементу
        • Как открыть форму выбора с отбором в списке? Как установить выбор групп и элементов?
        • Ещё один вариант открытия формы с отбором в списке для 8.3

Как программно установить отбор в открываемой форме?

Установка отбора в форме при открытии

Установка отбора в 8.1 обычное приложение

Для установки отбора используется свойство «Отбор» у менеджеров списков объектов, например, для открытия списка договоров определенного контрагента можно написать следующий код:

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

В данном случае мы применили вид сравнения «Равно«, но не указывали его т.к. оно стоит по умолчанию. Используя разные значения вида сравнения мы значительно расширяем возможности.

Например, у нас в базе контрагент является и продавцом и покупателем, при этом договоры находятся в соответствующей группе внутри справочника. Поэтому мы сделаем отбор не только на самого контрагента, но и на группу «Группа Покупатели» в которой находится договор:


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

ГруппаПокупатели = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Группа Покупатели");
ФормаВыбора.Отбор.Родитель.ВидСравнения = ВидСравнения.ВИерархии;
ФормаВыбора.Отбор.Родитель.Значение = ГруппаПокупатели;
ФормаВыбора.Отбор.Родитель.Использование = ИСТИНА;
ФормаВыбора.ОткрытьМодально();

Установка отбора в 8.2, 8.3 тонкий клиент (управляемая форма)

Фильтр по одному элементу

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

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

    ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора",ПараметрыВыбора, Элемент); // здесь передан Элемент, чтобы выбранное значение попало в поле

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

Как открыть форму выбора с отбором в списке? Как установить выбор групп и элементов?

&НаКлиенте
Процедура СписокДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    МассивДоговоров = ПолучитьДоговорыНаСервере();
    СЗДоговоров = Новый СписокЗначений;
    СЗДоговоров.ЗагрузитьЗначения(МассивДоговоров);

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

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

Ещё один вариант открытия формы с отбором в списке для 8.3

Ниже текст процедуры открытия формы для команды объекта 

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
СписокПокупателей = ПолучитьСписокПокупателей(); 
Отбор = Новый Структура;
Отбор.Вставить("Ссылка", СписокПокупателей );
ПараметрыФормы.Вставить("Отбор", Отбор);
ОткрытьФорму("Справочник.Контрагенты.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры

Недостаточно прав для комментирования

В статье будут рассмотрены варианты установки отбора в управляемых формах 1С 8.3. Отбор для динамического списка может быть установлен статически или динамически, в пользовательском интерфейсе или конфигураторе. Все варианты отборов мы рассмотрим ниже.

  • Установка отбора в пользовательском режиме
  • Установка отбора в конфигураторе

    • Фиксированный отбор
    • Динамический (программный) отбор

Установка отбора в пользовательском режиме

Динамический список в отличие от таблицы или дерева значений – более подходящее решение для реализации форм содержащих какие-либо списки, т.к. динамический список предоставляет наиболее широкий набор инструментов для работы с отбором, группировкой полей, сортировкой. Данный отбор можно установить при работе в пользовательском режиме или конфигураторе, принцип одинаков.

Для установки отбора в режиме предприятия необходимо вызвать команду «Настроить список».

Рис.1 Настроить список
Рис.1 Настроить список

 

Откроется окно.

Рис.2 Окно настройки
Рис.2 Окно настройки

 

На вкладке «отбор» представлен список полей, который есть в текущем списке. Выбираем поля списка, по которым будем фильтровать. Сделать это можно двойным кликом или используя drag and drop.

Рис.3 На вкладке «Отбор»
Рис.3 На вкладке «Отбор»

 

Задаем вид сравнения и значение, жмем «Завершить редактирование», отбор установлен.

Отбор также можно группировать по логическим условиям «И», «ИЛИ».

Рис.4 Отбор также можно группировать по логическим условиям «И», «ИЛИ»
Рис.4 Отбор также можно группировать по логическим условиям «И», «ИЛИ»

 

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

Рис.5 Поля быстрых отборов
Рис.5 Поля быстрых отборов

 

Чтобы платформа 1С автоматически создавала поля быстрых отборов, при разработке формы в конфигураторе необходимо указать группу пользовательских настроек.

Рис.6 Группа пользовательских настроек
Рис.6 Группа пользовательских настроек

 

Данный отбор будет сохранен только для текущего пользователя, что позволяет гибко производить кастомизированные настройки динамического списка. Однако если стоит задача сделать фиксированный отбор для определенного списка для всех пользователей системы, ее мы сможем решить только через конфигуратор.

Установка отбора в конфигураторе

Работая в конфигураторе, мы можем устанавливать отбор динамического списка двух видов – фиксированный и динамический. Фиксированный отбор настраивается один раз, динамический или программный – можно устанавливать в зависимости от каких-либо данных в системе.

Фиксированный отбор

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

Рис.7 Фиксированный отбор
Рис.7 Фиксированный отбор

 

Откроется окно.

Рис.8 Окно динамического списка
Рис.8 Окно динамического списка

 

Отбор задается так же, как в пользовательском режиме.

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

Рис.9 Настроить список
Рис.9 Настроить список

 

Динамический (программный) отбор

Зачастую возникает необходимость устанавливать отбор программно, например, при открытии формы выбора, когда нам необходимо открыть управляемую форму с отбором. В форму передается параметр и по этому параметру устанавливается отбор. Частый пример этого – отбор элементов справочника по владельцу.

Методы

Если в разрабатываемой конфигурации присутствует подсистема БСП «БазоваяФункциональность», программный отбор в динамическом списке можно установить используя типовой метод:


	 ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка()

Сигнатура данного метода:

ДинамическийСписок Тип: ДинамическийСписок – Список, в котором требуется установить отбор.

ИмяПоля Тип: Строка – Поле, по которому необходимо установить отбор.

ПравоеЗначение Тип: Произвольный – Значение отбора (Необязательный. Значение по умолчанию: Неопределено. Внимание! Если передать Неопределено, то значение не будет изменено).

ВидСравнения Тип: ВидСравненияКомпоновкиДанных – Условие отбора.

Представление Тип: Строка – Представление элемента компоновки данных (Необязательный. Значение по умолчанию: Неопределено. Если указано, то выводится только флажок использования с указанным представлением (значение не выводится). Для очистки, чтобы значение снова выводилось, следует передать пустую строку).

Использование Тип: Булево – Флажок использования этого отбора (Необязательный. Значение по умолчанию: Неопределено).

РежимОтображения Тип: РежимОтображенияЭлементаНастройкиКомпоновкиДанных – Способ отображения этого отбора пользователю. Возможные значения:

  • РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ – В группе быстрых настроек над списком.
  • РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный – В настройка списка (в подменю Еще).
  • РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный – Запретить пользователю менять этот отбор.

ИдентификаторПользовательскойНастройки Тип: Строка – Уникальный идентификатор этого отбора (Используется для связи с пользовательскими настройками).

Для удаления какого-то значения отбора необходимо воспользоваться типовым методом:


	 ОбщегоНазначенияКлиентСервер. УдалитьЭлементыГруппыОтбораДинамическогоСписка ()

Сигнатура данного метода:

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

ИмяПоля Тип: Строка – имя поля компоновки (не используется для групп).

Представление Тип: Строка – представление поля компоновки.

В случае отсутствие в системе БСП отбор можно установить самостоятельно, используя объект ПолеКомпоновкиДанных.


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

Данный отбор отберет строки, в которых значение «ФИО» = «Иванов».

Для использования логических «И», «ИЛИ», «НЕ» предназначен тип данных ГруппаЭлементовОтбораКомпоновкиДанных


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

Данный отбор отберет строки, в которых значение «ФИО» = «Иванов» или «Петров».

Отбор в динамическом списке также можно производить через изменение текста запроса динамического списка. Этот вариант работает, когда динамический список сделан через «произвольный запрос».

Рис.10 Отбор в динамическом списке
Рис.10 Отбор в динамическом списке

 

Для этого к тексту запроса добавляем условие «ГДЕ Истина»…

Рис.11 Условие «ГДЕ Истина»
Рис.11 Условие «ГДЕ Истина»

 

…в коде:


	Список.ТекстЗапроса = Список.ТекстЗапроса + " И СправочникПользователи.ФИО В(""Иванов"",""Петров"")";

Как видно, такой подход более компактный с точки зрения написания кода. Чем сложнее условия отбора в табличной части мы хотим установить, тем более громоздким будет вариант с использованием отбора через ЭлементОтбораКомпоновкиДанных. Однако у примера с изменением текста запроса есть свои недостатки – эта реализация не устойчива к изменениям кода. Например, вы сделали такую реализацию и забыли, но если в будущем вы захотите модифицировать текст запроса, добавив в него какой-либо оператор после ГДЕ (УПОРЯДОЧИТЬ, СГРУППИРОВАТЬ), вам нужно не забыть про то, что в программном коде есть:


	Список.ТекстЗапроса = Список.ТекстЗапроса + " И СправочникПользователи.ФИО В(""Иванов"",""Петров"")";

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

ГДЕ (НЕ &ОтборУстановлен ИЛИ СправочникПользователи.ФИО В (&РазрешенныеФИО))

…в коде:


	Список.Параметры.УстановитьЗначениеПараметра("ОтборУстановлен", ФИО.Количество() > 0);
	Список.Параметры.УстановитьЗначениеПараметра("РазрешенныеФИО", ФИО);

Тут ФИО – массив.

Ка видно, 2 строчки кода против 10. Какой из способов выбрать, зависит от конкретной прикладной задачи.

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