Имя: Пароль:
1C
 
Почему функция возвращает значение типа НЕОПРЕДЕЛЕНО?
Ø
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
программа 'такси' - я в шоке
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой