![]() |
|
Зацикливается функция | ☑ | ||
---|---|---|---|---|
0
yavasya
29.09.14
✎
13:38
|
Функция ПолучитьРодительскиеДокументы(ДокументСсылка, СписокСвязанныхДокументов = Неопределено, мУжеВСписке = Неопределено) Экспорт
Если СписокСвязанныхДокументов = Неопределено Тогда СписокСвязанныхДокументов = Новый СписокЗначений; КонецЕсли; Если мУжеВСписке = Неопределено Тогда мУжеВСписке = Новый Соответствие; КонецЕсли; МетаданныеДокумента = ДокументСсылка.Метаданные(); СписокРеквизитов = Новый СписокЗначений; Для Каждого Реквизит ИЗ МетаданныеДокумента.Реквизиты Цикл ТипыРеквизита = Реквизит.Тип.Типы(); Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип); Если МетаданныеРеквизита<>Неопределено И Метаданные.Документы.Содержит(МетаданныеРеквизита) И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда Попытка ЗначениеРеквизита = ДокументСсылка[Реквизит.Имя]; Исключение Прервать; КонецПопытки; ЕСли ЗначениеРеквизита<>Неопределено И НЕ ЗначениеРеквизита.Пустая() И ТипЗнч(ЗначениеРеквизита) = ТекущийТип И мУжеВСписке[ЗначениеРеквизита] = Неопределено И СписокРеквизитов.НайтиПоЗначению(ДокументСсылка[Реквизит.Имя]) = Неопределено Тогда Попытка СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата,"ДФ=yyyyMMddЧЧММсс")); Исключение ОтладкаТекстОшибки = ОписаниеОшибки(); КонецПопытки; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Для Каждого ТЧ Из МетаданныеДокумента.ТабличныеЧасти Цикл СтрРеквизитов = ""; Попытка СодержимоеТЧ = ДокументСсылка[ТЧ.Имя].Выгрузить(); Исключение Прервать; КонецПопытки; Для Каждого Реквизит ИЗ ТЧ.Реквизиты Цикл ТипыРеквизита = Реквизит.Тип.Типы(); Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип); Если МетаданныеРеквизита<>Неопределено И Метаданные.Документы.Содержит(МетаданныеРеквизита) И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда СтрРеквизитов = СтрРеквизитов + ?(СтрРеквизитов = "", "", ", ") + Реквизит.Имя; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; СодержимоеТЧ.Свернуть(СтрРеквизитов); Для Каждого КолонкаТЧ ИЗ СодержимоеТЧ.Колонки Цикл Для Каждого СтрокаТЧ ИЗ СодержимоеТЧ Цикл Попытка ЗначениеРеквизита = СтрокаТЧ[КолонкаТЧ.Имя]; Исключение Продолжить; КонецПопытки; МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(ЗначениеРеквизита)); Если МетаданныеЗначения = Неопределено Тогда // базовый тип Продолжить; КонецЕсли; ЕСли ЗначениеРеквизита<>Неопределено И НЕ ЗначениеРеквизита.Пустая() И Метаданные.Документы.Содержит(МетаданныеЗначения) И мУжеВСписке[ЗначениеРеквизита] = Неопределено Тогда Если СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) = Неопределено Тогда Попытка СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата,"ДФ=yyyyMMddЧЧММсс")); Исключение ОтладкаТекстОшибки = ОписаниеОшибки(); КонецПопытки; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; мУжеВСписке.Вставить(ДокументСсылка, Истина); Для Каждого СтрСЗ Из СписокРеквизитов Цикл СписокСвязанныхДокументов = ПолучитьРодительскиеДокументы(СтрСЗ.Значение, СписокСвязанныхДокументов, мУжеВСписке); КонецЦикла; Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка | ИЗ Документ."+МетаданныеДокумента.Имя + " ГДЕ Ссылка = &Ссылка"); Запрос.УстановитьПараметр("Ссылка", ДокументСсылка); Выборка = Запрос.Выполнить().Выбрать(); ЕСли Выборка.Следующий() Тогда СписокСвязанныхДокументов.Добавить(Выборка.Ссылка); Иначе СписокСвязанныхДокументов.Добавить(ДокументСсылка); КонецЕсли; Возврат СписокСвязанныхДокументов; КонецФункции |
|||
1
yavasya
29.09.14
✎
13:38
|
||||
2
ssh2QQ6
29.09.14
✎
13:40
|
Продолжайте наблюдения...
|
|||
3
yavasya
29.09.14
✎
13:40
|
если не находит родительские документы зацикливается пока все метаданные не переберет. Зацикливается всё на тип "строка" и не выходит из цикла, потому что она повторяется постоянно
|
|||
4
yavasya
29.09.14
✎
13:51
|
если счетчик <30 тогда продолжить, иначе возврат
|
|||
5
Лодырь
29.09.14
✎
13:52
|
тихо, сам с собою, я веду беседу..
|
|||
6
yavasya
29.09.14
✎
13:53
|
Для Счетчик = 1 По 5 Цикл
Если Счетчик > 2 Тогда Прервать; КонецЕсли; Сообщить(Счетчик); // 1 2 КонецЦикла; |
|||
7
yavasya
29.09.14
✎
13:53
|
ну может подскажешь как родительские документы получить?
|
|||
8
yavasya
29.09.14
✎
13:57
|
другой функцией
|
|||
9
yavasya
29.09.14
✎
13:57
|
запросом может ?
|
|||
10
France
29.09.14
✎
14:02
|
критерии отбора в помощь отцу русской демократии..
|
|||
11
yavasya
29.09.14
✎
14:03
|
подробнее
|
|||
12
yavasya
29.09.14
✎
14:09
|
(6) взлетело. блин корявый код. как правильно написать?
|
|||
13
lodger
29.09.14
✎
14:13
|
(11) Глобальный контекст (Global context)
КритерииОтбора (FilterCriteria) Использование: Только чтение. Описание: Тип: КритерииОтбораМенеджер. Используется для доступа к определенным в конфигурации критериям отбора. Доступность: Сервер, толстый клиент, внешнее соединение. См. также: КритерииОтбораМенеджер (12) переписать с нуля через критерии отбора. |
|||
14
yavasya
29.09.14
✎
14:14
|
блин, непонятно
|
|||
15
yavasya
29.09.14
✎
14:15
|
(13) вашу аську можно?
|
|||
16
yavasya
29.09.14
✎
14:16
|
запрос по критериям отбора из структуры починенности это имеете ввиду?
|
|||
17
hhhh
29.09.14
✎
14:30
|
По идее и должно зацикливать. Всё правильно работает.
Например реализация ссылается на счет-фактуру, а счет-фактура ссылается на реализацию. У вас получается у реализации родитель счет-фактура, а у счет-фактуры родитель реализация. Ну и программа входит в бесконечный цикл. |
|||
18
yavasya
29.09.14
✎
14:55
|
я это понимаю, как по другому сделать?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |