Имя: Пароль:
1C
1С v8
Выпадающий список элементов справочника по Коду
, , ,
0 Iater
 
21.06.15
21:15
Всем привет!

В справочнике есть стандартные реквизиты Код и Наименование.
В документе я хочу выбрать в поле ФИО сотрудника, для этого ставлю тип поля ссылку на справочник Сотрудники. Пользователь видит список фамилий, выбирает и в поле ФИО, допустим, появляется "Иванов".

А как сделать так, чтобы можно было выбирать в этом же справочнике не Наименование, а Код?

Я хочу сделать поле ИД тоже с типом ссылка, из которого тоже можно будет выбрать сотрудника. Но мне, конечно, нужен КОД, а не Наименование.

Как это сделать? Пока получается вот так:
http://i.imgur.com/kWQ1ExE.png

Как это сделать?
1 Iater
 
22.06.15
14:56
подниму тему
2 butterbean
 
22.06.15
14:59
непонятно нифига, но если нужно чтоб отображался код, то можно изменить представление справочника
3 Iater
 
22.06.15
15:24
Если изменить представление, то тогда в поле ФИО будет отображаться Код? Это мне тоже не подходит...

А что непонятного? Могу ещё пояснить
4 vicof
 
22.06.15
15:30
(3) При изменении и открытии формы заполняй текстовое поле рядом с ФИО
5 butterbean
 
22.06.15
15:32
(3) если нужно чтобы просто отображался код, то можно добавить декорацию надпись и в ПутьКДанным прописать Сотрудник.Код
6 palpetrovich
 
22.06.15
15:38
дык, если в ПутьКДанным будет Объект.Сотрудник - то в списке будет и код и наименование
7 Iater
 
22.06.15
15:42
Пояснение:

Я хочу чтобы юзер мог выбрать по фамилии, тогда ИД подставится автоматом. А если фамилия трудная (какая-нибудь китайская к примеру), то проще выбрать по ИД. Тогда юзер выбирает код из справочника, а поле ФИО заполняется автоматически.

Поэтому мне важно, чтобы в поле ФИО были фамилии. А поле ИД - код.
8 hhhh
 
22.06.15
15:54
(7) там то и другое действует. Юзер может фамилию вводить, а может и код. НЕ нужно 2 поля заводить.
9 Iater
 
22.06.15
15:57
(8) я не понял, где там?
Два поля нужно, чтобы документ был информативным
10 butterbean
 
22.06.15
15:59
(9) сделай 1 поле с выбором, в него можно и код и наименование писать, в нем будет отображаться ФИО, а поле с кодом добавь в виде надписи рядом
11 vicof
 
22.06.15
15:59
(9) "проще выбрать" и "документ был информативным" две совершенно разные проблемы. Ты уж определись.
12 Mirnin
 
22.06.15
16:00
Обработчики событий ПриИзменении для каждого поля.

При изменении фамилии - заполнение поля с кодом. И наоборот.
13 Iater
 
22.06.15
16:01
(10) да так можно, но тогда если набирать ИД, то придется руками вводить - можно допустить ошибку или вовсе неверно указать. Короче я бы хотел, чтобы именно был выбор из справочника, а не строка
14 Iater
 
22.06.15
16:02
(12) так и делаю, но хочу, чтобы оба поля и ФИО и ИД давали выбор из справочника. При этом в ФИО - фамилии подставлялись, а в ИД - код.
Сейчас у меня в оба поля попадают фамилии
15 vicof
 
22.06.15
16:08
(13) так тебе система и ругнется, что нет такого кода
16 vicof
 
22.06.15
16:09
(14) Меняй НачалоВыбора
17 hhhh
 
22.06.15
16:11
(14) так там когда выбираешь, там есть и то и другое в форме выбора. Колонка фамилия и колонка Код.
18 Mirnin
 
22.06.15
16:13
(14)
НачалоВыбора()
ОбработкаВыбора()

т.е. для кода тип значения должен быть строкой, с прикрученным открытием формы выбора сотрудников. Затем код выбранного сотрудника прописывается в поле "Код", а в поле "Фамилия" обработчиком ПриИзменении() (либо всё той же обработкой выбора) вносится фамилия.
19 Iater
 
22.06.15
17:09
(18) я видимо что-то не понимаю

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

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

Ошибка: Переменная не определена (Справочники)
20 Lexey_
 
22.06.15
17:18
(19) используй ОткрытьФорму()
21 vicof
 
22.06.15
17:22
(19) ОФ иУФ несколько разные вещи
22 Iater
 
22.06.15
17:24
Дело в том что я просто не знаю )) Попробовал вот так:
&НаКлиенте
Процедура ИДНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;    //Отключаем стандартный вызов выбора
    ФормаВыбора = Справочники.Стадо.ПолучитьФормуВыбора();    // Получить форму выбора справочника
    ОткрытьФорму(ФормаВыбора);            // Открываем форму выбора

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


Все равно ругается на Справочники
23 VikingKosmo
 
22.06.15
17:25
(22) попробуй все же прочесть справку про ОктрытьФорму()
24 Mirnin
 
22.06.15
17:30
ФормаВыбора.ОткрытьФорму();

Но дело не в этом, он же не доходит до туда всё равно. Дело скорее всего в этом:

Справочники (Catalogs)
Использование:

Только чтение.
Описание:

Тип: СправочникиМенеджер.
Используется для доступа к определенным в конфигурации справочникам.

Доступность:

Сервер, толстый клиент, внешнее соединение.
25 Iater
 
22.06.15
17:35
(24) Mirnin, я пробовал затолкать это в функцию, ошибка пропадает, но не происходит ровным счетом ничего

как должно быть?
26 Фокусник
 
22.06.15
17:35
(9) "Два поля нужно, чтобы документ был информативным"

А что неинформативного, если пользователь будет вводить код прямо в поле с выбором сотрудника?
Так любой выбор любого справочника работает: можно ввести наименование или код. Это штатное поведение платформы, зачем добавлять "лишнюю информативность". Пользователи ЗНАЮТ, что в ЛЮБОЕ поле выбора справочника можно ввести КОД. Должны знать :)
27 hhhh
 
22.06.15
17:38
(25) это же у вас адская смесь из обычных и управляемых форм. То есть абсолютное незнание 1с. Зачем тогда беретесь за задачу?
28 Iater
 
22.06.15
17:39
(27) к сожалению когда рождался, мне забыли закачать знанеие 1с, пытаюсь наверстать ;)
29 Mirnin
 
22.06.15
17:50
(25) ОткрытьФорму("Справочник.Сотрудники.ФормаВыбора");

Выше, кстати, был абсолютно правильный совет про "почитать справку об ОткрытьФорму" :)
30 Iater
 
22.06.15
18:08
(29) Mirnin, спасибо! Про справку, к сожалению, моего градиента знаний в большинстве случаев не хватает, чтобы разобраться что там написано, очень не хватает простых примеров.

Вот что у меня получилось в итоге:

&НаКлиенте
Процедура ИДНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;       // вот это обязательно указывать?
    ОткрытьФорму("Справочник.Сотрудники.ФормаВыбора",, Элемент);
    
КонецПроцедуры


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

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

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

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


Всем спасибо! Особенно Mirnin!
Может где-то я в этом лохонулся и можно было сделать лучше?
31 Mirnin
 
22.06.15
18:55
ВыбранноеЗначение - ссылка на элемент справочника. Ссылка уже содержит в себе код.

Код = ВыбранноеЗначение.Код;

И.. всё. Никаких функций городить не нужно.
32 Iater
 
22.06.15
19:26
(31) точно! спасибо!