|
v7: Почему зацикливается? | ☑ | ||
---|---|---|---|---|
0
HandMade
06.02.12
✎
12:06
|
Есть следующий код
Док = СоздатьОбъект("Документ.тб_ОснованиеРЛ"); УдалитьСтроки(); Док.ВыбратьДокументы(НачалоПериода,КонецПериода); Пока Док.ПолучитьДокумент()>0 Цикл ТекДок = Док.ТекущийДокумент(); Если ТекДок.Проект = Проект Тогда НоваяСтрока(); НомерДокумента = ТекДок.НомерДок; НаименованиеОрг = ТекДок.Контрагент; ТекДок.ДокумОснование.ВыбратьСтроки(); Пока ТекДок.ДокумОснование.ПолучитьСтроку()>0 Цикл Если ТекДок.ДокумОснование.Номенклатура.Свойство2 = Перечисление.тбит_ВидыСвойствНоменклатуры.Автоуслуги Тогда А = А + ТекДок.ДокумОснование.Сумма; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; в этом месте Пока ТекДок.ДокумОснование.ПолучитьСтроку()>0 Цикл Если ТекДок.ДокумОснование.Номенклатура.Свойство2 = Перечисление.тбит_ВидыСвойствНоменклатуры.Автоуслуги Тогда А = А + ТекДок.ДокумОснование.Сумма; КонецЕсли; КонецЦикла; Идет зацикливание. Хотя в документе одна строка.В отладчике получаю следующее: ТекДок.ДокумОснование.количествострок() = 1 ТекДок.ДокумОснование.ПолучитьСтроку() = 1 ТекДок.ДокумОснование = Реализация СТ00000005 (24.01.12) В чем может быть ошибка? |
|||
1
aleks-id
06.02.12
✎
12:08
|
потому что не переходишь на следующий элемент.
|
|||
2
HandMade
06.02.12
✎
12:09
|
Разве цикл не предусматривает переход?
|
|||
3
HandMade
06.02.12
✎
12:09
|
как перейти?
|
|||
4
Vakhrin
06.02.12
✎
12:11
|
(1) ???
(0) сделай черным запросом - красивее, быстрее... без глюков со сбоем выборок ) |
|||
5
ale-sarin
06.02.12
✎
12:11
|
Может "ДокумОснование" в отдельную переменную выделить?
Вдруг поможет? |
|||
6
1Сергей
06.02.12
✎
12:12
|
ВыбратьСтроки через две точки не очень красиво, имхо
|
|||
7
МастерВопросов
06.02.12
✎
12:12
|
а у тебя точно ТекДок.ДокумОснование<>ТекДок ??
|
|||
8
Vakhrin
06.02.12
✎
12:12
|
(5) +
|
|||
9
МастерВопросов
06.02.12
✎
12:12
|
(5)+1
|
|||
10
HandMade
06.02.12
✎
12:14
|
ДокументОснование = СоздатьОбъект("Реализация");
ДокументОснование = ТекДок.ДокумОснование; так? |
|||
11
Godofsin
06.02.12
✎
12:15
|
ДокОс = ТекДок.ДокумОснование;
|
|||
12
1Сергей
06.02.12
✎
12:15
|
(10)
ДокОсн = ТекДок.ДокумОснование; ДокОсн.ВыбратьСтроки(); Пока ДокОсн.ПолучитьСтроку()>0 Цикл Если ДокОсн.Номенклатура.Свойство2 = Перечисление.тбит_ВидыСвойствНоменклатуры.Автоуслуги Тогда А = А + ДокОсн.Сумма; КонецЕсли; КонецЦикла; |
|||
13
Simod
06.02.12
✎
12:16
|
Выборка строк из документа-основания без проверки наличия документа-основания может привести к падению с ошибкой. А то, что обращение идет через две точки - не влияет.
Уверен, что есть зацикливание? |
|||
14
HandMade
06.02.12
✎
12:16
|
да
, в документе одна строка, а он идет по циклу, получает эту одну строку и дальше в цикл |
|||
15
Simod
06.02.12
✎
12:20
|
(14) В отладчике проверял?
|
|||
16
HandMade
06.02.12
✎
12:21
|
да
|
|||
17
Godofsin
06.02.12
✎
12:21
|
пробуй (12)
|
|||
18
Simod
06.02.12
✎
12:22
|
(16) А у документов из переменной "Док" не одно и тоже основание?
|
|||
19
МастерВопросов
06.02.12
✎
12:25
|
(13) попробовал такой код - исправду зацикливает:
//******************************************* Процедура Сформировать() НачалоПериода=Дата("01.01.2012"); КонецПериода=Дата("02.01.2012"); Док = СоздатьОбъект("Документ.Реализация"); Док.ВыбратьДокументы(НачалоПериода,КонецПериода); Пока Док.ПолучитьДокумент()>0 Цикл Сообщить("*********"+СокрЛ(Док.ТекущийДокумент())+"*********"); Если ПустоеЗначение(Док.ДокОснование)=0 Тогда ТекДок = Док.ТекущийДокумент(); ТекДок.ДокОснование.ВыбратьСтроки(); Пока ТекДок.ДокОснование.ПолучитьСтроку()>0 Цикл Сообщить("--"+СокрЛ(ТекДок.ДокОснование.Номенклатура)); КонецЦикла; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
20
МастерВопросов
06.02.12
✎
12:26
|
+(19) а такой работает на Ура:
//******************************************* Процедура Сформировать() НачалоПериода=Дата("01.01.2012"); КонецПериода=Дата("02.01.2012"); Док = СоздатьОбъект("Документ.Реализация"); Док.ВыбратьДокументы(НачалоПериода,КонецПериода); Пока Док.ПолучитьДокумент()>0 Цикл Сообщить("*********"+СокрЛ(Док.ТекущийДокумент())+"*********"); Если ПустоеЗначение(Док.ДокОснование)=0 Тогда ТекДок = Док.ДокОснование; ТекДок.ВыбратьСтроки(); Пока ТекДок.ПолучитьСтроку()>0 Цикл Сообщить("--"+СокрЛ(ТекДок.Номенклатура)); КонецЦикла; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
21
1Сергей
06.02.12
✎
12:26
|
(20) ч.т.д.
|
|||
22
МастерВопросов
06.02.12
✎
12:27
|
(21) разница в "ТекДок = Док.ДокОснование;", см.(5)
|
|||
23
HandMade
06.02.12
✎
12:29
|
помогло через переменную
|
|||
24
HandMade
06.02.12
✎
12:32
|
спасибо за помощь!
|
|||
25
1Сергей
06.02.12
✎
14:10
|
(22) чтд = что и требовалось доказать. см (6), (12)
|
|||
26
МастерВопросов
07.02.12
✎
08:43
|
(25) чтд = что я делаю не так?
я расшифровал именно так |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |