|
Рекурсивная обработка документа в зависимости от значения реквизита | ☑ | ||
---|---|---|---|---|
0
Vld
14.12.14
✎
19:31
|
В документе есть реквизит "ПредыдущийДокумент", который пуст, если он первый. Надо сделать рекурсивную функцию ОбработатьДок(), которая обработает каждый документ в цепочке до первого документа.
|
|||
1
arccos6pi
14.12.14
✎
19:32
|
(0) и в чем проблема?
|
|||
2
Vld
14.12.14
✎
19:33
|
Рекурсию не понимаю как написать
|
|||
3
Vld
14.12.14
✎
19:38
|
Функия ОбработатьДок(Документ)
Возврат Документ.Номер=НовыйНомер(); КонецФункции |
|||
4
Фокусник
14.12.14
✎
19:42
|
как-то так:
|
|||
5
Chameleon1980
14.12.14
✎
19:42
|
определяемся - с конца в начало или наоборот
в зависимости от этого в функции ОбработатьДокумент(Док) делаем либо сначала опять вызов ОбработатьДокумент(Док), а потом сама обработка документа, а если порядок с конца в начало то в процедуре сначала обрабатываем док а потом вызываем рекурсию. Что тут не ясно? |
|||
6
Chameleon1980
14.12.14
✎
19:44
|
ну и да... добавить что то типа
Если НЕ ЗначениеЗаполнено(Документ.ПредыдущийДокумент) Тогда Возврат; КонецЕсли; |
|||
7
Chameleon1980
14.12.14
✎
19:45
|
просто можно с хвоста начать, а можно доверху сначала дойти и оттуда начать
|
|||
8
Vld
14.12.14
✎
19:46
|
(5)
Надо так: в выборку попал документ за какую-то дату, и все предыдущие д.б. обработаны |
|||
9
Chameleon1980
14.12.14
✎
19:48
|
вы не поняли. можно с конца пойти. Т.е. с дока который в выборку попал. А можно сначала по этой цепочке добраться до верха и начать оттуда до этого документа.
Если взять ситуацию, например с присваивании номеров - то правильнее будет сначала подняться до первого дока и оттуда идти. |
|||
10
Chameleon1980
14.12.14
✎
19:51
|
иначе меньшие номера будут ниже.
Понимаю, что здесь скорее всего не то, но если бы ситуация была типа описанной мной, то логичнее меньшие номера присваивать более ранним докам. Дошла мысль? |
|||
11
Vld
14.12.14
✎
19:52
|
(9) А в примере (4) это с конца?
|
|||
12
Vld
14.12.14
✎
19:54
|
(10) примерно понятно, но как рекурсия поднимется до самого раннего документа?
|
|||
13
Vld
14.12.14
✎
19:57
|
Да, первым должен обрабатываться самый первый из предыдущих
|
|||
14
Chameleon1980
14.12.14
✎
19:58
|
на бумажке попробуйте нарисовать
или мы компьютерщики уже про листочки с авторучками и карандашами забыли. просто навеяло недавно посмотренной передачей. |
|||
15
Chameleon1980
14.12.14
✎
20:03
|
насколько помнится как-то так будет:
Процедура ОбработатьКонкретныйДокумент(Док) // тут что-то делаем с доком КонецПроцедуры Процедура ОбработатьРекурсивно(Док) Если Не ЗначениеЗаполнено(Док.ПредыдущийДокумент) Тогда Возврат; КонецЕсли; // это текст если сверху вниз ОбработатьРекурсивно(Док.ПредыдущийДокумент); ОбработатьКонкретныйДокумент(Док); // это если с конца ОбработатьКонкретныйДокумент(Док); ОбработатьРекурсивно(Док.ПредыдущийДокумент); КонецПроцедуры Процедура ВыполнитьОбработку() НайденныйДок=Выборка.Документ; ОбработатьРекурсивно(НайденныйДок); КонецПроцедуры |
|||
16
Chameleon1980
14.12.14
✎
20:04
|
надо пробовать - может забыл про какой нюанс
|
|||
17
Vld
14.12.14
✎
20:07
|
(15) Очень похоже на то, что нужно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |