Имя: Пароль:
1C
1С v8
Форма выбора с отбором в списке
0 Ivan86
 
24.08.16
14:58
Бухгалтерия предприятия 3.0 в документе ИнвентаризацияОС при выборе МОЛ - надо изменить стандартную обработку, чтобы МОЛ отбирался по подразделению.

Код:

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

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

СписокОС - заполняется физ. лицами. Но отбор не устанавливается. Что я делаю не так?
1 Горогуля
 
24.08.16
14:59
отбор как-то в параметрах формы неплохо задаётся
2 Горогуля
 
24.08.16
15:00
Ответ=ОткрытьФормуМодально("Справочник.СпособыОтраженияРасходовПоАмортизации.ФормаВыбора", Новый Структура("Отбор", Новый Структура("Организация", Объект.Организация)));
3 Ivan86
 
24.08.16
15:00
(1) Но через параметры - нельзя указать Всписке. если я не ошибаюсь?!
4 Горогуля
 
24.08.16
15:01
а куда правое значение дел?
5 Горогуля
 
24.08.16
15:02
(4) всё-всё, вижу
6 _stay true_
 
24.08.16
15:02
Либо можно использовать Список.КомпоновщикНастроек

Что-то вроде Форма.Список.КомпоновщикНастроек
7 Горогуля
 
24.08.16
15:03
"в списке" и "в массиве" - это разные вещи?
8 FIXXXL
 
24.08.16
15:04
МассивМаршрутов = ПолучитьМассивМаршрутовПоСкладуСервер(Объект.Склад);
    СписокМаршрутов = Новый СписокЗначений;
    СписокМаршрутов.ЗагрузитьЗначения(МассивМаршрутов);
    ПараметрыОтбора = Новый Структура("Ссылка", СписокМаршрутов);
    ПараметрыОткрытия = Новый Структура("Отбор", ПараметрыОтбора);
    ОткрытьФорму("Справочник.Маршруты.ФормаВыбора", ПараметрыОткрытия, Элемент);
9 FIXXXL
 
24.08.16
15:04
(3) ошибаешься
10 Ivan86
 
24.08.16
15:11
(8)     СтандартнаяОбработка = Ложь;        
    СписокОС = МОЛНачалоВыбораНаСервере(Объект.ПодразделениеОрганизации);

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

все равно не отбирает
11 _stay true_
 
24.08.16
15:12
УТ 11.2

СписокЗначений = Новый СписокЗначений;        
Для каждого СтрТЗ Из ТЗ Цикл
            СписокЗначений.Добавить(СтрТЗ.Документ);
КонецЦикла;


НовОтбор = Форма.Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));



НовОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
СтрокаОтбора.Использование  = Истина;
НовОтбор.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Ссылка");
НовОтбор.ПравоеЗначение = СписокЗначений;
12 _stay true_
 
24.08.16
15:15
(10) (11)
Можешь сначала получить форму, потом захренакать этот код и потом открыть. Либо передать нужные значения как параметры и заполнить в ПриСозданииНаСервере открываемой формы.
13 Ivan86
 
24.08.16
15:26
(12)
&НаКлиенте
Процедура МОЛНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    Если ЗначениеЗаполнено(Объект.ПодразделениеОрганизации) Тогда
        СтандартнаяОбработка = Ложь;        
        СписокОС = МОЛНачалоВыбораНаСервере(Объект.ПодразделениеОрганизации);
        
        Форма = ОткрытьФорму("Справочник.ФизическиеЛица.Форма.ФормаВыбораСотрудников");        
        НовОтбор = Форма.Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));         
        
        НовОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
        НовОтбор.Использование  = Истина;
        НовОтбор.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Ссылка");
        НовОтбор.ПравоеЗначение = СписокОС;

    
    КонецЕсли;    
    
КонецПроцедуры

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

все равно не отбирает
14 Горогуля
 
24.08.16
15:29
открытие формы пересунуть в после задания отбора?
15 Горогуля
 
24.08.16
15:30
кстати, зачем СтандартнаяОбработка не ложь?
16 Ivan86
 
24.08.16
15:35
(15) Если подразделение не заполнено - пусть отрабатывает стандартная.
(14) в случае (8) сначала параметры, потом открытие формы.
в случае (11) сначала получаем форму, потом делаем отбор.

все равно не отбирает - в настроить список - значение отбор тоже не подставляется
17 _stay true_
 
24.08.16
15:44
(16) Этот код отрабатывает на сервере. Конкретно у меня в ПриСозданииНаСервере
18 _stay true_
 
24.08.16
15:45
(17) В конце попробуй ещё     Форма.Список.КомпоновщикНастроек.ЗагрузитьНастройки(Форма.Список.КомпоновщикНастроек.Настройки);
19 FIXXXL
 
24.08.16
16:34
(10) СписокОС - должен быть массив
20 Ivan86
 
24.08.16
16:44
(19) СписокОС - массив.

СписокОС = Новый СписокЗначений;
    ЗапросМВА= Новый Запрос;
    ЗапросМВА.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    МестонахождениеОСБухгалтерскийУчет.МОЛ КАК МОЛ
    |ИЗ
    |    РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК МестонахождениеОСБухгалтерскийУчет
    |ГДЕ
    |    МестонахождениеОСБухгалтерскийУчет.Местонахождение = &Местонахождение";
    ЗапросМВА.УстановитьПараметр("Местонахождение", ПодразделениеОрганизации);
    
    СписокОС = ЗапросМВА.Выполнить().Выгрузить().ВыгрузитьКолонку("МОЛ");
21 FIXXXL
 
24.08.16
17:23
(20) он заполнен, проверял?
22 Ivan86
 
24.08.16
17:29
ответ нашел. ФормаСписка является формой выбора для справочника Физические лица Бухгалтерия предприятия, редакция 3.0 (3.0.43.258).
Все данные заполняются. Весь код приведенный в пунктах (11) (8) рабочий

Всем спасибо за помощь!