Прошу помощи в коде.

1. user1136603 27.03.19 15:19 Сейчас в теме
Имеется функция, которая после записи создает задание.
НовоеПоручение.Исполнитель = пользователь, который находится в табличной части.( в коде он подставляет конкретного пользователя т.е. первого по списку из ТЧ)
в этой табличной части может быть разное количество пользователей.
В табличной части есть еще реквизиты типа булево.
Так вот надо, если пользователь поставил истина то Исполнитель поставляется след. пользователь в этой табличной части. Если пользователь поставил отказ, то подставляется в Исполнителя предыдущий пользователь.
Подскажите как это можно реализовать?
Прикрепленные файлы:
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
11. arsen_botashev 27.03.19 16:16 Сейчас в теме
(1)А можете скинуть код текстом? а то тут только скрин
+
2. azanas 27.03.19 15:28 Сейчас в теме
Не совсем понятны условия, скрин заполненной ТЧ можно?
+
3. user1136603 27.03.19 15:34 Сейчас в теме
(2)
Прикрепленные файлы:
+
4. azanas 27.03.19 15:50 Сейчас в теме
если у Админа одобрено,тогда исполнитель следующий?а если у следующего отказ стоит тогда исполнитель Админ?
+
5. user1136603 27.03.19 15:53 Сейчас в теме
7. azanas 27.03.19 16:01 Сейчас в теме
(5)
Исполнитель = Неопределено;
Для каждого стр из Объект.СписокСогласующих Цикл
       Если стр.Одобрено и не стр.Отказ Тогда
               Исполнитель = стр.Исполнитель;
               Продолжить();
       Иначе
               Прервать();
       КонецЕсли;
КонецЦикла;
Показать


Что то типа этого,но как по мне реквизит "Отказ" лишний,по сути "Одобрено" уже несет в себе отказ в случае если галочки нет.
+
8. user1136603 27.03.19 16:06 Сейчас в теме
(7)Он нужен что бы пользователи наглядно видели , одобрено или отказано.
+
9. azanas 27.03.19 16:09 Сейчас в теме
(8)Тогда лучше сделай перечисление или список значении(одобрено/отказано),так будет правильней имхо
+
10. azanas 27.03.19 16:13 Сейчас в теме
(8) а если оставишь как есть,добавь ПриИзменении этих реквизитов чтобы при изменении одного реквизита,другое менялось на противоположное значение.
+
13. user1136603 27.03.19 16:21 Сейчас в теме
(7)Я щас твой вопрос перепрочтел, и не правильно тебе ответил на него.
Крч 1 - админ по списку 2 - репорт.
Если если пользователь админ отправляет задание и у него одобрено = истина, тогда в исполнитель ставится пользователь репорт ( т.е. если у 1 одобрено =истина, исполнитель = 2).
Если репорт поставил отказ, то исполнитель ставится 1 "Админ".
ну проще если объяснить, то истина то на шаг вперед, ложь на шаг назад.
+
14. azanas 27.03.19 16:25 Сейчас в теме
(13) Тогда (7) должно сработать(но все равно 2 булево которые несут одинаковую смысловую нагрузку лишние,достаточно 1го)
+
6. user1136603 27.03.19 15:54 Сейчас в теме
(4)Но может быть кто либо другой вместо админа, и пользователей может быть не 2, а 5
+
12. VictorRGB2 13 27.03.19 16:18 Сейчас в теме
(6)
Для лИндекс = 0 По Объект.СписокСогласующих.Количество()-1 Цикл
ИсполнительТекущий = Объект.СписокСогласующих[лИндекс].Исполнитель;
Отказ = Ложь;
Если Объект.СписокСогласующих[лИндекс].Одобрено Тогда
ИсполнительСледующий = Объект.СписокСогласующих[?(лИндекс+1 = Объект.СписокСогласующих.Количество()-1, лИндекс, лИндекс+1)].Исполнитель;
Отказ = Объект.СписокСогласующих[?(лИндекс+1 = Объект.СписокСогласующих.Количество()-1, лИндекс, лИндекс+1)].Отказ;
КонецЕсли;

Если Отказ Тогда
Исполнитель = ИсполнительТекущий;
Иначе
Исполнитель = ИсполнительСледующий;
КонецЕсли;

// еще требуется обработка или условие прерывания цикла
КонецЦикла;

Показать
user1136603; +1
15. user1136603 28.03.19 12:33 Сейчас в теме
(12)А что означает
Отказ = Объект.СписокСогласующих[?(лИндекс+1 = Объект.СписокСогласующих.Количество()-1, лИндекс, лИндекс+1)].Отказ;
И что за переменная отказ?
+
16. VictorRGB2 13 28.03.19 13:18 Сейчас в теме
(15) вам же нужно сравнить два значения, Одобрено и Отказ
переменная введена как раз для этого
перед сравнением установили в Ложь и получили значение для сравнения из строки следующего исполнителя
дальше сравниваем уже переменную с Истина и выполняем нужные действия

как-то так...
+
17. user1136603 28.03.19 13:42 Сейчас в теме
(16)
Прикрепленные файлы:
+
18. VictorRGB2 13 28.03.19 13:44 Сейчас в теме
(17) обзовите Отказ по другому, ОтказЛок или еще как и не будет конфликта
+
19. user1136603 28.03.19 13:46 Сейчас в теме
(18) ОтказЛок = Объект и т.д
И где Если ОтказЛок Тогда?
+
20. VictorRGB2 13 28.03.19 14:04 Сейчас в теме
21. user1136603 28.03.19 14:06 Сейчас в теме
(20)Поменял, ошибка не изменилась
+
22. VictorRGB2 13 28.03.19 14:08 Сейчас в теме
(21) меняли же в расширении? перезапускали сеанс после изменений? посмотрите в отладчике что со значением переменной
+
23. user1136603 28.03.19 14:09 Сейчас в теме
(22)Конечно, щас для перестраховки еще раз перезапущу.
+
24. user1136603 28.03.19 14:15 Сейчас в теме
(22)Ошибка осталась
+
25. VictorRGB2 13 28.03.19 14:40 Сейчас в теме
(24) ну только отладчиком смотреть, в чем дело и что там переменной присваивается за значение
есть подозрение,что в таблице поле Отказ не булево
+
26. VictorRGB2 13 28.03.19 14:43 Сейчас в теме
(24) ну конечно же ))

посмотрите внимательно на код
ИсполнительСледующий и Отказ у вас присваиваются обеим переменным Согласущий
+
27. user1136603 28.03.19 15:52 Сейчас в теме
(26)Я сделал чуть попроще.
Циклом прохожу таб.часть и проверяю на одобрено.
Если одобрено = ложь, то этого пользователя у кого стоит ложь и подставляю в исполнителя.
соответственно после того как он первого нашел у кого Одобрено = Ложь;
Прервать;
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот