|
|
|
Почему функция возвращает значение типа НЕОПРЕДЕЛЕНО? Ø |
☑ | ||
|---|---|---|---|---|
|
0
Финляндин
08.11.06
✎
16:55
|
Пытаюсь вернуть из функции значение типа ТаблизаЗначений, а после вызова значение имеет тип НЕОПРЕДЕЛЕНО.
|
|||
|
1
ХочуСпросить
08.11.06
✎
16:56
|
Продолжай.
|
|||
|
2
roma n
08.11.06
✎
17:01
|
Никогда и никому не показывай код! Даже если он не работает... Это интелектуальная собственность!
|
|||
|
3
VZ
08.11.06
✎
17:03
|
Вот они, плоды "Доступно и всерьез". (...цы(с)pit)
(0) Азами бы занялся, чтоль... Поучил Васик, почитал книжку по Ассу, как организуется возврат значений... |
|||
|
4
Финляндин
08.11.06
✎
17:30
|
Это код.
----------------------------------------------- Функция РазобратьНаПараметры(СтрПоиска,тбТеги,тбДанные = 0) Перем СтрТЗ; Если тбДанные = 0 тогда тбДанные = НОВЫЙ ТаблицаЗначений; Для каждого СтрТЗ из тбТеги цикл тбДанные.Колонки.Добавить(СтрТЗ[0], НОВЫЙ ОписаниеТипов("Строка")); КонецЦикла; КонецЕсли; нСтр = тбДанные.Добавить(); Для каждого СтрТЗ из тбТеги цикл Сообщить(СтрТЗ[0]); ПозНач = ?(СтрДлина(СтрТЗ.ТегНачала) = 0, 1, Найти(СтрПоиска,СтрТЗ.ТегНачала)); ПозКон = Найти(СтрПоиска,СтрТЗ.ТегКонца); ДлнНач = СтрДлина(СтрТЗ.ТегНачала); ДлнКон = СтрДлина(СтрТЗ.ТегКонца); Если ПозНач + ПозКон = 0 Тогда Возврат тбДанные; КонецЕсли; стрТекст_ = Сред(СтрПоиска,ПозНач + ДлнНач, ПозКон - ПозНач - ДлнНач); нСтр[тбТеги.Индекс(СтрТЗ)] = стрТекст_; стрТекст_ = прав(СтрПоиска,СтрДлина(СтрПоиска) - ПозКон - ДлнКон); СтрПоиска = стрТекст_; КонецЦикла; РазобратьНаПараметры(стрТекст_,тбТеги,тбДанные); КонецФункции //==================================================== Функция РазобратьТекстПоШаблону(Канал,Знач стрТекст ) Экспорт *********** Вернуть = РазобратьНаПараметры(стрТекст,тбПравилаРазбора); <--- Возвращает пустое значение. Возврат Вернуть; КонецЕсли; *************** КонецФункции |
|||
|
5
android
08.11.06
✎
17:34
|
Давайте пока помолчим. Может, догадается?
|
|||
|
6
Defender aka LINN
08.11.06
✎
17:36
|
(4) Ужоснах... Ладно, фиг с ними, с переменными непонятными. Я что-то вижу в этой мегафункции только один "Возврат", и тот в фиг знает где и в условии, которое вовсе не факт, что выполняется.
А вот это: "РазобратьНаПараметры(стрТекст_,тбТеги,тбДанные);" вообще шедевр. Так что (3)+1 |
|||
|
7
Финляндин
08.11.06
✎
17:36
|
(5) не догадаюсь. Я тупой.
|
|||
|
8
Lew50
08.11.06
✎
17:36
|
(4) 1): Строку <<тбДанные = НОВЫЙ ТаблицаЗначений;>> помести перед <<Если>>.
2) Перед КонецФункции введи строку: Возврат тбДанные |
|||
|
9
VZ
08.11.06
✎
17:37
|
Вот этот кусочек
РазобратьНаПараметры(стрТекст_,тбТеги,тбДанные); КонецФункции что вернет, а? А если не вернет, зачем написал? И если заключил Возврат в конструкцию "Если", то будь любезен, проследи, чтоб что-то верталось, если этого самого "Если" не случиться... Кодер... :/ |
|||
|
10
Финляндин
08.11.06
✎
17:39
|
Возврат тбДанные<----------------- выполняется.
В момент возврата тбДанные имеет тип "ТаблицаЗначений" и содержит данные. |
|||
|
11
Lew50
08.11.06
✎
17:44
|
(10) Значит выполняется через пень колоду. Достаточно одного раза проскочить мимо Если, --------------------> ничего не вернет, получишь НЕОПРЕДЕЛЕННО
|
|||
|
12
android
08.11.06
✎
17:48
|
(10) Тогда нафига конструкция
РазобратьНаПараметры(стрТекст_,тбТеги,тбДанные); ПОСЛЕ цикла, если ты говоришь, что всегда срабатывает Возврат тбДанные; который находится ВНУТРИ цикла? |
|||
|
13
Финляндин
08.11.06
✎
18:24
|
Объясните, пожалуйста природу следующего:
Сделал согласно 8 - 2) (спасибо). Все работает. Убираю ------------------------- Если ПозНач + ПозКон = 0 Тогда Возврат тбДанные; КонецЕсли; ------------------------- и получаю бесконечный цикл. Вопрос - зачем указывать "возврат" 2 раза? В 7.7 работает и без второго возврата. |
|||
|
14
Финляндин
08.11.06
✎
18:32
|
Блин понял - это рекурсия. Спасибо.
|
|||
|
15
Железяка
08.11.06
✎
18:33
|
(6)Defender aka LINN, мат и его эквиваленты запрещены на форуме. Еще повторится, будет бан.
|
|||
|
16
101
08.11.06
✎
19:04
|
программа 'такси' - я в шоке
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |