Имя: Пароль:
1C
1С v8
Недокументированные возможности вызова процедур
0 MyNameIs
 
02.06.20
08:53
Нашел в типовой конфигурации вызов процедуры, где параметр передается в виде "+1". Где-нибудь в документации есть описание таких инкрементаций?

&НаКлиенте
Процедура ВыполнитьПереходДалее()
    
    ИзменитьПорядковыйНомерПерехода(+1);
    
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьПорядковыйНомерПерехода(Итератор)
    
    ОчиститьСообщения();
    
    УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор);
    
КонецПроцедуры
1 ptiz
 
02.06.20
08:56
(0) Это для наглядности кто-то написал "+1" вместо "1"
2 ДенисЧ
 
02.06.20
08:58
Это не инкрементация. Это кто-то просто забыл убрать +.
Наверное, раньше было "порядок + 1", потом порядок убрали.
3 Ненавижу 1С
 
гуру
02.06.20
09:05
опять же форматирование текста красивое

ИзменитьПорядковыйНомерПерехода(+1);
ИзменитьПорядковыйНомерПерехода(-1);

кстати, чисто академический вопрос: +1 - это константа "+1" или унарный оператор + примененный к константе "1"?
4 MyNameIs
 
02.06.20
09:06
(1) (2)  Сомнительно, что это так. Вот еще пример, где делается декрементация.

&НаКлиенте
Процедура ПерейтиДалее()
    
    ИзменитьПорядковыйНомерПерехода(+1);
    
КонецПроцедуры

&НаКлиенте
Процедура ПерейтиНазад()
    
    ИзменитьПорядковыйНомерПерехода(-1);
    
КонецПроцедуры
5 dka80
 
02.06.20
09:09
ИзменитьПорядковыйНомерПерехода(1) - так понятно, следующее значение будет больше или меньше? А вот ИзменитьПорядковыйНомерПерехода(-1) говорит, что следующее значение будет меньше. Сделано для наглядности
6 NorthWind
 
02.06.20
09:16
(0) +1 - это то же самое что 1. Плюс в данном случае игнорируется.
7 MyNameIs
 
02.06.20
09:18
Переписал свою процедуру, где делается рекурсивный вызов - всё работает.

..    
    Если РезультатЗапроса.result.Навигация.ЕстьЕще = "Да" Тогда
        //НомерСтраницы = НомерСтраницы + 1;
        //СписокДокументов(НомерСтраницы);
        СписокДокументов(+1);
    КонецЕсли;
    
КонецПроцедуры
8 MyNameIs
 
02.06.20
09:20
(6) Тогда как объяснишь что происходит в (4). Плюс смотри (7).
9 fisher
 
02.06.20
09:28
(8) Не тупи. Это не инкремент/декремент. Это просто унарный оператор.
Читай "Описание языка" - "Арифметические операции" - "Унарный минус"
Унарный плюс отдельно не описывается, потому что никакого смысла он не несет и эквивалентен его неиспользованию.
10 ДенисЧ
 
02.06.20
09:30
Инкремент, это когда сч++ (ну, или для эстэтов ++сч).
А тут просто явная спецификация знака.
11 fisher
 
02.06.20
09:31
"Это просто унарный оператор" = "Это просто унарный оператор знака"
12 fisher
 
02.06.20
09:32
Просто автор функции использовал его для наглядности.
13 fisher
 
02.06.20
09:34
(10) Почему "для эстетов"? Разные операции для разных целей.
14 NorthWind
 
02.06.20
09:34
(10) это не то чтобы для эстетов... если использовать конструкции ++i и i++ в выражениях, то результат может меняться
15 NorthWind
 
02.06.20
09:36
если эта штука используется сама по себе, т.е. i++; или ++i; - тогда разницы действительно нет. А если в выражении, то порядок вычисления поменяется.
16 MyNameIs
 
02.06.20
09:37
(9) Тогда как объяснишь почему работает (7)? Результат работы не поменялся.
17 ДНН
 
02.06.20
09:39
(15) ++i производительней
18 VladZ
 
02.06.20
09:40
(0) "Недокументированные возможности вызова процедур" ?

Ну давай... Расскажи нам про недокументированные возможности.
Поржем вместе.
19 ДНН
 
02.06.20
09:40
(16)

&НаКлиенте
Процедура Команда1(Команда)
    СообщитьЧисло(1);
    СообщитьЧисло(+1);
    СообщитьЧисло(-1);
КонецПроцедуры

&НаКлиенте
Процедура СообщитьЧисло(Число)
    Сообщить(Число);
КонецПроцедуры

Можешь проверить у себя. Во всех трех случаях сообщит 1
20 fisher
 
02.06.20
09:41
(16) Не поменяться он мог в единственном случае. При "НомерСтраницы = 0". В противном случае кури отладчик, чтобы понять где ты затупил.
21 mikecool
 
02.06.20
09:42
(0) не слушай никого! это чистая магия от 1с
22 ДНН
 
02.06.20
09:43
к (19) в третьем случае конечно же сообщит -1
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший