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

Сравнение строк в ТЧ

Автор Nosferatu112, 24 ноя 2023, 14:40

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

Nosferatu112

Всем привет такой вопрос, есть ТЧ в ней колонка Выполнить после идея в том что бы по кнопке запустить процесс создавались задачи по строкам в которых эта колонка пустая а там где стоит цифра(Это номер строки) задача должна создаваться после выполнения задачи в строке номер которой указан в колонке выполнить после. статус задачи подътягиваться автоматом при смене статуса в задаче, вопрос такой как правильно пройтись по строкам и проверить(на примере скриншота) в строке 2 стоит выполнить после строки 1
Если статус задачи в строке 1 решено создать задачу по второй строке
Screenshot_2.png

Nosferatu112

Поправка, код находиться в процедуре приизмененииСтатуса в Форме задачи там я получаю форму этого документа устанавливаю в документе статус который был выбран в задаче и там же я хочу пройтись после этого по ТЧ документа и увидеть нужно ли после этого создавать какую то задачу
Код в форме задачи
&НаСервере
Функция СтатусПриИзмененииНаСервере()
СтатусРешено = Перечисления.ААШ_СтатусСобытия.Решено;
Возврат СтатусРешено;
КонецФункции

&НаКлиенте
Процедура СтатусПриИзменении()
СтатусРешено = СтатусПриИзмененииНаСервере();
Если Объект.ок_НаОснованииПроцесса = Истина Тогда
Ключ = Новый Структура("Ключ", Объект.ок_ПроцессЧекЛиста);
Форма = ПолучитьФорму("Документ.ок_ПроцессЧекЛиста.Форма.ФормаДокумента",Ключ);
Для Каждого С Из Форма.Объект.ТабЧасть Цикл
ПоискДокумента = Объект.Статус;
        Если НЕ ПоискДокумента.Пустая() Тогда
С.СтатусЗадачи = ПоискДокумента;
КонецЕсли;
Если Объект.Статус = СтатусРешено Тогда

КонецЕсли;
КонецЦикла;
Форма.Записать();
КонецЕсли;
КонецПроцедуры

LexaK

Nosferatu112, а как вы будете обходить зацикливание?

стр 1 выполнить после 2
стр 2 выполнить после 1

может просто назначить задачам приоритет, отсортировать по возрастанию
и в цикле за один проход выполнить?
если помогло нажмите: Спасибо!

Nosferatu112

LexaK, Ну пару раз перезапустят 1с после попадания в бесконечный цикл и перестанут бред в колонку выставлять
Выполнить после - возможность указать № строки, после реализации которой запуститься данная задача, вот так звучит условие в задаче моя задача его выполнить а если они будут какую то хрень ставить это уже их проблема.
С сортировкой проблема в том что в доке может быть 30 строк в которых задачи для 5 разных людей которые должны будут запускаться последовательно по исполнителю если бы задачи былидля одного человека их бы можно было запускать по порядку по мере выполнения

LexaK

Nosferatu112, у меня такой цикл обхода получился
(это все схематически, надо заменить на свои имена реквизиты)
Для Каждого лкСтр Из Объект.ТабЧасть Цикл //именно таб.часть обходим
Если лкСтр.Статус <> СтатусРешено Тогда
//задача еще не решена
Если лкСтр.ВыполнитьПосле = 0 Тогда
//нет увловия после, здесь выполняем задачу
//... код выполнения
Продолжить;
КонецЕсли;     

лкТек = лкСтр;//строка с текущей задачей
Пока лкТек.ВыполнитьПосле > 0 Цикл
лкСлед = Объект.ТабЧасть[лкТек.ВыполнитьПосле - 1];//переходим на задачу с номером
Если лкСлед.Статус = СтатусРешено Тогда
Прервать; //задача выполнена, делаем текущую
КонецЕсли;
лкТек = лкСлед;//текущая задача
КонецЦикла;
//задача после уже решена, или нашли без после, здесь выполняем задачу
//... код выполнения
Продолжить;
КонецЕсли;
        КонецЦикла;
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск