Имя: Пароль:
1C
1C 7.7
v7: оператор "если ..тогда.." ошибка в выражении
0 Soul771
 
20.07.15
19:01
Добрый день..
Че-то я сегодня вообще не дружу с 7.7...
2 строчки кода:

уровень = 5;
Для инд1 = -КолВоСтрок По -1 Цикл
если (ТЗ.ПолучитьЗначение(-инд1,"Уровень")=уровень) и (ТЗ.ПолучитьЗначение(-инд1,"Конец")=0) Тогда
//дальше еще кусок кода, что делать тогда
КонецЕсли;               
КонецЦикла;

лезу отладчиком, смотрю:
ТЗ.ПолучитьЗначение(-инд1,"Уровень")=4
уровень = 5
ТЗ.ПолучитьЗначение(-инд1,"Уровень")=уровень = Ошибка в выражении!

Что за фигня??... я в шоке... 2 числа вроде сравниваю, неужто таки нельзя??
1 HawkEye
 
20.07.15
19:04
(0) в отладчике нельзя
а зачем столько минусов?
2 Garykom
 
гуру
20.07.15
19:05
(0) классный пример "женской" логики в программировании... я бы низачто не догадался сделать вместо цикла с 1 по КолСтрок (и потом для нужного номера строки делать КолСтрок-НумСтрокиОбратный)

сделать циклу с -КолСтрок по -1
3 Soul771
 
20.07.15
19:06
(1) - млин, а как тогда понять, почему он в "если" не заходит вообще?.. (должен бы...)
минусы - иду с конца таблицы значений...
4 Провинциальный 1сник
 
20.07.15
19:06
Булевского типа в семерке внезапно нет
5 Soul771
 
20.07.15
19:07
(2) - ну вроде и с "женской" логикой должно работать, разве нет?..
6 Soul771
 
20.07.15
19:08
(4) - каак неееет?.... елы палы......
спасибо!
7 HawkEye
 
20.07.15
19:10
(3) ну во первых ТЗ можно отсортировать...

во вторых
КолСтрокТЗ = ТЗ.КоличествоСтрок();
для к = 1 по КолСтрокТЗ цикл
текСТр = КолСтрокТЗ - к + 1;
...

ну и т.д.
8 Soul771
 
20.07.15
19:13
(7) - спасибо!
9 HawkEye
 
20.07.15
19:15
(8) в условие не заходит, потому что не выполняются заданные условия:
(ТЗ.ПолучитьЗначение(-инд1,"Уровень")=уровень) и (ТЗ.ПолучитьЗначение(-инд1,"Конец")=0)

в отладчике же
ТЗ.ПолучитьЗначение(-инд1,"Уровень")=4
уровень = 5

и 4 <> 5.... как же тогда в тут в условие попасть? )
10 Soul771
 
20.07.15
19:20
(9) - ну у меня дальше, внутри цикла, после "конецесли;" уровень = уровень -1;
я не стала писать, т.к. не поняла то, почему "4<>5" для него стало ошибкой в выражении..
а оказывается, как написал в (4) Провинциальный 1сник, в 7 булево нет..
печалька...
11 Soul771
 
20.07.15
19:20
(10) - млин, не так написала... вот весь кусок кода, чтоб путаницы не было...
    Уровень = 5;
          
        Пока уровень<>0 Цикл
            
    
        
           Для инд1 = -КолВоСтрок По -1 Цикл
               
               если (ТЗ.ПолучитьЗначение(-инд1,"Уровень")=уровень) и (ТЗ.ПолучитьЗначение(-инд1,"Конец")=0) Тогда
                   Если уровень >1  Тогда
                       
               
                       для инд2 = инд1 по -1 цикл  
                           Если (ТЗ.ПолучитьЗначение(-инд2,"Уровень")=(уровень-1))  Тогда
                           ТЗ.УстановитьЗначение(инд1,"Конец",ТЗ.ПолучитьЗначение(-инд2,"Начало")-1);  
                           прервать;
                           КонецЕсли;
                       конецЦикла;
                   иначе
                          ТЗ.УстановитьЗначение(инд1,"Конец",НачалоТаблицы+1);  
                           КонецЕсли;
            КонецЕсли;        
               
               
        КонецЦикла;
        уровень = уровень -1;
        
    КонецЦикла;
12 HawkEye
 
20.07.15
19:21
(10) в (0) нет булево... и с точки зрения 7.7, если не учитывать извращенную методику обхода строк - код рабочий
13 HawkEye
 
20.07.15
19:22
(10) ошибка выражении - в отладчике... нельзя в отладчике такие конструкции писать.
14 HawkEye
 
20.07.15
19:24
(11) я под конец рабочего дня код с такой логикой не пойму )))

сделай проще, для отладки

Уровень = 5;
          
        Пока уровень<>0 Цикл
            
    
        
           Для инд1 = -КолВоСтрок По -1 Цикл
              
Сообщить("" + ТЗ.ПолучитьЗначение(-инд1,"Уровень") " + " = " + уровень + "?");
Сообщить("И");
Сообщить("" + ТЗ.ПолучитьЗначение(-инд1,"Конец") + " = 0?");

               если (ТЗ.ПолучитьЗначение(-инд1,"Уровень")=уровень) и (ТЗ.ПолучитьЗначение(-инд1,"Конец")=0) Тогда
                   Если уровень >1  Тогда
                      
              
                       для инд2 = инд1 по -1 цикл  
                           Если (ТЗ.ПолучитьЗначение(-инд2,"Уровень")=(уровень-1))  Тогда
                           ТЗ.УстановитьЗначение(инд1,"Конец",ТЗ.ПолучитьЗначение(-инд2,"Начало")-1);  
                           прервать;
                           КонецЕсли;
                       конецЦикла;
                   иначе
                          ТЗ.УстановитьЗначение(инд1,"Конец",НачалоТаблицы+1);  
                           КонецЕсли;
            КонецЕсли;        
              
              
        КонецЦикла;
        уровень = уровень -1;
        
    КонецЦикла;
15 0wl
 
20.07.15
19:38
Булево в отладчике можно с помощью тринарного оператора проверять: ?(ТЗ.ПолучитьЗначение(-инд1,"Уровень")=уровень, "истина", "ложь")  
Вообще, похоже, уровни от 0 до 4 идут, потому и не заходит
16 Soul771
 
20.07.15
19:40
(14), (15) - спасибо вам! сижу, разбираюсь))) про сортировку ТЗ не знала, намудрила с минусами похоже...
17 Mr_Rm
 
22.07.15
10:37
(11) с минусами напутано в двух местах:
ТЗ.УстановитьЗначение(инд1,... - должно быть ТЗ.УстановитьЗначение(-инд1,...
18 Vladal
 
22.07.15
11:38
(16) С минусами очень даже интересное решение.
Всегда писал в семерке конструкцию "КолвоСтрок - Индекс + 1".
19 HawkEye
 
22.07.15
11:59
(18) зачем минусы если есть Сортировка()?

вообще использовать ПолучитьЗначение(), установитьЗначение() - нужно только когда надо выбрать что-то из середины ТЗ, и то можно использовать ПолучитьСтрокуПОНомеру(),
но если выбираешь с краю (любого) надо использовать  ВыбратьСтроки(),получитьСТроку() - хотя бы по тому, что банально удобнее писать и обращаться к значениям в ТЗ.
20 1Сергей
 
22.07.15
12:03
(19) сортировка занимает некоторое количество времени
21 1Сергей
 
22.07.15
12:06
(16) интересно, разобралась? В чем проблема была?
22 HawkEye
 
22.07.15
12:07
(20) сомневаюсь, что это актуально для (0), да и вообще если вопрос производительности встает уже на уровне сортировки... надо менять подход и инструменты...
23 1Сергей
 
22.07.15
12:10
(22) ты лучше скажи, почему у нее фотку никто не попросил? сорри за офф
24 HawkEye
 
22.07.15
13:25
(23) стареет миста.... )))
Независимо от того, куда вы едете — это в гору и против ветра!