Имя: Пароль:
1C
1С v8
Замена пользователя
0 FransisDrake
 
04.03.20
09:20
Добрый день, коллеги!
Такая задача
Есть список задач, при выборе строки и нажатии на кнопку "переназначить", открывается форма, в которой список пользователей
Нужно, чтобы при выборе нового пользователя, в задаче, на которой был курсор изменился исполнитель.


Процедура КоманднаяПанель1Переназначение(Кнопка)
    Если Исполнитель  = ПользователиКлиентСервер.ТекущийПользователь() ИЛИ Исполнитель.РольДоступна("ПолныеПрава") Тогда
        Форма= Справочники.Пользователи.ПолучитьФорму("КХМ_ФормаСпискаКраткая");
        Форма.Заголовок= "Перепоручить задачу";
        Форма.РежимВыбора = Истина;
        Открытие = Форма.ОткрытьМодально();
        
        
        
    Иначе
        Сообщить("У Вас нет прав на перепоручение текущей задачи", СтатусСообщения.Важное);
    КонецЕсли;

КонецПроцедуры
1 Fish
 
04.03.20
09:21
Ты хочешь задачей поделиться или что-то спросить?
2 FransisDrake
 
04.03.20
09:27
(1) Спросить :)
как реализовать выбор пользователя?
3 Garykom
 
гуру
04.03.20
09:28
(2) >Форма.ОткрытьМодально()

Для начала у тебя какая платформа и конфа то?
4 unenu
 
04.03.20
09:29
модально уже еретизм
5 FransisDrake
 
04.03.20
09:34
(3)  8.3.15.1830, УПП 1.3
6 FransisDrake
 
04.03.20
09:43
Ну то есть, я немного не понимаю, как и где обратиться, чтобы по выбору выделенной строки и далее, после выбора нового пользователя, в этой строке заменились данные
7 hhhh
 
04.03.20
09:51
(6) ПолучитьФорму  где Владелец формы?
8 FransisDrake
 
04.03.20
09:54
(7) в списке выделили строку, нажали "переназначить" и там в открывшемся списке пользователей выбираем нового исполнителя
9 catena
 
04.03.20
10:07
(8)Из текущих данных все нужно кладешь в параметры, открываешь форму с параметрами, там при создании на сервере все из параметров забираешь.
10 FransisDrake
 
04.03.20
10:14
(9) у меня неуправляемая форма)
11 catena
 
04.03.20
10:17
(10)Тогда еще проще, делаешь реквизит формы,
фо = ПолучитьФорму()
фо.РеквизитКакНазовешь = ТекущаяЗадача
фо.Открыть()
12 FransisDrake
 
04.03.20
10:29
(11) зачем создавать новый реквизит?
13 FransisDrake
 
04.03.20
10:29
(11) у же есть табчасть список
14 catena
 
04.03.20
10:31
(13)Если уже есть, передавай в туда, что уже есть.
15 Fish
 
04.03.20
10:33
(13) Короче. Делаешь так:
1. При нажатии на кнопку получаешь форму выбора пользователя, которая должна тебе вернуть выбранное значение
2. Из текущей строки списка задач, получаешь задачу-объект и в нём меняешь исполнителя на выбранного.

Всё.
16 FransisDrake
 
04.03.20
11:36
(15) какой командой осуществляется выбор?
17 Fish
 
04.03.20
11:38
(16) В форме выбора это стандартная команда: "выбрать".
18 FransisDrake
 
04.03.20
11:43
Старый  - это текущий исполнитель
НовыйИсполнитель - в новыйисполнитель я хочу записать новое значение
Форма.ВыбратьИзСписка(Список, НовыйИсполнитель); - где-то тут я делаю неправильно

Старый = ЭлементыФормы.Список.ТекущаяСтрока.Ссылка.Исполнитель; // это текущий исполнитель
        НовыйИсполнитель = Исполнитель; // в новыйисполнитель я хочу записать новое значение
     Если Исполнитель  = ПользователиКлиентСервер.ТекущийПользователь() ИЛИ Исполнитель.РольДоступна("ПолныеПрава") Тогда
        Форма= Справочники.Пользователи.ПолучитьФорму("КХМ_ФормаСпискаКраткая");
        Форма.Заголовок= "Перепоручить задачу";
        Форма.РежимВыбора = Истина;
        Открытие = Форма.ОткрытьМодально();
        Форма.ВыбратьИзСписка(Список, НовыйИсполнитель); // где-то тут я делаю неправильно
        Старый = НовыйИсполнитель;
19 Fish
 
04.03.20
11:47
(18) Посмотри в отладчике, чему у тебя равно "Открытие", после того, как ты выбрал пользователя в модальной форме.
20 FransisDrake
 
04.03.20
11:53
(19) открытие равно тому пользователю, которого я выбрал
21 Fish
 
04.03.20
11:56
(20) И? На мысли никакие не наводит?
22 Fish
 
04.03.20
11:57
+(21) Т.е. п.1 из (15) ты выполнил - получил выбранного пользователя. Осталось сделать п.2
23 FransisDrake
 
04.03.20
11:59
(21) я понял, что это значение теперь нужно записать вместо старого

Открытие = Форма.ОткрытьМодально(); - вот здесь у меня  лежит новый пользователь


Старый ЭлементыФормы.Список.ТекущаяСтрока.Ссылка.Исполнитель - а вот здесь старый

Но, если я сделаю
Старый = Открытие;
разве это не будет ошибкой?
24 Fish
 
04.03.20
12:03
(23) Так ты не поменяешь. Тебе нужно из текущей строки списка получить задачу-объект. И в нём менять. Ну и не забыть записать объект :)
25 FransisDrake
 
04.03.20
12:27
(24)
Так, кажется, я на финишной прямой!
но все равно что-то не то, ругается, что поле недоступно для записи

ТС = ЭлементыФормы.Список.ТекущаяСтрока;
    НовыйИсполнитель = Исполнитель;
    Если Исполнитель  = ПользователиКлиентСервер.ТекущийПользователь() ИЛИ Исполнитель.РольДоступна("ПолныеПрава") Тогда
        Форма= Справочники.Пользователи.ПолучитьФорму("КХМ_ФормаСпискаКраткая");
        Форма.Заголовок= "Перепоручить задачу";
        Форма.РежимВыбора = Истина;
        Открытие = Форма.ОткрытьМодально();
        Если ТипЗнч(ТС.Ссылка)= тип("ЗадачаСсылка.НА_ЗадачаСогласования") Тогда         
            Если ТипЗнч(ТС.Ссылка.Исполнитель)= тип("ДокументСсылка.НА_БюджетПроекта") Тогда
                БизнесПроцессы.НА_СогласованиеБюджетаПроекта.ТочкиМаршрута.СогласоватьГенеральныйДиректор.Исполнитель = Открытие;
            Иначе
                БизнесПроцессы.НА_СогласованиеСоглашенияНаВыполненияРабот.ТочкиМаршрута.ВыполнитьРаботы.Исполнитель = Открытие;
            КонецЕсли;
            
            Если  ТипЗнч(ТС.Ссылка)= тип("ЗадачаСсылка.НА_СогласованиеЗаказаПоставщику") Тогда
                БизнесПроцессы.НА_СогласованиеЗаказаПоставщику.ТочкиМаршрута.ДоработкаЗаказа.Исполнитель = Открытие;
            КонецЕсли;
            Если  ТипЗнч(ТС.Ссылка) = тип("ЗадачаСсылка.НА_ЗадачаСогласованияВыбораПоставщика") Тогда
                БизнесПроцессы.НА_СогласованиеВыбораПоставщика.ТочкиМаршрута.ВыборПоставщика.Исполнитель = Открытие;
            КонецЕсли;
        Иначе
            Сообщить("У Вас нет прав на перепоручение текущей задачи", СтатусСообщения.Важное);
        КонецЕсли;
    КонецЕсли;
26 Bad_Aleks
 
04.03.20
12:37
(25) Тебе нужно получить Объект(Задача твоя в которой ты хочешь поменять). Потом присвоить нового ответственного. Потом записать Объект.
ДокОбъект = Задача.ПолучитьОбъект();
ДокОбъект.Исполнитель = НовыйИсполнитель;
ДокОбъект.Записать();
Как то так...
27 FransisDrake
 
04.03.20
12:48
(26) у меня в списке выбор из трех разных задач, я поэтому сделал то, что сделал в (24)
28 catena
 
04.03.20
12:51
(27)Хоть из тридцати, все равно, чтобы что-то записать, нужно получить объект. Разницу между объектом и ссылкой понимаешь?
29 FransisDrake
 
04.03.20
12:56
(28) разницу понимаю. Но не понимаю как мне реализовать.

Если ДокОбъект = Задача1.ПолучитьОбъект() тогда
ДокОбъект.Исполнитель = НовыйИсполнитель;
ДокОбъект.Записать();
ИначеЕсли  ДокОбъект = Задача2.ПолучитьОбъект()
ДокОбъект.Исполнитель = НовыйИсполнитель;
ДокОбъект.Записать();


что-то типа такого?
30 FransisDrake
 
04.03.20
13:22
Всем Спасибо!)))