![]() |
![]() |
![]() |
|
OFF: Темпоральная ловушка 7.70.24 (фантастический рассказ) | ☑ | ||
---|---|---|---|---|
0
romix
11.04.05
✎
03:43
|
Штуман, ругаясь, как 1С-ник, совершил вынужденную посадку. Холмистая долина была покрыта вечерним туманом. На какое-то время затихнув от звука не самой мягкой посадки (больше похожей на падение какого-то метеорита), снова засвиристели насекомые. Капитан справился с показаниями приборов.
стр=Формат(1, "ДДДММГГГГ"); Сообщить(стр);//Этот код выводит: "12.31.-471" Машина времени дала сбой, и рейсовый темпоаэробус с 1С-никами на борту попал в 471 год до н.э. Причем, что характерно, в 12 мартобря... Пути назад уже не было... стр=Формат(1, "ДДДММММГГГГ"); Сообщить(стр);//Выводит: "12 XГкsО -471 г." * * * ...Археологи обнаружили загадочную надпись на древнем склепе 1С-ника... Надпись гласила: "12 XГкsО -471 г.". "Переполнение буфера" - догадались археологи... стр=Формат(7, "ДНННН"); Сообщить(стр);//Понедельник ...Археологи долго удивлялись загадкам календаря древних 1С-ников... д='01.03.2005'; н=НомерДняНедели(д); Сообщить(н);//2 "2- это вторник, не так ли?" подумал главный археолог. А почему же тогда 7 день - это понедельник? "Видимо, это опять что-то с типами данных", подумал археолог и продолжил исследование памятников древней цивилизации. д=Дата(20050,03,01); Сообщить(д);//Этот код выводит: "30.00.05" Видимо, месяц с номером 00 называется ""мерцедоний"" (был такой месяц у древних римлян), решил главный археолог. Древние 1С-ники научились не только строить величественные храмы, но и сдвигать (вправо) время: стр=Формат('01.01.2005', ""Ч>1""); Сообщить(стр);//245337.2 //Дата, сдвинутая на 1 разряд вправо :-) Археологи были поражены открытым древними 1С-никами законом зависимости времени и денег, когда время, минуя какие-либо преобразования, сразу превращается в деньги: стр=Формат('01.01.2005', "ЧПДС"); Сообщить(стр); //Выводит: "Два миллиона четыреста пятьдесят три тысячи триста семьдесят два рубля 00 копеек" После открытия этого закона и была, согласно древнему пророчеству, изобретена машина времени. стр=Формат('01.01.0000', "ЧПДС"); Сообщить(стр); //Выводит: "Один миллион семьсот двадцать одна тысяча шестьдесят один рубль 00 копеек" ... Причем, на перемещение в самую древнюю эпоху, в качестве темпорального горючего, требовалось не так много рублей... ...А особенно удивились археологи той глубокой философии, с которой древние 1С-ники считали свои (и чужие) деньги... стр=Формат(123456, ""Ч5.2""); Сообщить(стр);//Выводит: 99.99 1С - ники попрали глубиной экономической и программистской мысли не только темпоральные законы, но и законы сохранения, подумал археолог, углубляясь в свои расчеты. стр=Формат(12345678901234567890, "ЧПДС"); Сообщить(стр);//Выводит: "Сто двадцать три триллиона четыреста пятьдесят шесть миллиардов семьсот восемьдесят девять миллионов двенадцать тысяч триста сорок пять долларов 78 центов" "...Квинтильоном больше - секстильоном меньше - все равно так много денег не заработать" - думали 1С-ники, выпуская 24 релиз 1С:Предприятие. Но археологи так и не поняли, откуда в этом расчете взялись 78 центов, хотя число на входе алгоритма - целое... "Видимо, опять переполнение буфера" - решил главный археолог, и загнал кирку поглубже в породу. Из скалы выглянул краешек ключа защиты 1С. "Культовый предмет древней цивилизации" - подумал археолог, и осторожно, опасаясь, что ключ защиты окажется все-таки не найденным, стал освобождать предмет защитного ритуала древних 1С-ников из толщи горной породы. |
|||
1
insider
11.04.05
✎
04:05
|
LOL
неужели все так хорошо в релизе? |
|||
2
romix
11.04.05
✎
04:12
|
(1) Все примеры протестил. Может, и в 25 релизе то же самое (у меня щас под рукой его просто нет).
|
|||
3
insider
11.04.05
✎
04:17
|
Господи, храни бета-тестеров :)
|
|||
4
Зуекщмшср
11.04.05
✎
04:20
|
Маладец, приятно написано
|
|||
5
Злобный Фей
11.04.05
✎
04:31
|
Супер lol
|
|||
6
romix
11.04.05
✎
04:32
|
thanxx :-)
Вообще-то я писал дополнения (примеры) к ALS для 7.7. Стока всего блин нарыл. :-) В 8-ке кстати подобных ошибок почти не осталось, или же совсем не осталось. И там правильно генерят исключения, если, например, я пишу ч=Число("121кабан мимо пролетал"); Сообщить(ч);//Выводит: "121" и правильно отрабатываются запятые, если я пишу: ч=Число(""9,99""); Сообщить(ч);//Выводит: "9" В 7.7 же поврежденное значение - ну и пох, будет поврежденное или нулевое число, безо всяких там RaiseException... |
|||
7
Волшебник
11.04.05
✎
05:06
|
Отлично!
|
|||
8
Полосатый Мух
11.04.05
✎
05:51
|
Класс! Книги писать не пробовал?
В тему, а может и нет ?:) - при обработке дат местами проскакивает х...нь, например дата рождения сотр. вывожу на печатную форму в формате хх.хх.хххх -> некоторые значения обрабатываются -> исх("хх.хх.84") на вых ("хх.хх.2084") Выход нашел. Но вопрос остался. Это глюк из разряда "Темпоральных ловушек"?:) |
|||
10
GrayT
11.04.05
✎
08:54
|
(0)Вах! Как чудненько
|
|||
11
yarosha
11.04.05
✎
09:04
|
romix
в 25 то же самое |
|||
12
Нормальный программи
11.04.05
✎
09:14
|
В этих случаях должны возбуждаться исключительные ситуации
|
|||
13
durachok
11.04.05
✎
09:15
|
(0)Отлично! Просто плакал! Когда 1с начнут типизировать переменные?
|
|||
14
Нормальный программи
11.04.05
✎
09:17
|
(13) Никогда
Когда в VBScript/JScript начнут типизировать переменные? - никогда |
|||
15
romix
11.04.05
✎
13:06
|
(14) Встроенный проблемно-ориентированный язык Flash кстати улучшается:
"во Flash MX 2004, появилась концепция ООП, добавилась возможность строгой типизации, поддержка полной чувствительности идентификаторов к регистру и ..." var i:Number=10; i="aaa"; //исключение В 1С 7.7: x=10; x=x*"aaa"; Сообщить(x);//0 В 1С 8.0: {ВнешняяОбработка.ВнешняяОбработка1(2)}: Преобразование значения к типу Число не может быть выполнено x=x*"aaa"; В JS var wsh = WScript.CreateObject("WScript.Shell"); var x=10; x=x*"aaa"; wsh.Popup(x); //-1#Und |
|||
16
romix
11.04.05
✎
13:09
|
(9) Я что-то не нашел ошибок на эту же тему в 8.0.
//Код 7.7 стр=Формат("100 дятлов", "ЧПДС"); Сообщить(стр);//Сто долларов 00 центов //Внимание, вопрос: сколько стоит 1 (один) дятел? :-) |
|||
17
Керниган мимо пробег
11.04.05
✎
15:41
|
А предшественник языка C - язык B тоже был бестиповым...
|
|||
18
Кабан мимо пробеган
11.04.05
✎
16:16
|
(6)
Нас 8 рыл всего. Летать мы не умеем. ЗЫ (0) эт хорошо. |
|||
19
Dies
11.04.05
✎
20:47
|
(17) Ты еще про А вспомни.
|
|||
22
romix
12.04.05
✎
02:44
|
(19) Вот что пишут Керниган и Ритчи насчет "кусочков пуха" в программе:
"Язык "C" не является языком со строгими типами в смысле паскаля или алгола 68. Он сравнительно снисходителен к преобразованию данных, хотя и не будет автоматически преобразовывать типы данных с буйной непринужденностью языка PL/1. Существующие компиляторы не предусматривают никакой проверки во время выполнения программы индексов массивов, типов аргументов и т.д. В тех ситуациях, когда желательна строгая проверка типов, используется специальная версия компилятора. Эта программа называется LINT очевидно потому, она выбирает кусочки пуха из вашей программы. Программа LINT не генерирует машинного кода, а делает очень строгую проверку всех тех сторон программы, которые можно проконтролировать во время компиляции и загрузки. Она определяет несоответствие типов , несовместимость аргументов, неиспользованные или очевидным образом неинициализированные переменные, потенциальные трудности переносимости и т.д. Для программ,которые благополучно проходят через LINT, гарантируется отсутствие ошибок типа примерно с той же полнотой, как и для программ, написанных, например, на АЛГОЛЕ-68." (с) |
|||
23
Доныч
12.04.05
✎
18:33
|
(0)
стр=Формат(123456, ""Ч5.2""); Сообщить(стр);//Выводит: 99.99 Это вроде как фича. Длина числа - это с учетом десятичной точки и знака. Т.е. для -12345 было бы наверное -9.99 |
|||
24
romix
13.04.05
✎
01:34
|
(23) Ну если число не влезло, типа надо его слегка покоцать? :0)
Имхо это исключительная ситуация, которую надо отрабатывать. Ёксель например показывает такие числа значками ####. Если сложить в Ёкселе несколько чисел и, например, строку "ххх", то он выдаст ошибку, а не попытается все чохом просуммировать, проигнорировав проблему. Так что имхо такие ошибки нельзя отнести к правильному стилю работы с числами (и хорошо что их, возможно, нет, например, на транспорте; хотя, от российского транспорта, в т.ч. атомных подлодок, можно ожидать, наверное, чего угодно). :-) |
|||
25
Доныч
13.04.05
✎
18:31
|
(24) Я не спорю. Пост (23) к тому, что это не проблема конкретного релиза, а фича 1С. То есть такое было и в других релизах.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |