Имя: Пароль:
1C
1С v8
1C Составной тип
0 pele
 
05.06.12
11:21
Есть Код:

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

ИНАЧЕ    
   //Окончания ввода текста для реквизита Контрагенты составного типа
   Запрос = Новый Запрос;
   Запрос.Текст =
    "ВЫБРАТЬ
    |    Контрагенты.Ссылка,
    |    Контрагенты.Наименование
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |    Контрагенты.Наименование ПОДОБНО &Буква" ;
    Запрос.УстановитьПараметр("Буква",Текст+"%" );
    ВыборкаКонтрагент = Запрос.Выполнить().Выбрать();
   
    Если ВыборкаКонтрагент.Количество() > 15 Тогда
       Возврат;
   КонецЕсли;
   
   Если ВыборкаКонтрагент.Количество() = 1 Тогда
       ВыборкаКонтрагент.Следующий();
       Если ВыборкаКонтрагент.Наименование = Текст Тогда
           Контрагент = ВыборкаКонтрагент.Ссылка;
       КонецЕсли;
       Возврат;
   КонецЕсли;
   
   сзКонтрогентов = Новый СписокЗначений;
   Пока ВыборкаКонтрагент.Следующий() Цикл
       сзКонтрогентов.Добавить(ВыборкаКонтрагент.Ссылка);
   КонецЦикла;
   
   Если ВыборкаКонтрагент.Ссылка = Неопределено тогда
       возврат;
   КонецЕсли;
   
   ВыбраннаяСтрока = ВыбратьИзСписка(сзКонтрогентов, Элемент);
   
   Если ВыбраннаяСтрока <> Неопределено тогда
       Контрагент =ВыбраннаяСтрока.Значение;                
   КонецЕсли;
КонецЕсли;    
   КонецПроцедуры
//////////////////////////////////////////
когда вызываю процедуру, для поля ввода конрагент- не работает только для физические лица! помогите???!!!
1 Нуф-Нуф
 
05.06.12
11:25
что значит не работает
2 mkanaev
 
05.06.12
11:28
Если ЭлементыФормы.ФИО Тогда     - чего ты сдеся проверяешь?
3 cViper
 
05.06.12
11:29
(0) Код одинаковый по сути. Сделай переменную с именем справочника и присваивай ей значение в зависимости от ЭлементыФормы.ФИО. И передавай динамически в запрос. не надо дублировать код.
4 cViper
 
05.06.12
11:29
(2) по-моему это флаг на форме.
5 cViper
 
05.06.12
11:30
+(4) физлица
6 mkanaev
 
05.06.12
11:30
(4) с типом булево?
7 cViper
 
05.06.12
11:32
(6)думаю тчо да. По которому он определяет справочник поиска.
8 mkanaev
 
05.06.12
11:33
(7) а я думаю что у него структурируемый сложный тип для описания элемента формы!!! а вот ЭлементыФормы.ФИО.Значение - наверно булево.
9 mkanaev
 
05.06.12
11:35
кстате УФ или обычные?
10 cViper
 
05.06.12
11:38
(9) из (0) понятно что обычыне
11 mkanaev
 
05.06.12
11:56
и что же даёт ЭлементыФормы.ФИО в условии?
12 pele
 
05.06.12
12:41
Я написала вот этот код:

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


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


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

И мне теперь нужно вызвать эту процедуру : Вот->

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

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

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

Работает только Физические лица  для контрагентов не работает(((((
13 mkanaev
 
05.06.12
12:53
зайди под отладкой посмотри условие, удивись...
14 pele
 
05.06.12
12:59
не удивилась..я понимаю что тут ошибка но не знаю как исправить(
15 pele
 
05.06.12
13:32
Пасиб за помощь разобралась!)
Ошибка? Это не ошибка, это системная функция.