Имя: Пароль:
1C
1С v8
Наложение ограничения на список выбора из доп.реквизита формы
,
0 Stanislav_134
 
06.03.20
15:50
Всем привет!

Большая просьба - подсказать. Всю голову уже сломал. Задача в следующем: на форму элемента справочника в пользовательском режиме добавлен доп.реквизит, отображается на форме в виде поля выбора. Так вот надо при выборе из этого поля выбора наложить на открываемую форму выбора определенные условия.

Вроде бы, поизучав информацию пришел к выводу, что это делается через программное добавление действия. Так как это доп.реквизит, я нашел процедуру в общем модуле, где добавляются доп.реквизиты. В конце процедуры сделал проверку на наличие на форме необходимого мне реквизита, и, если поле существует, то ему устанавливается действие "НачалоВыбора"


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


В модуле формы элемента прописываю эту процедуру "ПриВыбореКонтрагента". Но код туда "не заходит".

Подскажите, пожалуйста, что я делаю неправильно.
1 Stanislav_134
 
06.03.20
15:51
НачалоВыбора или НачалоВыбораИзСписка  ничего не меняет
2 runoff_runoff
 
06.03.20
16:18
ПараметрыВыбора = Новый Массив;
ПараметрыВыбора.Добавить(Новый ПараметрВыбора("Отбор.ВидНоменклатуры", НапримерВидМатериал));
    
Элементы.Номенклатура.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбора);
3 Stanislav_134
 
06.03.20
16:31
(2) Так а куда этот код вставлять?
4 Stanislav_134
 
06.03.20
16:32
То есть я понимаю, что это параметры отбора, но в какой момент и где передавать эти параметры в выбор?
5 runoff_runoff
 
06.03.20
17:22
Форма.Элементы.ДополнительныйРеквизитЗначение_5978F255x9BE5x11E8x82ADx88B111D596E7_8FC65A3Cx5F94x11EAx80EFx00259035DDA8.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбора); // в той же процедуре, предположительно, ПриСозданииНаСервере
6 Stanislav_134
 
06.03.20
17:45
(5) Дело в том, что это Дополнительные реквизиты. Они появляются на форме не в "ПриСозданииНаСервере", а в момент открытия раздела "Дополнительно" через процедуру общего модуля
7 Stanislav_134
 
06.03.20
17:51
В принципе, попробую сейчас посмотреть в какую процедуру модуля формы код возвращается из этого общего модуля, и там добавить параметры выбора
8 runoff_runoff
 
06.03.20
18:23
еще бы название и версию конфы озвучить и имя справочника
9 Stanislav_134
 
06.03.20
19:04
(8) УТ 11.4.6.188 Справочник "КонтактныеЛицаПартнеров".

Получилось. Нашел в какое место модуля формы элемента возвращается код после выполнения в общем модуле кода по добавления на форму общих реквизитов и уже здесь разместил код по отбору:


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



&НаСервереБезКонтекста
Функция ПолучитьСсылкиНаПартнеров(Партнер)

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

КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьСсылкиНаПартнеров(Партнер)

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

КонецФункции


Спасибо за помощь!
10 Stanislav_134
 
06.03.20
19:05
Сорри, случайно дважды одну и ту же функцию вставил
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан