Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Замена пользователя

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


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

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

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

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

Старый = ЭлементыФормы.Список.ТекущаяСтрока.Ссылка.Исполнитель;// это текущий исполнитель 

        НовыйИсполнитель = Исполнитель;// в новыйисполнитель я хочу записать новое значение

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

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

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


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

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

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

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


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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.