Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Событие НачалоВыбора  (Прочитано 21290 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vetalkuim
Новенький

ru
Offline Offline

« : 07-03-2012 05:03 » 

Здравствуйте шаманы! В целях изучения программного языка Платформы 1С, решил по практиковать и завис вроде бы не на сложном моменте.
1С Платформа: v8.2.15.294
Конфигуратор: пишу с нуля.
Три справочника: Помещения, Сотрудники и Оборудование.
Между собой справочники ни как не связаны (то есть Владельцев не проставлял)
Сделал первый документ СвязьПомещенияИСотрудники, при проводке попадает все в регистр сведений, с таким же названием СвязьПомещенияИСотрудники.
Делаю второй документ (УстановкаОборудования) который предполагается должен заносить в регистр сведений СвязьПомещенийСотрудниковИОборудования (допустим с таким названием).
И хотелось бы при выборе сотрудника высвечивались только те сотрудники, которые относятся к текущему выбранному помещению.
То есть на форме документа УстановкаОборудования поля:
1. для выбора из списка Помещения
2. для выбора из списка Сотрудники (но только те которые были занесены в регистр сведений СвязьПомещенияИСотрудники для текущего выбранного Помещения)
3. для выбора из списка оборудование.

Я понимаю что нужно отлавливать событие НачалоВыбора, и на пример с помошью запроса высвечивать только нужных сотрудников, которые были занесены в регистр сведений с текущим помещением
Но я уже третий день бьюсь чтоб список заработал так ни чего и не заработало.
Помогите пожалуйста!
Записан
vetalkuim
Новенький

ru
Offline Offline

« Ответ #1 : 10-03-2012 07:21 » 

Сам спросил, сам и отвечу! Но я все ровно жду ответов может у кого-то будет лучше способ, что в принципе возможно!

1. Пишем процедуру для документа в модуле объекта

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

Запрос.УстановитьПараметр("Помещение", Помещение);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Наименование");
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецФункции

Эта процедура как мы видим возвращает колонку "наименование" справочника "сотрудники". И только те которые принадлежат текущему выбранному помещению

2. Так как с событием НачалоВыбора у меня ни чего не получилось я отрабатывал событие НачалоВыбораИзСписка, что в принципе подходит для данной задачи еще больше.

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

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

3. После выбора из списка необходимо зафиксировать это выбор и в этом нам поможет обработчик события ОбработкаВыбора

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

&НаСервере
Функция ПолучитьЭлементСправочникаСотрудникНаСервере(ВыбранноеЗначение)
Возврат Справочники.Сотрудники.НайтиПоНаименованию(ВыбранноеЗначение);
КонецФункции

Ну вот и все. Если заметили тема ветки звучит НачалоВыбора а воспользовался я событием НачалоВыбораИзСписка. Если кто из гуру подскажет как сделать все таки как задумывалось в самом начале, помогите, буду признателен и благодарен!
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 26-04-2012 07:28 » new

Цитата
И хотелось бы при выборе сотрудника высвечивались только те сотрудники, которые относятся к текущему выбранному помещению.
Можно вообще обойтись без событий:
Посмотри свойства реквизитов ПараметрыВыбора и СвязиПараметровВыбора
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines