Имя: Пароль:
1C
1С v8
Растолкуйте синтаксис
0 Wobland
 
12.12.11
11:50
Условие="22";
Условие = + Условие + ", Номер";

Синтаксических ошибок не обнаружено! - это уже удивило. что здесь имеется в виду? строка типовая - из УниверсальныеПодборИОбработкаОбъектов.epf
1 Wobland
 
12.12.11
12:04
видать в этом случае неявно преобразуется в Условие=0+Условие;
2 palpetrovich
 
12.12.11
12:05
1с плас плас :)
3 Shurjk
 
12.12.11
12:06
(1) Когда выбираешь документ в 8.1  выдает в этом месте ошибку.
4 Shurjk
 
12.12.11
12:06
+(3) Тоже долго думал об этом приешле к мысли что это все таки баг а не фича.
5 skunk
 
12.12.11
12:08
скорее всего банально забыли ""
6 skunk
 
12.12.11
12:10
у мну кстати " Преобразование значения к типу Число не может быть выполнено"
7 БибиГон
 
12.12.11
12:11
(6) видимо смотря какая платформа?
8 Wobland
 
12.12.11
12:12
(7) пробовал на 8.1, в обработке для 8.2 то же видел.
(5) видать, забыли, да, только код же рабочий ;)
(6) Условие=22 - так нормально
9 Дядя Васька
 
12.12.11
12:14
Не понял, где ошибка-то? В первой строке строковое значение. Дальше конкатенация. На любом релизе и любой платформе должно работать по идее...
10 skunk
 
12.12.11
12:14
(8)не может преобразовать в число ", Номер" ... проверял на 8.2.13.219
11 ДенисЧ
 
12.12.11
12:14
(9)
Условие = +

тут ошибка...
12 Wobland
 
12.12.11
12:15
(10) Условие=22; Условие=+Условие; имел в виду
13 Wobland
 
12.12.11
12:15
(11) хрен вам, нет ошибки. синтаксической во всяком случае
14 skunk
 
12.12.11
12:15
(9)вот часть это кода "+ Условие" сделает из строки число ... а далее споткнется на преобразовании ", Номер"
15 БибиГон
 
12.12.11
12:16
(8) в (0) код рабочий? Условие = + Условие + ", Номер"; ?
16 Дядя Васька
 
12.12.11
12:16
(11),(12) Вон оно чо... Я это как-то за очепятку принял, думал вопрос в том что добавляет строку к числу, и все работает.
17 skunk
 
12.12.11
12:17
(13)есть ошибка в момент выполнения

Условие = "2200";
сообщить(Условие);
Условие = + Условие;
сообщить(Условие);
Условие = + Условие + ", Номер";
сообщить(Условие);

{Форма.Форма.Форма(7)}: Преобразование значения к типу Число не может быть выполнено
Условие = + Условие + ", Номер";
18 Wobland
 
12.12.11
12:18
(15) см (12)
19 Wobland
 
12.12.11
12:19
(17) на втором Сообщить() уже к числу преобразовано, судя по "2 200"
20 БибиГон
 
12.12.11
12:19
(18) в (0) у тебя строка , в (12) уже число. Условие=22  оО
21 Wobland
 
12.12.11
12:20
(20) не стою на месте, пробую разные варианты. (0) взят из "типовой"
22 Дядя Васька
 
12.12.11
12:21
(19) Ну и нормально, чего не так-то? Для преобразования к строке часто юзаю ""+Переменная, когда не знаю что в ней будет. Здесь то же самое, только к числу.
23 Живой Ископаемый
 
12.12.11
12:22
24 БибиГон
 
12.12.11
12:22
(22) Если Переменная это число то  ""+Переменная  преобразует к строке?
25 Живой Ископаемый
 
12.12.11
12:23
26 Wobland
 
12.12.11
12:23
(24) да
27 Дядя Васька
 
12.12.11
12:23
(24) О тож :) Так просто писать короче, чем Строка(Переменная)
28 ptiz
 
12.12.11
12:23
Не тормозите.

Почему код:
А = -Б;
вас не удивляет?

а
А = +Б;
удивляет?
29 Живой Ископаемый
 
12.12.11
12:24
30 Wobland
 
