Имя: Пароль:
1C
1С v8
Отбор в форме списка
,
0 spapin87
 
30.10.13
12:10
Добрый день, подскажите пожалуйста. У меня есть форма заявки клиента, где есть поле Контрагент и КонтактноеЛицоКонтрагента(СправочникСсылка.ФизическиеЛица). Так вот если контрагент указан, в СпрФизическиеЛица устанавливать отбор по этому контрагенту. Как делаю:

Процедура КонтактноеЛицоКонтрагентаНачалоВыбора(Элемент, СтандартнаяОбработка)
    Если Не ПустаяСтрока(контрагент) Тогда
        ЗначениеОтбора = Новый Структура("Организация",Контрагент);
        ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора);
        ОткрытьФорму("Справочник.ФизическиеЛица.ФормаСписка",ПараметрыВыбора);
    КонецЕсли;
КонецПроцедуры
1 vicof
 
30.10.13
12:11
СтандартнаяОбработка = Ложь;
2 spapin87
 
30.10.13
12:15
(2) Не помогло. Но теперь хоть не открываются 2 формы списка.
3 vicof
 
30.10.13
12:16
Ага, ты бы еще проблему озвучил
4 spapin87
 
30.10.13
12:18
Проблема в том что отбор не устанавливается по полю "Организация"(СправочникСсылка.Контрагенты) в форме списка ФизическиеЛица ПриНачалеВыбора.
5 vicof
 
30.10.13
12:22
Типы значений разные?
6 George Wheels
 
30.10.13
12:26
(0) Обычно поля Организация - это Справочник.Организации, а не Контрагенты.
7 spapin87
 
30.10.13
12:26
В форме заявки клиента
Контрагент - Тип(СправочникСсылка.Контрагенты)
В форме списка ФизическиеЛица
Организация - Тип(СправочникСсылка.Контрагенты)
8 spapin87
 
30.10.13
12:30
(7) Конфа самописная как уж назвали поле...
9 vicof
 
30.10.13
12:30
(7) то за конфигурация?
10 vicof
 
30.10.13
12:30
(8) понял
11 vicof
 
30.10.13
12:34
Сообщить(Контрагент + ", " + ТипЗНЧ(Контрагент));
12 Wobland
 
30.10.13
12:35
(11) ""+Контрагент
13 vicof
 
30.10.13
12:37
(12) и так должно сработать, типа получить представление и присобачить строчки
14 Wobland
 
30.10.13
12:40
(13) двоечник
Справочники.Номенклатура.НайтиПоНаименованию("Черева")+"20"    {(1)}: Преобразование значения к типу Число не может быть выполнено
15 spapin87
 
30.10.13
12:41
(13)ТипЗнч(Контрагент) в отладчике Значение - Контрагенты
При выводе сообщения: Преобразование значения к типу Число не может быть выполнено
16 Wobland
 
30.10.13
12:42
чему будет равно:

"10"++10+"1" =
10++10+"1" =
17 Wobland
 
30.10.13
12:42
(16) и 10++"10"+"1"
18 vicof
 
30.10.13
12:43
(14) Ладно, убедил :)
19 vicof
 
30.10.13
12:45
(16)
"10101"
21
21
20 Wobland
 
30.10.13
12:47
(19) сам считал? крут. я в одном примере ошибся тогда. кто-то тут рассказывал, я сейчас по памяти воспроизвёл
21 Wobland
 
30.10.13
12:48
22 vicof
 
30.10.13
12:51
(20) все легко, сначала унарные плюсы выполняются, потом слева направо, преобразуясь к типу первого слагаемого
23 spapin87
 
30.10.13
12:51
Сообщить(ТипЗнч(Контрагент));
Сообщение: Контрагенты
24 spapin87
 
30.10.13
13:14
Вот структура
http://savepic.org/4609903.jpg
25 George Wheels
 
30.10.13
13:19
(0) ОткрытьФорму("Справочник.ФизическиеЛица.Форма.ФормаСписка",ПараметрыВыбора);
26 spapin87
 
30.10.13
13:28
(25) тот же результат (((
В структуре ПараметрыВыбора-Отбор-Организация В значении стоит нужный контрагент. Но отбора нет в форме списка, выводятся все физ лица
27 George Wheels
 
30.10.13
13:31
(26) Я у себя попробовал сначала так:
ОткрытьФорму("Справочник.ФизическиеЛица.ФормаСписка",ПараметрыВыбора);
отбор не сработал, а потом так:
ОткрытьФорму("Справочник.ФизическиеЛица.Форма.ФормаСписка",ПараметрыВыбора);
отбор сработал.
28 George Wheels
 
30.10.13
13:33
(26) +Забыл спросить. ФормаСписка существует или генерится?
29 spapin87
 
30.10.13
13:37
(28) ФормаСписка существует.
30 George Wheels
 
30.10.13
13:40
(29) Остаётся только смотреть обработчики в самой ФормаСписка.
31 spapin87
 
30.10.13
13:46
(30) ДА в том то и дело что там никаких событий нет
32 George Wheels
 
30.10.13
13:47
Подписки?
33 spapin87
 
30.10.13
13:53
(32) Тоже нет
34 spapin87
 
30.10.13
13:53
Может как-то по другому попробовать сделать отбор?
35 vicof
 
30.10.13
14:20
Форма = Документы.ЗаказПокупателя.ПолучитьФормуВыбора(,Элемент,);
        Отбор = Форма.ДокументСписок.Отбор;

        Отбор["Организация"].Использование    = Истина;
        Отбор["Организация"].Значение        = Организация;
        Отбор["Организация"].ВидСравнения    = ВидСравнения.Равно;
        
        Отбор["Контрагент"].Использование    = Истина;
        Отбор["Контрагент"].Значение        = Контрагент;
        Отбор["Контрагент"].ВидСравнения    = ВидСравнения.Равно;
        
        Отбор["ДоговорКонтрагента"].Использование    = Истина;
        Отбор["ДоговорКонтрагента"].Значение        = ДоговорКонтрагента;
        Отбор["ДоговорКонтрагента"].ВидСравнения    = ВидСравнения.Равно;
        
        Форма.ЭлементыФормы.ДокументСписок.НастройкаОтбора.Организация.Доступность            = Ложь;
        Форма.ЭлементыФормы.ДокументСписок.НастройкаОтбора.Контрагент.Доступность            = Ложь;
        Форма.ЭлементыФормы.ДокументСписок.НастройкаОтбора.ДоговорКонтрагента.Доступность    = Ложь;
36 spapin87
 
30.10.13
14:40
vicof большое спасибо за пример!
Сделал так и все взлетело:

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