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

Получение из структуры нескольких значений

Автор Sasha1C, 18 янв 2024, 17:18

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

Sasha1C

Добрый день, при решении задачи авто заполнения реквизитов на форме документа столкнулся с проблемой, а именно: надо при изменении реквизита "Транспортное средство" заполнить остальные реквизиты на основании Отбора сделанного на сервере. Реквизит "Данные" получает нужные реквизиты авто заполнения, но вопрос как передать их на клиент, не использую отдельную функцию для каждого реквизита на клиенте. Регистр имеет измерение "ТранспортноеСредство" и 3 ресурса: "ПервыйГрузчик", "ВторойГрузчик", "Водитель". Ранее на этом форуме, было предложение переоткрыть форму переданным ключом, сработает, ли это здесь, и если да. Можете Продемонстрировать общую концепцию через переоткрытие формы. Другие предложения решения только приветствуются. Заранее спасибо. 
&НаКлиенте
Процедура ТранспортноеСредствоПриИзменении(Элемент)

Объект.Грузчик = Новый структура("Грузчик",ТранспортноеСредствоПриИзмененииНаСервере(объект.ТранспортноеСредство, объект.Дата));
Объект.ВторойГрузчик = Новый структура("ВторойГрузчик",ТранспортноеСредствоПриИзмененииНаСервере(объект.ТранспортноеСредство, объект.Дата));

//Объект.Водитель = ПолучениеВодителя(Объект.ТранспортноеСредство, Объект.Дата);

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

&НаСервере
Функция ТранспортноеСредствоПриИзмененииНаСервере(ТранспортноеСредство, Дата)

Отбор = Новый Структура("ТранспортноеСредство", ТранспортноеСредство);

Данные = РегистрыСведений.СоставБригады.СрезПоследних(дата, отбор);


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

LexaK

Sasha1C, так сразу на сервере и заполните все нужные данные
&НаСервере
Функция ТранспортноеСредствоПриИзмененииНаСервере(ТранспортноеСредство, Дата)
   
    Отбор = Новый Структура("ТранспортноеСредство", ТранспортноеСредство);
   
    Данные = РегистрыСведений.СоставБригады.СрезПоследних(дата, отбор);

//сразу и заполняем
Если Данные.Количество()  > 0 Тогда
    ЗаполнитьЗначенияСвойств(Объект, данные[0]);
КонецЕсли;

//или каким другим способом
           
КонецФункции
если помогло нажмите: Спасибо!

Sasha1C

LexaK, Я сделал по вашему примеру, ошибок не выдает, но реквизиты не заполнились. Может я что-то недопонял?
&НаКлиенте
Процедура ТранспортноеСредствоПриИзменении(Элемент)   
   
    //Объект.Грузчик = Новый структура("Грузчик",ТранспортноеСредствоПриИзмененииНаСервере(объект.ТранспортноеСредство, объект.Дата));
    //Объект.ВторойГрузчик = Новый структура("ВторойГрузчик",ТранспортноеСредствоПриИзмененииНаСервере(объект.ТранспортноеСредство, объект.Дата));
    //
    ////Объект.Водитель = ПолучениеВодителя(Объект.ТранспортноеСредство, Объект.Дата);
    ТранспортноеСредствоПриИзмененииНаСервере(Объект.ТранспортноеСредство, Объект.Дата, Объект.Грузчик, Объект.ВторойГрузчик, Объект.Водитель)

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

&НаСервере
Функция ТранспортноеСредствоПриИзмененииНаСервере(ТранспортноеСредство, Дата, ПервыйГрузчик, ВторойГрузчик, Водитель)
   
    Отбор = Новый Структура("ТранспортноеСредство", ТранспортноеСредство);
   
    Данные = РегистрыСведений.СоставБригады.СрезПоследних(дата, отбор);
   
    Если Данные.Количество() > 0 Тогда
        ЗаполнитьЗначенияСвойств(ПервыйГрузчик,Данные.Колонки.ПервыйГрузчик);
        ЗаполнитьЗначенияСвойств(Водитель,Данные.Колонки.Водитель);
        ЗаполнитьЗначенияСвойств(ВторойГрузчик,Данные.Колонки.ВторойГрузчик);   
    КонецЕсли
   
   
           
КонецФункции

antoneus

Ну и где там "по примеру"? Зачем отсебятину-то пороть? Ключевая строка

ЗаполнитьЗначенияСвойств(Объект, данные[0]);

Sasha1C

antoneus, Сработало, но подтягивает только первый реквизит, а как подтянуть остальные?

LexaK

Sasha1C, ЗаполнитьЗначенияСвойств(Объект, данные[0]);срабатывает если у вас совпадают ИменаРеквизитов
если имена разные тогда напрямую присваивать
примерно так
&НаСервере
Функция ТранспортноеСредствоПриИзмененииНаСервере(ТранспортноеСредство, Дата)
   
    Отбор = Новый Структура("ТранспортноеСредство", ТранспортноеСредство);
   
    Данные = РегистрыСведений.СоставБригады.СрезПоследних(дата, отбор);

//сразу и заполняем
Если Данные.Количество()  > 0 Тогда
    ЗаполнитьЗначенияСвойств(Объект, данные[0]);
    Объект.Грузчик1 = данные[0].ПервыйГрузчик;
    Объект.Грузчик2 = данные[0].ВторойГрузчик; //по разным именам реквизитов
//и т.д.
КонецЕсли;

//или каким другим способом
           
КонецФункции
если помогло нажмите: Спасибо!

Sasha1C


Теги: структура 

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

Рейтинг@Mail.ru

Поиск