12.12.11
12:24
(28) как всё просто оказалось ;)
31 ДенисЧ
 
12.12.11
12:24
Да, действительно. С точки зрения синтакисиса там всё нормально.
А вот с точки зрения логики...
32 Дядя Васька
 
12.12.11
12:25
(31) Обычная опечатка. Видно же что строку делают.
33 Живой Ископаемый
 
12.12.11
12:26
34 Wobland
 
12.12.11
12:27
Условие = "Дата";
Если ИскомыйОбъект.Объект.ДлинаНомера > 0 Тогда
 Условие = + Условие + ", Номер";
КонецЕсли;

плюс, очевидно, лишний
35 Живой Ископаемый
 
12.12.11
12:28
36 Живой Ископаемый
 
12.12.11
12:28
а что с условием дальше делают?
37 Wobland
 
12.12.11
12:29
(36) запрос собирают
   Если Условие <> "" Тогда
       ТекстЗапроса = ТекстЗапроса + "{ГДЕ " + Условие + "}" + Символы.ПС;
   КонецЕсли;
38 Ненавижу 1С
 
гуру
12.12.11
12:29
кстати, давно хочу:

А += Б;
39 Wobland
 
12.12.11
12:30
(38) лучше так: ТекСтрока.Количество+=1;
40 Живой Ископаемый
 
12.12.11
12:30
2(37) тогда точно лишний...

но можно пофантазировать где бы пригодилось

http://screencast.com/t/37OZTkMC
41 Wobland
 
12.12.11
12:31
(40) "" вместо Строка(), <NULL> вместо число
42 Wobland
 
12.12.11
12:32
+(41) вместо Число()
43 Живой Ископаемый
 
12.12.11
12:33
ну вот нам и первая выгода...
44 Ненавижу 1С
 
гуру
12.12.11
12:35
(39) я разве не про тоже?
45 Wobland
 
12.12.11
12:35
(44) шутка юмора такая. а=а+1 меня не особо напрягает, а вот когда переменные длинные...
46 Живой Ископаемый
 
12.12.11
12:36
Самое наверное смешное:
http://screencast.com/t/v7TN8MOMHUE
47 Wobland
 
12.12.11
12:37
(46) у тебя ж во второй строке число вышло
48 Живой Ископаемый
 
12.12.11
12:42
Вот еще штука, которой сразу не ожидаешь, но после того увидел понятно что по-другому быть не может:
http://screencast.com/t/gv5qMvED
49 Wobland
 
12.12.11
12:43
(48) забавно ;)
50 orefkov
 
12.12.11
12:44
51 Wobland
 
12.12.11
12:45
(50) по ссылке не ходил, но как читать потом? (оно ж текст поменяет, да?)
52 Ненавижу 1С
 
гуру
12.12.11
12:47
(50) не-не-не, никакие автозамены тут не катят
если писать так:
Чтото.ПолучитьНечто().Упячка=Чтото.ПолучитьНечто().Упячка+1;
то ПолучитьНечто() вызовится 2 раза
а так:
Чтото.ПолучитьНечто().Упячка+=1;
только один раз
можно конечно
Нечто = Чтото.ПолучитьНечто();
Нечто.Упячка=Нечто.Упячка+1;
53 Evil-Wisp
 
12.12.11
12:57
А почему работает такой код?

Результат = + 22 ++ 1 ++ 2 + 1 + 2;

Получается 28.
54 Живой Ископаемый
 
12.12.11
12:57
а почему должен не работать?
55 Wobland
 
12.12.11
12:58
++ эквивалентно +0?
56 Evil-Wisp
 
12.12.11
12:58
А, ну да

Результат = + 22 + (+1) + (+2) + 1 + 2;
57 Живой Ископаемый
 
12.12.11
12:59
да нет + ЛюбаяПеременная - эквивалентно Число (ЛюбаяПеременная)

а ++ЛюбаяПеременная - эквивалентно  + Число (ЛюбаяПеременная)
58 Reset
 
12.12.11
12:59
ф=ф--1
эквивалентно ф=ф+1
;D
59 Wobland
 
12.12.11
13:00
нуда, ++ эквивалентно +НекаяПеременная
60 Живой Ископаемый
 
12.12.11
13:00
вот-вот, равно как и
+ 22 ++"1" ++ "2" + 1 + 2
61 Reset
 
12.12.11
13:00
или ф=ф--Истина;
62 Ненавижу 1С
 
гуру
12.12.11
13:01
а теперь ВНИМАНИЕ вопрос, чему должна быть равна переменная, чтобы условие выполнялось:

Если А=А-1 Тогда
63 Reset
 
12.12.11
13:03
Пустой дате?
64 ЧеловекДуши
 
12.12.11
13:04
(62)Это то откуда у вас?
65 Ненавижу 1С
 
гуру
12.12.11
13:05
(63) с тобой неинтересно
66 Evil-Wisp
 
12.12.11
13:26
Почему Дата('99991231235959') <> Дата('99991231235959') + 1?
67 Wobland
 
12.12.11
13:36
поддержу ветку

код:
Сообщить('99991231235959');
Сообщить('99991231235959' + 1);
Сообщить('99991231235959'='99991231235959' + 1);

результат:
31.12.9999 23:59:59
31.12.9999 23:59:59
ложь

10000й год не умеем корректно отображать?
68 Wobland
 
12.12.11
13:37
нет. Год('99991231235959' + 200) = 9999
69 Evil-Wisp
 
12.12.11
13:42
Еще интересно ДобавитьМесяц('99991231235959', 1) = "01.01.0001 0:00:00"

Видимо '99991231235959' логически максимальное значение типа Дата, а физически нет.
70 palpetrovich
 
12.12.11
14:56
(48) забавно, но почему 3-я не прокатила я не понял :(
71 Живой Ископаемый
 
12.12.11
15:06
2(70) разве бывает число с двумя дробными частями? 2000.42.0033?
72 palpetrovich
 
12.12.11
15:30
(71) стопудово туплю, но почему здесь работает:
+"2000" + ".42" + ".0033"
а здесь нет
+("2000" + ".42" + ".0033")
73 palpetrovich
 
12.12.11
15:31
+72, а наверное потому что сначала получается строка "2000.42.0033"?
74 Живой Ископаемый
 
12.12.11
15:32
2(72) божечки.. ну это же очевидно...
во втором случае - сначала все происходит внутри скобок.. и внутри скобок у нас строка.
и только потом происходит попытка преобразовать в число.
а в превом случае мы сразу оперируем числами...
ну это же не знаю - аналогия 4-го лкасса, когда проходят скобки по арифметике
75 Живой Ископаемый
 
12.12.11
15:33
то есть
+"2000" - нам сразу дает число - 2 000 и потом все остальные плюсы пытаются преобразовать свои аргументы также к числу...
76 Evil-Wisp
 
13.12.11
07:29
(69) Даже еще интересней

Сообщить('99991231235959' = '99991231235959' + 1 -1);
Ложь
77 Evil-Wisp
 
13.12.11
07:42
Разгаданно :)
Сообщить((Дата('00010101') + 315537897599) - Дата('00010101'));
Сообщить((Дата('00010101') + 315537897600) - Дата('00010101'));

Результат:

315 537 897 599
315 537 897 598,9999

У даты появляется дробная часть, от которой потом сложно избавиться избавится :)

Сообщить('99991231235959' = '99991231235959' + 1 - 0.9999);
Истина
78 Wobland
 
13.12.11
07:46
чуть-чуть опередил ;)

Сообщить(('99991231235959'+1) - '99991231235959');
0,9999
79 orefkov
 
13.12.11
09:54
Вот помню в 80х в Технике-Молодежи статейки были об исследовании багов переполнения на БЗ-34 - вот это да, клево было, 3ГГОГи всякие ловить.
80 ДенисЧ
 
13.12.11
09:55
(79) Это да... Но на моём мк-52 половина не воспроизводилась :-(
81 DJ Anthon
 
16.12.11
08:58
(62) и че, если так в коде написать - это будет быдлокодство или нет? по идее, код короче, но становится намного непонятнее.. если, конечно, не знать про это )
82 DJ Anthon
 
16.12.11
09:00
кстати, в типовой обработке справочников и документов не предусмотрели выход по кантралбрейку, уроды. сижу теперь, пялюсь на этот процесс, а рушить низя (
Независимо от того, куда вы едете — это в гору и против ветра!