Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 00:26

Проблема с добавлением пользователя из одного справочника в другой

Автор Panacea531, 18 мар 2023, 22:51

0 Пользователей и 1 гость просматривают эту тему.

Panacea531

Подскажите пожалуйста что не так делаю . Имеется справочник "пользователи" и справочник "дисциплины" . В справочнике "пользователи" имеется табличная часть "дисциплины" в которую можно добавлять предметы которые будет вести пользователь, так вот реализована команда "заполнить Дисциплину" при переходе которой я бы хотел чтобы открывался справочник "дисциплины" и заполнялись сразу поля преподаватель и дисциплина из справочника где команда (т.е пользователи ) . Сам код написал , но почему то дисциплина вставляется а вот пользователь не вставляется , грешу на выделенную строку ( скрин) но объект все верно написан без нареканий . Может кто сталкивался c подобным ?



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

       Если СсылкаНаСправочник<> Неопределено Тогда
Параметрыформы = Новый Структура ("Ключ", СсылкаНаСправочник);
ОткрытьФорму ("Справочник.Дисциплины.ФормаОбъекта", Параметрыформы);

Иначе   

   
    ФормаНовогоСправочника = ПолучитьФорму ("Справочник.Дисциплины.ФормаОбъекта");
    ФормаНовогоСправочника.Объект.Пользователь= ЭтаФорма.Объект.Наименование;
ФормаНовогоСправочника.Объект.Наименование = ТекущаяСтрока. Дисциплина; 

       ФормаНовогоСправочника.Открыть();
КонецЕсли; 

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

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

Выборка = Запрос.Выполнить () .Выбрать ();
Если Выборка.Следующий() Тогда
СсылкаНаСправочник = Выборка.Ссылка; 

    КонецЕсли;
   
    КонецПроцедуры   

antoneus

Потому что не надо в ссылочное поле (Пользователь) пихать строку (Объект.Наименование), 1с таких приколов не понимает.
А вообще - какая-то избыточность - в пользователе хранить дисциплины, в дисциплинах - пользователя, надо контролировать изменения в обоих местах - при изменении списка дисциплин в пользователе менять пользователя в дисциплинах и наоборот, лучше регистр намутить или в дисциплине сделать пользователя не реквизитом а динамически заполняющимся информационным полем.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск