|
v7: Удаление строк ТЧ документа! | ☑ | ||
---|---|---|---|---|
0
Aleksei_Pro
21.01.12
✎
18:12
|
Ребят , подскажите, если почему цикл по строкам не переберает все строки..( т.е 3 строки переберет , а остальные не перебирает и вылетает из цикла..)
док = СоздатьОбъект("Документ.Соглашение"); док.ВыбратьДокументы(НачДата,КонДата); ТЗ = СоздатьОбъект("ТаблицаЗначений"); Пока док.ПолучитьДокумент() = 1 Цикл Если Док.ПометкаУдаления() = 1 Тогда Продолжить; КонецЕсли; Док.ВыгрузитьТабличнуюЧасть(ТЗ); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если (ДатаГод(ТЗ.ДКон)<=ДатаГод(ТекущаяДата())) Тогда ТЗ.УдалитьСтроку(); КонецЕсли; КонецЦикла; Док.ЗагрузитьТабличнуюЧасть(ТЗ); Док.Записать(); Док.Провести(); Сообщить("Проведен документ " + Док); КонецЦикла; |
|||
1
Рэйв
21.01.12
✎
18:13
|
Учись удалять строку в выборке.
В поиск. |
|||
2
Aleksei_Pro
21.01.12
✎
18:14
|
(1) что в поиск, удаляется текущая строка ТЗ.
|
|||
3
Rie
21.01.12
✎
18:14
|
(0) Потому что удалением строк ты ему думать мешаешь.
Удаляй строки с конца. Или по списку. |
|||
4
Rie
21.01.12
✎
18:14
|
(2) Угу. А выборке об этом кто-нибудь сказал? В поиск - за решением, это такой баянище...
|
|||
5
Фокусник
21.01.12
✎
18:15
|
(0) выборка сбивается. Делай перебор с конца.
|
|||
6
Aleksei_Pro
21.01.12
✎
18:17
|
Даже так пробовал, не катит:
док = СоздатьОбъект("Документ.Соглашение"); док.ВыбратьДокументы(НачДата,КонДата); Пока док.ПолучитьДокумент() = 1 Цикл Если Док.ПометкаУдаления() = 1 Тогда Продолжить; КонецЕсли; Док.ВыбратьСтроки(); Док.ОбратныйПорядок(1); Пока Док.ПолучитьСтроку() = 1 Цикл Если (ДатаГод(Док.ДКон)<=ДатаГод(ТекущаяДата())) Тогда Док.УдалитьСтроку(); КонецЕсли; КонецЦикла; Док.Записать(); Док.Провести(); Сообщить("Проведен документ " + Док); КонецЦикла; |
|||
7
Фокусник
21.01.12
✎
18:19
|
(6) обратный порядок - это для выборки документов. Сделай в коде в (0) перебор строк ТЗ с конца
|
|||
8
Рэйв
21.01.12
✎
18:19
|
о сколько нам открытий чудных готовит просвященбя дух!:-)
(С)А.С.Пушкин |
|||
9
Rie
21.01.12
✎
18:20
|
(6) Разумеется, если не читать документацию - то бред и получится.
ОбратныйПорядок для совсем другого - для выборки _документов_, а НЕ строк табличной части документа. Hint: ПолучитьСтрокуПоНомеру и цикл по номерам строк - от конца к началу. |
|||
10
Aleksei_Pro
21.01.12
✎
18:25
|
(7) один документ за период, зачем обрабный порядок, так тоже не взлетает:
док = СоздатьОбъект("Документ.Соглашение"); док.ВыбратьДокументы(НачДата,КонДата); Док.ОбратныйПорядок(0); Пока док.ПолучитьДокумент() = 1 Цикл Если Док.ПометкаУдаления() = 1 Тогда Продолжить; КонецЕсли; Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку() = 1 Цикл Если (ДатаГод(Док.ДКон)<=ДатаГод(ТекущаяДата())) Тогда Док.УдалитьСтроку(); КонецЕсли; КонецЦикла; Док.Записать(); Док.Провести(); Сообщить("Проведен документ " + Док); КонецЦикла; |
|||
11
Rie
21.01.12
✎
18:27
|
(10) Перечитай Hint в (9). Ну а на досуге - документацию.
|
|||
12
Фокусник
21.01.12
✎
18:30
|
(10) Если не хочешь ТЗ в с конца перебирать, поставь после Док.УдалитьСтроку()
Док.ВыбратьСтроки(); |
|||
13
Рэйв
21.01.12
✎
18:34
|
+(8)...И опыт, сын ошибок трудных,
И гений -парадоксов другю |
|||
14
Рэйв
21.01.12
✎
18:35
|
*друг.
:-) |
|||
15
Эльниньо
21.01.12
✎
18:37
|
док = СоздатьОбъект("Документ.Соглашение");
док.ВыбратьДокументы(НачДата,КонДата); ТЗ = СоздатьОбъект("ТаблицаЗначений"); Пока док.ПолучитьДокумент() = 1 Цикл Если Док.ПометкаУдаления() = 1 Тогда Продолжить; КонецЕсли; Док.ВыгрузитьТабличнуюЧасть(ТЗ); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл //обрати внимание Пока (ТЗ.НомерСтроки > 0) И (ДатаГод(ТЗ.ДКон)<=ДатаГод(ТекущаяДата())) Цикл ТЗ.УдалитьСтроку(); КонецЦикла; КонецЦикла; Док.ЗагрузитьТабличнуюЧасть(ТЗ); Док.Записать(); Док.Провести(); Сообщить("Проведен документ " + Док); КонецЦикла; |
|||
16
DES
21.01.12
✎
18:56
|
(0) Смотри.
Ты удаляешь пусть 3-ю строку. удалил. 4-я стала третьей. счетчик строк увеличивается на 1 ты уже проверяешь 4 строку, а это бывшая 5-я, а 4-я, ставшая 3-й, проскочила без фейсконтроля. |
|||
17
Bww_
21.01.12
✎
19:01
|
Ты попробуй обрубить себе второе яйцо два раза и все будет ясно.
|
|||
18
Bww_
21.01.12
✎
19:02
|
Из цикла точно вылетишь.
|
|||
19
Рэйв
21.01.12
✎
19:03
|
(17)нормальный програмер поймет , что только второе нельзя:-)
Ты наверное бухгалтер,нет?:-) |
|||
20
Рэйв
21.01.12
✎
19:04
|
9..а с первым все будет в порядке:-))
|
|||
21
Bww_
21.01.12
✎
19:19
|
(19) не понял
|
|||
22
Рэйв
21.01.12
✎
19:24
|
(21)Я так и умал:-)..Ладно проехали.
|
|||
23
Bww_
21.01.12
✎
19:40
|
Вот текст писанный мной в 199х году
R# = RECORDS(DIRTBL) LOOP R# > 0 GET(DIRTBL,R#) ! GET ENTRY FROM TABLE IF TBL:PORS DELETE(DIRTBL) ! DELETE TABLE ENTRY R# -= 1 ! INCREMENT POSITION . . Это в тему о втором яйце... Язык узнаешь? |
|||
24
Bww_
21.01.12
✎
19:41
|
...а лажу видишь?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |