Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 июн 2024, 07:06

Отбор в иерархическом справочнике 1С

Автор Алексей_1985_06, 21 янв 2024, 19:36

0 Пользователей и 1 гость просматривают эту тему.

Алексей_1985_06

Ребят всем привет!
Подскажите как реализовать следующие:
1. Есть иерархический справочник "ОбъектыЭксплуатации": например в объект "А" - входят подсистемы "В","С","Д", в подсистему "В" - элементы "В1", "В2", "В3", "В4" и тд.....
2. Необходимо в документе при выборе реквизита "НеисправноеИзделие" - тип ссылка на справочник "ОбъектыЭксплуатации" (например: подсистема "В") в реквизите "Составная часть изделия" - тип ссылка на справочник "ОбъектыЭксплуатации" - ограничить выбор элементов... т.е выбирать только подчиненные элементы подсистемы "В" (т.е "В1", "В2", "В3")
Прошу помощи знатоков!

LexaK

Алексей_1985_06, для элементов (т.е "В1", "В2", "В3")
установите отбор по Родителю Родитель = "Б"

если нужны более вложенные уровни тогда
или задавайте условии Родитель в иерархии "Б"
или СсылкаЭлемента в списке (&СписокПдчиненных)
зависит от форм (обычные или управляемые)
если помогло нажмите: Спасибо!

Алексей_1985_06

LexaK, большое спасибо! Буду пробовать!

Алексей_1985_06

LexaK, Прошу помощи, не могу понять почему не срабатывает?
Сделал следующие:
1. На форме выбора произвольный запрос:
ВЫБРАТЬ
    СправочникОбъектыЭксплуатации.Ссылка КАК Ссылка,
    СправочникОбъектыЭксплуатации.ПометкаУдаления КАК ПометкаУдаления,
    СправочникОбъектыЭксплуатации.Родитель КАК Родитель,
    СправочникОбъектыЭксплуатации.Код КАК Код,
    СправочникОбъектыЭксплуатации.ЗаводскойНомер КАК ЗаводскойНомер,
    СправочникОбъектыЭксплуатации.Изготовитель КАК Изготовитель,
    СправочникОбъектыЭксплуатации.ДатаИзготовления КАК ДатаИзготовления,
    СправочникОбъектыЭксплуатации.Предопределенный КАК Предопределенный,
    СправочникОбъектыЭксплуатации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,

// Формирование представления: Наименование + Индекс   
    ВЫБОР
        КОГДА СправочникОбъектыЭксплуатации.Индекс <> ""
            ТОГДА СправочникОбъектыЭксплуатации.Наименование + " (" + СправочникОбъектыЭксплуатации.Индекс + ")"
        ИНАЧЕ СправочникОбъектыЭксплуатации.Наименование
    КОНЕЦ КАК Наименование

ИЗ
    Справочник.ОбъектыЭксплуатации КАК СправочникОбъектыЭксплуатации
ГДЕ
    СправочникОбъектыЭксплуатации.Ссылка В ИЕРАРХИИ (&ГруппаОбъектов)  И
    СправочникОбъектыЭксплуатации.Ссылка <> &ГруппаОбъектов

2. В событии формы устанавливаю значение параметра:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
    Список.Параметры.УстановитьЗначениеПараметра("ГруппаОбъектов",Параметры.ГруппаОбъектов);
 
КонецПроцедуры

3. На форме документа, в реквизите "ДефектнаяСоставнаяЧасть" обработка события "НачалоВыбора":
&НаКлиенте
Процедура ДефектнаяСоставнаяЧастьИзделияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   
   
СтандартнаяОбработка = Ложь;

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ГруппаОбъектов", Объект.ДефектноеИзделие);

ОткрытьФорму("Справочник.ОбъектыЭксплуатации.ФормаВыбора", СтруктураПараметров, Элементы.ДефектнаяСоставнаяЧастьИзделия);

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

Параметр передается при создании на сервере, но ДС на форме выбора ПУСТОЙ, без значений....
Подскажите пжл что не так сделал......

LexaK

Алексей_1985_06,
Цитироватьно ДС на форме выбора ПУСТОЙ, без значений....
как вариант, не правильну. группу передаете или в форме выбора еще какой Отбор задан (настройки пользователя), вариантов множество.
а зачем так сложно делаете?
сделайте в поле ДефектнаяСоставнаяЧастьИзделия режим выбора из списка
при начале выбора делайте запрос и его результат поместите в список выбора! и ни каких форм выбора
(в 1С, одну и ту же задачу, можно решить разными способами, и гораздо более простыми)
если помогло нажмите: Спасибо!

antoneus

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
    Список.Параметры.УстановитьЗначениеПараметра("ГруппаОбъектов",Параметры.ГруппаОбъектов);
 
КонецПроцедуры

А зачем Стандартнаябработка = Ложь-то?

Алексей_1985_06

LexaK, Сделал так, ДанныеВыбора формируются, но вот теперь проблема: при выборе значения в поле ввода - данные не помещаются в него, в чем может быть проблема?  :dfbsdfbsdf:  :dfbsdfbsdf:  :dfbsdfbsdf:
РежимВыбораИзСписка в конфигураторе установлено в Истина.

&НаСервере
Функция ПолучитьПодчиненныеОбъекты()
   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОбъектыЭксплуатации.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.ОбъектыЭксплуатации КАК ОбъектыЭксплуатации
        |ГДЕ
        |    ОбъектыЭксплуатации.Ссылка В ИЕРАРХИИ(&ГруппаОбъектов)
        |    И ОбъектыЭксплуатации.Ссылка <> &ГруппаОбъектов
        |АВТОУПОРЯДОЧИВАНИЕ";
   
    Запрос.УстановитьПараметр("ГруппаОбъектов", Объект.ДефектноеИзделие);
   
    Результат = Запрос.Выполнить();
   
    Выборка = Результат.Выбрать();
   
    СписокЗнач = Новый СписокЗначений;
    Пока Выборка.Следующий() Цикл
        СписокЗнач.Добавить(Выборка.Ссылка)   
    КонецЦикла;
   
    Возврат СписокЗнач
   
           
КонецФункции


&НаКлиенте
Процедура ДефектнаяСоставнаяЧастьИзделияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   
СтандартнаяОбработка = Ложь;
ДанныеВыбора = ПолучитьПодчиненныеОбъекты();
   
КонецПроцедуры



LexaK

Алексей_1985_06, попробуетм немного изменить логику обработки выбора,
попробуйте такой код, обратите внимание на коменты
&НаСервере
Процедура ПолучитьПодчиненныеОбъекты()
   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОбъектыЭксплуатации.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.ОбъектыЭксплуатации КАК ОбъектыЭксплуатации
        |ГДЕ
        |    ОбъектыЭксплуатации.Ссылка В ИЕРАРХИИ(&ГруппаОбъектов)
        |//    И ОбъектыЭксплуатации.Ссылка <> &ГруппаОбъектов
        |    И ОбъектыЭксплуатации.ЭтоГруппа = Ложь
        |АВТОУПОРЯДОЧИВАНИЕ";
   
    Запрос.УстановитьПараметр("ГруппаОбъектов", Объект.ДефектноеИзделие);
   
    Результат = Запрос.Выполнить();
лкСписок = Элементы.ДефектнаяСоставнаяЧастьИзделия.СписокВыбора;
лкСписок.ЗагрузитьЗначения(Результат.Выгрузить().ВыгрузитьКолонку("Ссылка"));

//подставление первого значения, если не надо - то убрать этот Если
Если лкСписок.Количество() > 0 Тогда
Объект.ДефектнаяСоставнаяЧастьИзделия = лкСписок[0].Значение;
КонецЕсли;
   
           
КонецПроцедуры

//внимание. необходимо НАЗНАЧИТЬ обработчик события ПриИзменении поля ДефектноеИзделие
&НаКлиенте
Процедура ДефектноеИзделиеПриИзменении(Элемент)
    //смена дефектного изделия
    Объект.ДефектнаяСоставнаяЧастьИзделия = Неопределено;//очищаем старую составляющую
ПолучитьПодчиненныеОбъекты();
КонецПроцедуры

если помогло нажмите: Спасибо!

Алексей_1985_06


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск