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

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

ru
Offline Offline

« : 24-06-2013 10:56 » 

Здравствуйте уважаемые форумчани. Есть документ Оказание услуги, в табличной части документа есть реквизит у которого тип данных ссылка на справочник. Справочник иерархический в нем две подгруппы: Услуги и Материалы. Как сделать чтобы при заполнении документа в поле этого реквизита пользователь мог выбрать только элементы одной подгруппы Услуги, а при выборе элементов другой подгруппы выдавалось сообщение " в этом документе выбирать эти элементы нельзя"

Пытался найти подобную ситуацию по форуму через поиск, ничего подобного найти не смог.

Подскажите пожалуйста как можно выпольнить мою задачу?
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #1 : 24-06-2013 21:30 » 

У этого реквизита есть событие ОбработкаВыбора. Вызывается после осуществления выбора, но до помещения выбранного значения в элемент управления. У обработчика этого события есть параметр "ВыбранноеЗначение". Там можно и проверять ваше условие.
Записан
Vogde
Участник

ru
Offline Offline

« Ответ #2 : 24-06-2013 21:34 » 

Если я вас правильно понял в обработчике события надо программно прописать условия отбора?
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #3 : 24-06-2013 21:43 » 

Параметр "ВыбранноеЗначение" будет содержать ссылку на выбранный пользователем элемент справочника. Но это клиентская процедура, а анализ нужно производить на сервере. Поэтому я бы создал процедуру серверную, внеконтекстную с двумя параметрами Отказ и ВыбранноеЗначение и в ней бы проверял, если выбранное значение не принадлежит нужной группе тогда отказ = истина. Это значит, что выбранное значение не поместиться в поле на форме. После выхода из серверной процедуры можно проверять:
Код:
Если Отказ = истина Тогда
Предупрежедение("в этом документе выбирать эти элементы нельзя");
КонцЕсли
Записан
Vogde
Участник

ru
Offline Offline

« Ответ #4 : 24-06-2013 21:53 » 

Большое спасибо за помощь! Я только начал изучать 1С. Поэтому не хватает ни опыта ни знаний написать самостоятельно код.
Если вам не сложно покажите покажите как должна выглядеть процедура на сервере и на клиенте. За совет буду очень вам благодарен. 
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #5 : 24-06-2013 22:06 » 

Например реквизит "Номенклатура" типа СправочникСсылка.номенклатура.

Код:
&НаКлиенте
Процедура ТабличнаяЧастьНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

      ПроверитьВыбранноеЗначние(ВыбранноеЗначение, СтандартнаяОбработка)
      Если СтандартнаяОбработка = Ложь Тогда
          Предупрежедение("в этом документе выбирать эти элементы нельзя");
      КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Процедура  ПроверитьВыбранноеЗначние(ВыбранноеЗначение, СтандартнаяОбработка)
       // тут нужно как-то найти разрешенную подгруппу Услуг. Ну, пусть по наименованию ,
       //далеко не идеальный вариант, но что там у вас я не знаю.

      РазрешенныйРодитель = Справочники.Номенклатура.НайтиПоНаименованию("РазрешенныеУслуги");

      Если ВыбранноеЗначение.Родитель <> РазрешенныйРодитель  Тогда
           СтандартнаяОбработка = Ложь Тогда
      КонецЕсли;

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

Записан
Vogde
Участник

ru
Offline Offline

« Ответ #6 : 24-06-2013 22:23 » 

Еще раз хочу принести Вам свою признательность и благодарность. Над этой проблемой думаю несколько дней, выложил ее на 4 форумах и только вы помогли мне с ней разобраться

Добавлено через 1 день, 10 часов и 15 минут:
 Уважаемый Dest! Воспользовался вашим кодом. Но пока так задачу и не решил, постоянно ругается компилятор.
Вот файл информационной базы может быть у вас получиться решить задачу.
Возможно косяк в самой базе, а может просто кривые руки С ума сойти...
Если есть возможность и время помогите пожалуйста.

* 1Cv8.dt (62.56 Кб - загружено 944 раз.)
« Последнее редактирование: 26-06-2013 08:38 от Vogde » Записан
Dest
Опытный

ru
Offline Offline

« Ответ #7 : 26-06-2013 22:20 » new

Дело в тот, что рановато вам свою конфу писать. Да я несколько ошибок в коде сделал, но главное суть была передана правильно.
Я сделал, но советую в справочник номенклатура добавить реквизит "Услуга" типа булево, если он установлен, значит элемент услуга. Сделайте, если хотите  Флаг тебе в руки!. А то проверять, что элемент принадлежит группе "Услуги" - это не умно.

      РазрешенныйРодитель = Справочники.Номенклатура.НайтиПоНаименованию("Услуги");
      Если НЕ ВыбранноеЗначение.ПринадлежитЭлементу(РазрешенныйРодитель)  Тогда           Меня одолевают смутные сомнения

               

* 1Cv8_27.dt (58.68 Кб - загружено 921 раз.)
Записан
Vogde
Участник

ru
Offline Offline

« Ответ #8 : 26-06-2013 23:34 » 

Полностью с вами согласен рановато. Это и не моя конфигурация, я прохожу учебный курс вот по нему и ее и создаю. Просто была поставлена задача и вы ее помогли мне решить. С моим уровнем знаний приходилось тыкаться как слепому котенку. И еще раз спасибо. Попытаюсь самостоятельно воплотить в жизнь ваш совет насчет реквизита.
Записан
Kivals
Модератор

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

WWW
« Ответ #9 : 27-06-2013 07:01 » 

Dest, если добавить ревизит Услуга типа булево - то никаких програмных проверок городить не надо: у элемента формы есть свойство "Параметры выбора". Вот туда нужно добавить условие "Услуга - Истина" (см. пример для ПризнакДохода на скриншоте) - и все: форма списка для выбора откроется только с элементами, у которых установлен признак Услуга.

* sc-20130627100010.png (149.15 Кб - загружено 3117 раз.)
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #10 : 27-06-2013 08:40 » 

Точняк, Kivals  Да-да 
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines